【Python】requestsで祝日データCSVをダウンロードする(Pikaday.jsのCSS用)

2021年2月20日プログラムCSS,Pikaday.js,python,祝日

内閣府のサイトから祝日データCSVをダウンロードして、整形する。
今回はPikaday.jsのCSS用に整形する。
国民の祝日について

スポンサーリンク

データの取得

requestsとpandasは別途pipなどでインストール必要。
インストールは面倒なのでGoogle Colaboratoryで行う。

Pythonコード

START_DATEは、任意の日付を入れる。
例では2021-01-01を入れている。

import io
import requests
import pandas as pd

START_DATE = '2021-01-01'
url = 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv'
res = requests.get(url)

df = pd.read_csv(io.BytesIO(res.content), encoding='shift-jis', sep=",")
df_after_this_year = df[df['国民の祝日・休日月日'] > START_DATE]
holidays = df_after_this_year['国民の祝日・休日月日']
holidays

出力

942      2021/1/1
943     2021/1/11
944     2021/2/11
945     2021/2/23
946     2021/3/20
947     2021/4/29
948      2021/5/3
949      2021/5/4
950      2021/5/5
951     2021/7/22
952     2021/7/23
953      2021/8/8
954      2021/8/9
955     2021/9/20
956     2021/9/23
957     2021/11/3
958    2021/11/23
959      2022/1/1
960     2022/1/10
961     2022/2/11
962     2022/2/23
963     2022/3/21
964     2022/4/29
965      2022/5/3
966      2022/5/4
967      2022/5/5
968     2022/7/18
969     2022/8/11
970     2022/9/19
971     2022/9/23
972    2022/10/10
973     2022/11/3
974    2022/11/23
Name: 国民の祝日・休日月日, dtype: object

データの整形

データは取得できたので、あとは整形を行う。

Pythonコード

selector = ''
for i, holiday in enumerate(holidays):
    year, month, day = holiday.split('/')
    # 1月が0、12月が11
    month = str(int(month) - 1)
    # 1行目以降はカンマと改行をつける
    selector += '' if i == 0 else ',\n'
    selector += 'button[data-pika-year="{}"][data-pika-month="{}"][data-pika-day="{}"]'.format(year, month, day)
else:
    selector += '{\n    color: #f00;\n}'

# 出力
print(selector)

# ファイルに保存
with open('holidays.css', 'w', encoding='utf-8') as f:
    f.write(selector)

出力

button[data-pika-year="2021"][data-pika-month="0"][data-pika-day="1"],
button[data-pika-year="2021"][data-pika-month="0"][data-pika-day="11"],
button[data-pika-year="2021"][data-pika-month="1"][data-pika-day="11"],
button[data-pika-year="2021"][data-pika-month="1"][data-pika-day="23"],
button[data-pika-year="2021"][data-pika-month="2"][data-pika-day="20"],
button[data-pika-year="2021"][data-pika-month="3"][data-pika-day="29"],
button[data-pika-year="2021"][data-pika-month="4"][data-pika-day="3"],
button[data-pika-year="2021"][data-pika-month="4"][data-pika-day="4"],
button[data-pika-year="2021"][data-pika-month="4"][data-pika-day="5"],
button[data-pika-year="2021"][data-pika-month="6"][data-pika-day="22"],
button[data-pika-year="2021"][data-pika-month="6"][data-pika-day="23"],
button[data-pika-year="2021"][data-pika-month="7"][data-pika-day="8"],
button[data-pika-year="2021"][data-pika-month="7"][data-pika-day="9"],
button[data-pika-year="2021"][data-pika-month="8"][data-pika-day="20"],
button[data-pika-year="2021"][data-pika-month="8"][data-pika-day="23"],
button[data-pika-year="2021"][data-pika-month="10"][data-pika-day="3"],
button[data-pika-year="2021"][data-pika-month="10"][data-pika-day="23"],
button[data-pika-year="2022"][data-pika-month="0"][data-pika-day="1"],
button[data-pika-year="2022"][data-pika-month="0"][data-pika-day="10"],
button[data-pika-year="2022"][data-pika-month="1"][data-pika-day="11"],
button[data-pika-year="2022"][data-pika-month="1"][data-pika-day="23"],
button[data-pika-year="2022"][data-pika-month="2"][data-pika-day="21"],
button[data-pika-year="2022"][data-pika-month="3"][data-pika-day="29"],
button[data-pika-year="2022"][data-pika-month="4"][data-pika-day="3"],
button[data-pika-year="2022"][data-pika-month="4"][data-pika-day="4"],
button[data-pika-year="2022"][data-pika-month="4"][data-pika-day="5"],
button[data-pika-year="2022"][data-pika-month="6"][data-pika-day="18"],
button[data-pika-year="2022"][data-pika-month="7"][data-pika-day="11"],
button[data-pika-year="2022"][data-pika-month="8"][data-pika-day="19"],
button[data-pika-year="2022"][data-pika-month="8"][data-pika-day="23"],
button[data-pika-year="2022"][data-pika-month="9"][data-pika-day="10"],
button[data-pika-year="2022"][data-pika-month="10"][data-pika-day="3"],
button[data-pika-year="2022"][data-pika-month="10"][data-pika-day="23"]{
    color: #f00;
}

出力の様子

上記の出力が同じディレクトリのholidays.cssに書きだされている。

あとはこのCSSをPikadayカレンダーを使っているページで読み込んでやれば、
祝日の日付が赤くなる。

ninki_glog_ranking
ブログランキング・にほんブログ村へ

スポンサーリンク