LoginSignup
1
0

More than 5 years have passed since last update.

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

Posted at

はじめにの前に

※今年(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月時点)

最後に

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0