网站API数据和CSV文件

找到了免费查询农历和黄历的网站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退出查询:

 

公历2018109日是农历2018戊戌狗年九月初一,星期二,不是闰月

适宜祭祀,造车器,出行,修造,上梁,盖屋,安门,安床,造畜稠,教牛马

禁忌出货财,开仓,动土,破土,安葬,行丧,伐木,开渠,栽种

 

==============欢迎进入万年历查询系统===============

请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:1949010-1

没有查询到黄历信息!

 

==============欢迎进入万年历查询系统===============

请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:1949-10-1

 

公历1949101日是农历1949己丑牛年八月初十,星期六,不是闰月

适宜祭祀,祈福,修饰垣墙,平治道涂,入殓,移柩

禁忌嫁娶,入宅,上梁,安门

 

==============欢迎进入万年历查询系统===============

请输入您要查询的日期(格式:yyyy-mm-dd,如2020-01-01),回车查询今天,输入Q退出查询:q

您已退出万年历查询系统!

即将推出的Python ABC教程对PythonABC视频内容进行了梳理,修正了发现的错误、对代码做了些许优化、替换掉视频中的英文注释、替换掉国内不能访问的资源……敬请关注,谢谢