GoogleCalendarAPIを使ってGoogleCalendarの予定を取得する

お題通りです。+ α程度の情報は載せていますが、基本的には公式のQuickStart通りに進めました。言語はPythonです。

Step1: Google Calendar APIを有効にする

自分のGoogleアカウントでGoogle Developers Consoleにログインします。初めての場合は「規約に同意して進む」みたいな画面が出るので、一通り確認して進みます。

認証が終わると自動的にAPIを使うためのProjectが作成されます。 「認証情報の追加」というメニューが出てきますが、APIを使うのに必要なのはClient IDなので「クライアントID」と書かれたリンクをクリックして次に進みます。

OAuth同意画面に飛ばされるので、必須項目のサービス名を記入して次へ。(他に記入できる項目があれば記入してください) アプリケーションの種類と名前(適当でもいいです)を入力して「作成」ボタンを押すとクライアントIDとシークレットキーが作成されます。

f:id:yoghurt1131:20170510212302p:plain

こんな感じです。右端のダウンロードのマークをクリックしてjsonファイルをダウンロードし、client_secret.jsonという名前にリネームしてプログラムを置く予定のフォルダに保存します。

Step2: Pythonライブラリのインストー

pipで入れるだけ。

pip install --upgrade google-api-python-client

Step3: サンプルスクリプトを動かす

サンプルのスクリプトquickstart.pyが公開されているので、これをコピーします。

Step4: 実行

あとはpythonで叩くだけ。

python quickstart.py

ブラウザが立ち上がって、Googleアカウントの認証をできればOK。 サンプルのスクリプトは、実行したタイミングから未来の予定10件を取得するようにできています。

補足

これだけだとちょっと寂しすぎるので、少しだけ補足を。

認証情報の保管

quickstart.py実行時にブラウザを使って認証を行いましたが、これは最初だけです。2回目以降は普通にAPIが使えます。 この時の認証情報が$HOME/.credentials/以下に保存されています。

APIの仕様

こちらのサイトに使えるメソッドが載っています。

予定の書き込み

quickstart.pyでは、予定の読み込みの例しか載っていません。 書き込みの例を簡単に紹介します。やることは主に3つ程度です。

1. SCOPEの変更

quickstart.pyの20行目

SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'

この最後のreadonlyを省きます。

2. 認証情報を削除

このままだと上記のreadonly権限での認証情報が残ってしまっているため、Permission Deniedで弾かれます。 $HOME/.credentials以下の認証情報ファイルを削除します。

3. イベントを挿入するソースコードを記述

quickstart.pyでイベントを取得している箇所を、以下のような感じに書き換えます。

    event = {
      'summary': 'Sample Event from Python',
      'start': {
        'dateTime': '2017-04-28T09:00:00',
        'timeZone': 'Asia/Tokyo',
      },
      'end': {
        'dateTime': '2017-04-29T19:00:00',
        'timeZone': 'Asia/Tokyo',
      },
      'recurrence': [
        'RRULE:FREQ=DAILY;COUNT=2'
      ],
    }

    calendarId = 'xxxxxxx@gmail.com' # 自分のカレンダーID(例えば、メールアドレス名)を入れる
    event = service.events().insert(calendarId=calendarId, body=event).execute()