Posted at

JRA公開の重賞スケジュールを「予定なし」でGoogleカレンダーに取り込む


はじめにの前に

※今年(2018年)1月に自分のブログに公開した内容ですが、2019年カレンダーがJRAから公開されていましたので、それに合わせてこちらでも加筆した上で、記事を載せさせていただきます。

iCalendar形式ファイルのイベントを「予定なし」にする


はじめに

皆さん、競馬、楽しんでますか?(笑)

中央競馬の重賞日程と開催日程に関して、日本中央競馬会(JRA)が、Googleカレンダー等に取り込めるようにiCalendar形式でカレンダーを提供してくれています。

他のカレンダーと連携する:レーシングカレンダー JRA

ありがたく使わせていただこうとしていたのですが、実際にGoogleカレンダーに取り込んでみると「予定あり」として取り込まれてしまいます。

どうでもいいと言えばいいのですが、「予定なし」で取り込みたかったため、ちょっと公開されているファイルを書き直すツールを作ってみました。


「予定あり」となってしまう理由

これは各イベントで「TRANSP:OPAQUE」という指定がされているため。

ここを「TRANSP:TRANSPARENT」に書き換えてあげると「予定なし」として取り込むことができます。

ということで、この書き換えをするプログラムを作ってみました。

※なお、iCalendar形式の内容はこちらの説明がわかりやすかったです。


実装内容

説明するよりソースを見てもらう方がわかりやすいと思うので、いきなり実装内容です。

ちなみにgithubにもソースは置いてあります。

ソースを見ていただければわかるようにicalendarというライブラリを使っていますが、これはpipでインストール可能です。


ics_tofree.py

"""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月時点)


最後に

競馬もコンピュータを使って快適に楽しみましょう!(笑)