Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@masaminh

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

最後に

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

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What is going on with this article?