はじめにの前に
※今年(2018年)1月に自分のブログに公開した内容ですが、2019年カレンダーがJRAから公開されていましたので、それに合わせてこちらでも加筆した上で、記事を載せさせていただきます。
iCalendar形式ファイルのイベントを「予定なし」にする
はじめに
皆さん、競馬、楽しんでますか?(笑)
中央競馬の重賞日程と開催日程に関して、日本中央競馬会(JRA)が、Googleカレンダー等に取り込めるようにiCalendar形式でカレンダーを提供してくれています。
ありがたく使わせていただこうとしていたのですが、実際にGoogleカレンダーに取り込んでみると「予定あり」として取り込まれてしまいます。
どうでもいいと言えばいいのですが、「予定なし」で取り込みたかったため、ちょっと公開されているファイルを書き直すツールを作ってみました。
「予定あり」となってしまう理由
これは各イベントで「TRANSP:OPAQUE」という指定がされているため。
ここを「TRANSP:TRANSPARENT」に書き換えてあげると「予定なし」として取り込むことができます。
ということで、この書き換えをするプログラムを作ってみました。
※なお、iCalendar形式の内容はこちらの説明がわかりやすかったです。
実装内容
説明するよりソースを見てもらう方がわかりやすいと思うので、いきなり実装内容です。
ちなみにgithubにもソースは置いてあります。
ソースを見ていただければわかるようにicalendarというライブラリを使っていますが、これはpipでインストール可能です。
"""Calendarファイル(.ics)内のイベントをすべて「予定なし」に書き換える."""
import argparse
from icalendar import Calendar
import sys
def update_transp(cal, transp):
"""VEVENTコンポーネントのTRANSPプロパティを指定のものに書き換える."""
for ev in cal.walk():
if ev.name == 'VEVENT':
ev['TRANSP'] = transp
def main():
"""メイン関数."""
parser = argparse.ArgumentParser()
parser.add_argument('input', nargs='?',
type=argparse.FileType(mode='r'), default=sys.stdin)
parser.add_argument('-o', '--output', nargs='?',
type=argparse.FileType(mode='w'), default=sys.stdout)
args = parser.parse_args()
cal = Calendar.from_ical(args.input.read())
update_transp(cal, 'TRANSPARENT')
args.output.write(cal.to_ical().decode('utf-8'))
if __name__ == '__main__':
main()
動作確認環境
Python 3.6.4
iCalendar 4.0.0
(2018年1月時点)
Python 3.7.1
iCalendar 4.0.3
(2018年11月時点)
最後に
競馬もコンピュータを使って快適に楽しみましょう!(笑)