Python獲取中國節(jié)假日數(shù)據(jù)記錄入JSON文件
項(xiàng)目系統(tǒng)內(nèi)置的日歷應(yīng)用為了提升用戶體驗(yàn),特別設(shè)置了在調(diào)休日期顯示“休”的UI圖標(biāo)功能。那么問題是這些調(diào)休數(shù)據(jù)從哪里來呢?
開發(fā)盆友首先訪問政府官網(wǎng),查閱并記錄下年度的節(jié)假日及調(diào)休安排,再錄入數(shù)據(jù)庫。作為追求效率與自動(dòng)化的我(懶),并不認(rèn)可這種“可愛”的方式。
我嘗試一種更為智能的方法:Python獲取中國節(jié)假日數(shù)據(jù)記錄入JSON文件。
節(jié)假日數(shù)據(jù)獲取
獲取地址:https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/年份.json
requests請(qǐng)求即可
import requests year = 2024 url = f'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json' # 網(wǎng)址 res = requests.get(url=url, timeout=10) # 發(fā)送請(qǐng)求 print(res.json())
運(yùn)行結(jié)果:
存入JSON文件
tinydb創(chuàng)建JSON文件,插入獲取到的數(shù)據(jù)
from tinydb import TinyDB if res.status_code == 200: # 校驗(yàn)是否返回?cái)?shù)據(jù) res_data = res.json() y = res_data.get('year') d = res_data.get('days') p = res_data.get('papers') with TinyDB(f'{year}.json') as db: # 創(chuàng)建/打開tinydb db.truncate() # 清空數(shù)據(jù) db.insert({'year': y, 'days': d, 'papers': p}) # 插入數(shù)據(jù)
運(yùn)行結(jié)果:
節(jié)假日數(shù)據(jù)讀取
保存的節(jié)假日數(shù)據(jù)是以年份為名稱的不同JSON文件,使用tinydb讀取即可
import os from tinydb import TinyDB year = 2022 files = [files for root, dirs, files in os.walk(os.path.dirname(os.path.abspath(__file__)))] # 遍歷當(dāng)前文件夾 json_file_list = [os.path.splitext(f)[0] for f in files[0]] # 分割文件名 if str(year) in json_file_list: # 校驗(yàn)是否存在年份數(shù)據(jù) with TinyDB(f"{year}.json") as db: # 打開tinydb print(db.all()) # 獲取所有數(shù)據(jù) else: print(f'{year}年數(shù)據(jù)不存在')
運(yùn)行結(jié)果:
封裝完整代碼
import os import traceback import requests from tinydb import TinyDB class ChineseHoliday: """ 中國節(jié)假日獲取 """ @staticmethod def download(year): """ 獲取并保存節(jié)假日json數(shù)據(jù) 獲取地址來源:https://github.com/NateScarlet/holiday-cn :return: """ try: url = f'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json' # 網(wǎng)址 res = requests.get(url=url, timeout=10) # 發(fā)送請(qǐng)求 # print(res.json()) if res.status_code == 200: # 校驗(yàn)是否返回?cái)?shù)據(jù) y = res.json().get('year') d = res.json().get('days') p = res.json().get('papers') with TinyDB(f'{year}.json') as db: # 創(chuàng)建/打開tinydb db.truncate() # 清空數(shù)據(jù) db.insert({'year': y, 'days': d, 'papers': p}) # 插入數(shù)據(jù) except Exception as e: info = f"出了點(diǎn)小問題!\n{repr(e)}\n{traceback.format_exc()}" print(info) @staticmethod def get(year): files = [files for root, dirs, files in os.walk(os.path.dirname(os.path.abspath(__file__)))] # 遍歷當(dāng)前文件夾 json_file_list = [os.path.splitext(f)[0] for f in files[0]] # 分割文件名 if str(year) in json_file_list: # 校驗(yàn)是否存在年份數(shù)據(jù) with TinyDB(f"{year}.json") as db: # 打開tinydb return db.all() # 獲取所有數(shù)據(jù) return
到此這篇關(guān)于Python獲取中國節(jié)假日數(shù)據(jù)記錄入JSON文件的文章就介紹到這了,更多相關(guān)Python獲取中國節(jié)假日數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中l(wèi)ogging日志庫實(shí)例詳解
這篇文章主要介紹了Python常用庫logging日志庫的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02使用Python實(shí)現(xiàn)為PDF文檔設(shè)置背景色或背景圖
PDF作為一種跨平臺(tái)、高保真的文件格式被廣泛應(yīng)用,這篇文章主要為大家詳細(xì)介紹了如何使用Python代碼對(duì)PDF文檔進(jìn)行頁面背景色或背景圖片的設(shè)置,需要的可以參考下2024-04-04基于Python實(shí)現(xiàn)復(fù)刻人生重開模擬器
人生重開模擬器是由VickScarlet上傳至GitHub的一款簡單的文字網(wǎng)頁游戲。本文將用Python復(fù)刻一下這個(gè)游戲,感興趣的小伙伴可以嘗試一下2022-10-10python中字符串變二維數(shù)組的實(shí)例講解
下面小編就為大家分享一篇python中字符串變二維數(shù)組的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python繪制分段函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了Python繪制分段函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn)
Python Flask 框架是一個(gè)輕量級(jí)的 Web 框架,它簡單易用,靈活多變,非常適合用于構(gòu)建小型到中型規(guī)模的 Web 應(yīng)用程序,本文給大家介紹了Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn),需要的朋友可以參考下2024-06-06從頭學(xué)Python之編寫可執(zhí)行的.py文件
這篇文章主要介紹了從頭學(xué)Python之編寫可執(zhí)行的.py文件,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Python?Requests?基本使用及Requests與?urllib?區(qū)別
在使用Python爬蟲時(shí),需要模擬發(fā)起網(wǎng)絡(luò)請(qǐng)求,主要用到的庫有requests庫和python內(nèi)置的urllib庫,一般建議使用requests,它是對(duì)urllib的再次封裝,今天通過本文給大家講解Python?Requests使用及urllib區(qū)別,感興趣的朋友一起看看吧2022-11-11selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法
這篇文章主要介紹了selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09