找到了免费查询农历和黄历的网站SoJson在线(https://www.sojson.com),网站最上面的菜单选择“免费JSON API”可以看到使用SoJson免费提供的API数据的帮助文件。
按照帮助文件提供的API数据查询链接和网站返回的数据格式编写查询阴历和老黄历的代码:
# 查询万年历
import json
import requests
# 按网站要求格式拼接链接字串
def url_name(dateStr):
if dateStr=='':
full_url = 'https://www.sojson.com/open/api/lunar/json.shtml'
else:
api = 'https://www.sojson.com/open/api/lunar/json.shtml?date='
full_url = api + dateStr
return full_url
# 主函数
while True:
print('\n{:=^40}'.format('欢迎进入万年历查询系统'))
# {:=^40}是规定整个字串占40个字符的位置,'欢迎进入万年历查询系统'居中(^),其他位置用'='填补上(=)
dateStr = input('请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:').upper()
# 用字符串的方法函数upper()处理下,输入q也能退出
if dateStr == 'Q':
print('您已退出万年历查询系统!')
break
url = url_name(dateStr) # 调用函数构建向网站提请数据申请的链接字串
response = requests.get(url) # 向网站请求,返回网站回应的response对象
rs_dict = json.loads(response.text) # 使用loads()将json字符串转换成字典类型
error_code = rs_dict['status']
# 根据网站的API接口说明:error为200表示查询到了信息
if error_code == 200:
# 对数据的处理完全由返回JSON的内部结构和键值决定
lunar_data = rs_dict.get('data')
convertWeek = {'Monday':'星期一', 'Tuesday':'星期二', 'Wednesday':'星期三',
'Thursday':'星期四', 'Friday':'星期五', 'Saturday':'星期六', 'Sunday': '星期日'}
weekCN = convertWeek.get(lunar_data['week'])
if rs_dict.get('leap'):
leapMon = '闰月'
else:
leapMon = '不是闰月'
result = {
'year' : lunar_data.get('year'), # 公历年
'month': lunar_data.get('month'), # 公历月
'day': lunar_data.get('day'), # 公历日
'cnYear' : lunar_data.get("lunarYear"), # 数字农历年
'cnmonth' : lunar_data.get('cnmonth'), # 农历中文表示月
'cnday' : lunar_data.get('cnday'), # 农历中文标示天
'hyear' : lunar_data.get('hyear'), # 黄历年
'suit' : lunar_data.get('suit'), # 适宜
'taboo' : lunar_data.get('taboo'), # 禁忌
'zodiac': lunar_data.get('animal'), # 属相
'week': weekCN, # 星期几
'leap' : leapMon # 是否闰年
}
print('''\n公历{year}年{month}月{day}日是农历{cnYear}{hyear}{zodiac}年{cnmonth}月{cnday},{week},{leap}
适宜{suit}
禁忌{taboo}'''.format(**result))
# 字典变量按照占位符{}内的键值把值填进去
else:
print('没有查询到黄历信息!')
这段代码的运行结果:
==============欢迎进入万年历查询系统=============== 请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:
公历2018年10月9日是农历2018戊戌狗年九月初一,星期二,不是闰月 适宜祭祀,造车器,出行,修造,上梁,盖屋,安门,安床,造畜稠,教牛马 禁忌出货财,开仓,动土,破土,安葬,行丧,伐木,开渠,栽种
==============欢迎进入万年历查询系统=============== 请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:1949010-1 没有查询到黄历信息!
==============欢迎进入万年历查询系统=============== 请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:1949-10-1
公历1949年10月1日是农历1949己丑牛年八月初十,星期六,不是闰月 适宜祭祀,祈福,修饰垣墙,平治道涂,入殓,移柩 禁忌嫁娶,入宅,上梁,安门
==============欢迎进入万年历查询系统=============== 请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:q 您已退出万年历查询系统! |
即将推出的Python ABC教程对PythonABC视频内容进行了梳理,修正了发现的错误、对代码做了些许优化、替换掉视频中的英文注释、替换掉国内不能访问的资源……敬请关注,谢谢