日本の休日

Thunderbirdなどのカレンダーに日本の休日を表示したいと思った。 Thunderbirdのwebサイト には各国の休日の情報がiCalenderファイル(.ics)の形式で収められている。 しかし、日本の情報は2007年以降更新されていないが、2020-2021は東京オリンピックの影響で、 休日が臨時に変更されている。(その他の休日にも2007以降の変更がある。)

日本の休日については、内閣府がそのホームページ で公式なアナウンスを出している。特に、"昭和30年(1955年)から令和4年(2022年)国民の祝日"をcsv形式のファイル として公開している。

このプログラムの目的はこのcsv形式のファイルからThunderbirdなどのCalendarプログラムで利用可能なiCal形式のファイル(.ics)を生成することです。

利用するモジュール

このプログラムでは以下のモジュールを使います。importに失敗するようでしたら、pipなどのツールを使って準備しましょう。

urllib: 標準のwebアクセスのためのモジュール。csvファイルをダウンロードするために使用。

io: データをあたかもFile(stream)のように取り扱えるようにするモジュール。ダウンロードしたデータを、中間ファイルに保存しないで、メモリ上に置いたまま利用するため。

pandas: データ解析のためのモジュール。このなかのDataFrameを利用する。 csvファイルの日付データ変換などを効率よく(短いプログラムで)実現するために利用。

sqlite: ファイルベースのRDBMS sqliteを使うためのモジュール。データの検索などを簡単に行うために利用できる。本体のプログラムでは未利用なので、なくても良い。

icalendar: iCalデータ取扱のためのモジュール。icsファイル作成に使用する。

データのダウンロード

データをwebアドレス(cvsuri)からダウンロードして、

  1. 手元のファイルとして保存したり(load_and_save_cvs)、 
    1. pands DataFrameに変換して(load_as_dataframe)別のプログラムで利用したり、
    2. sqlite3のon memory データベスに変換(load_as db)する

関数等をここで定義しています。

Calendar オブジェクト

iCalのファイルを作成する準備として、icalender.Calendarクラスを継承したCalendar Classを定義します。このクラスには休日(日付と休日名)を登録するための add_holiday メソッドを追加しておきます。 Calendearファイルはicanldear.Calendarクラスが持つ、to_icalを使って書き出します。

プログラムの本体

上で用意した関数やクラスを使ってwebから取り込んだデータを使って、icsファイルを作成します。

プログラムの実行

完成したプログラムを単独で利用することを考えて、いつものおまじないをいれておきます。