holiday 源代码

import requests
import sys

from datetime import datetime, timedelta
from inspect import currentframe, getframeinfo


def __LINE__(): return getframeinfo(currentframe())


url = "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php"
headers = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
    "Host": "sp0.baidu.com",
    "Referer": "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%8A%82%E5%81%87%E6%97%A5&fenlei=256&oq=2018%25E8%258A%2582%25E5%2581%2587%25E6%2597%25A5&rsv_pq=8de302bd002cc498&rsv_t=2cc3aU63WSGiphFIBTZomft6x1holOlQtHEE639qO%2FeRw1PqiovxWbJnZIk&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=2&rsv_sug2=0&rsv_btype=t&inputT=106&rsv_sug4=548",
    "Accept": "*/*",
    "Accpet-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
}


[文档]def dt_generator(start, end): if not end: end = datetime.today() ret = [dt for i in range((end - start).days + 1) if (dt := end - timedelta(days=i)).weekday() not in [5, 6]] return ret
[文档]def fetch(dt): params = { "query": dt.strftime("%Y年%-m月"), "co": "", "resource_id": "39043", "ie": "utf8", "oe": "gbk", "format": "json", "tn": "wisetpl" } resp = requests.get(url, params=params, headers=headers) if resp.status_code != 200: print("request HTTP Response status code error: ", resp.status_code) return None return resp
[文档]def get_holiday(start_date: datetime, end_date: datetime) -> set: holidays = set() while True: if start_date > end_date: break resp = fetch(start_date) try: data = resp.json() data = data['data'][0]['almanac'] for d in data: t = f"{d['year']}{'0' + d['month'] if len(d['month']) == 1 else d['month']}{'0' + d['day'] if len(d['day']) == 1 else d['day']}" if 'status' in d and d['status'] == '1': holidays.add(t) start_date += timedelta(90) except IndexError: print(f'[jjr_debug:{__LINE__()}]{start_date}') print(f'[jjr_debug:{__LINE__()}]{resp.text}') print(f'[jjr_debug:{__LINE__()}]{resp.url}') break return holidays
if __name__ == '__main__': args = sys.argv if len(args) <= 1: print(f"Usage: python3 {args[0]} start_date end_date[option]") sys.exit(1) try: start_dt = datetime.strptime(args[1], "%Y-%m-%d") except: start_dt = datetime.strptime(args[1], "%Y%m%d") if len(args) <= 2: end_dt = datetime.today() else: try: end_dt = datetime.strptime(args[2], "%Y-%m-%d") except: end_dt = datetime.strptime(args[2], "%Y%m%d") holidays = get_holiday(start_dt, end_dt) print(f"{start_dt.strftime('%Y-%m-%d')} - {end_dt.strftime('%Y-%m-%d')} 一共 {len(holidays)} 天节假日:") print('["', end='') print('","'.join(holidays), end='') print('"]')