2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでiCalendar形式のファイルを書き出す

Posted at

iCalendarはカレンダーアプリなどで使われるスケジュールデータの標準フォーマット。
iCalendarファイルを使ってGoogleカレンダーやOutlookなどのアプリにスケジュールをインポートすることもできる。

iCalendarファイルは単純なテキストファイルなので、その気になれば一行一行書き出す処理を書いて作ることもできそう。

PythonでiCalendarファイルを読み書きできるライブラリがあるのでこれを使ってみる。

クイックスタートを見ながら試してみる。

まずはファイルの書き出しから。

ics_write.py
from ics import Calendar, Event
import arrow

# カレンダーの生成
cal = Calendar()
cal.creator = 'Me' # 作成者

# イベントの生成
event1 = Event()
event1.name = "A社と打ち合わせ" # タイトル
event1.begin = arrow.get("2021-11-08 12:00:00" ,"YYYY-MM-DD HH:mm:ss").replace(tzinfo="Asia/Tokyo") # 開始
event1.end = arrow.get("2021-11-08 13:00:00" ,"YYYY-MM-DD HH:mm:ss").replace(tzinfo="Asia/Tokyo") # 終了
event1.description = '○○について\n××について' # 説明
cal.events.add(event1) # カレンダーにイベント追加

event2 = Event()
event2.name = "有給休暇"
event2.begin = arrow.get("2021-11-10 00:00:01" ,"YYYY-MM-DD HH:mm:ss").replace(tzinfo="Asia/Tokyo")
event2.end = arrow.get("2021-11-11 23:59:59" ,"YYYY-MM-DD HH:mm:ss").replace(tzinfo="Asia/Tokyo")
cal.events.add(event2)

print(cal.events)

with open('my.ics', 'w', encoding='utf-8') as f:
    f.write(str(cal))

注意点としてそのまま日時をセットするとUTCで扱われるのでタイムゾーンを指定している。

python ics_write.py
{<Event '有給休暇' begin:2021-11-10T00:00:01+09:00 end:2021-11-11T23:59:59+09:00>, <Event 'A社と打ち合わせ' begin:2021-11-08T12:00:00+09:00 end:2021-11-08T13:00:00+09:00>}

出力されたファイル。

my.ics
BEGIN:VCALENDAR

VERSION:2.0

PRODID:Me

BEGIN:VEVENT

DTEND:20211111T145959Z

DTSTART:20211109T150001Z

SUMMARY:有給休暇

UID:f95dbfd9-5b65-4feb-93d9-8fb85221e14e@f95d.org

END:VEVENT

BEGIN:VEVENT

DESCRIPTION:○○について\n××について

DTEND:20211108T040000Z

DTSTART:20211108T030000Z

SUMMARY:A社と打ち合わせ

UID:529095df-3716-4f78-ada7-485cbf1456a7@5290.org

END:VEVENT

END:VCALENDAR

Googleカレンダーに取り込んでみるとちゃんと予定が反映されている。

image.png

次にファイルの読み込み。

ics_read.py
from ics import Calendar

with open('my.ics', 'r', encoding='utf-8') as f:
    ics_str = f.read()

cal = Calendar(ics_str)

print(cal.events)
python ics_read.py
{<Event '有給休暇' begin:2021-11-09T15:00:01+00:00 end:2021-11-11T14:59:59+00:00>, <Event 'A社と打ち合わせ' begin:2021-11-08T03:00:00+00:00 end:2021-11-08T04:00:00+00:00>}

読み込み時もUTCになってしまうのでそこのケアが必要。

その他細かいライブラリの仕様も公式ドキュメントに書かれてる。

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?