スケジュールを取得する! カレンダー連携②

· ☕ 3

昨日は最初の最初で終わってしまったので、今日はなんとしても取得するまで頑張る!!

ひきつづきこちらの記事を元に進めていく。

前回までの流れはこちら

GCPのIAM設定

サービスアカウントからサービスアカウントを作成する。

きっとawsのユーザー作る感じなんだろうかね?

新規API作成

指示通りに進める。

新規API作成

とりあえずオーナー権限を付けておけという事らしい。

新規API作成

指示通りに「+キーを作成」を押すと、こんなファイルがダウンロードされた。

新規API作成

で、アカウント作成がおわると、こんな感じになって、カレンダーapiに作ったアカウントがマッピングされたみたい。

新規API作成

で、↑の「サービスアカウント」の「メール」のメールアドレスみたいなやつをコピーして、連携したいカレンダーの共有を許可する。

多分awsでのiamが、gcpではメールアドレスっぽい感じになっているのかなと思った

新規API作成

これで、GCPの設定はおしまい。

とりあえずローカルで叩く

awsのlambdaに上げる前にとりあえずローカルで動かす。

まず、これらが必要らしいので、pipでinstallする。

もちろんまとめてやって大丈夫です。

エラー出ないかハラハラしながらやったので、一個ずつ。

だって2とか付いてるとpython2用のライブラリかと思うじゃん?

なんかね、問題なかったww

pip install httplib2
pip install oauth2client
pip install google-api-python-client

で、コードをコピペ。

そしたらね、ここの記事のソース、ファンクションしかなかったw

呼び出し部分を作る。

まぁ、呼び出すだけなんだけどw

cal = GoogleCalendar()
print(cal.get_schedule("xxxxx@gmail.com","2017-01-15T12:24:07+09:00","2017-01-23T12:24:07+09:00"))

で、get_schedule(calendar_id, time_min, time_max)ね。

calendar_id:基本的に個人のカレンダーなら、その人のメールアドレス

time_min、time_max:いつからいつまでのデータを取得するかを指定。形式は文字列でこの形。“2017-01-15T12:24:07+09:00”

ちなみに、どれか間違ってるとこんな感じのエラーが出るw

よく調べもせずに実行するもんだから、どっちも出たww

$python lambda_function.py
Traceback (most recent call last):
  File "lambda_function.py", line 45, in get_schedule
    singleEvents=True
  File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/googleapiclient/http.py", line 856, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://www.googleapis.com/calendar/v3/calendars/適当ww/events?timeMin=2017-01-15T12%3A24%3A07%2B09%3A00&timeMax=2017-01-23T12%3A24%3A07%2B09%3A00&singleEvents=true&alt=json returned "Not Found">
None

↑カレンダーid適当に設定したとき

$python lambda_function.py
Traceback (most recent call last):
  File "lambda_function.py", line 45, in get_schedule
    singleEvents=True
  File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/lisa/.pyenv/versions/3.6.5/lib/python3.6/site-packages/googleapiclient/http.py", line 856, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/calendar/v3/calendars/xxxxxxxx%40gmail.com/events?timeMin=2020-02-17+22%3A51%3A32.064281&timeMax=2020-03-02+22%3A51%3A32.064349&singleEvents=true&alt=json returned "Bad Request">
None

↑これは、datetime渡した時ww

正しく叩けたらこんな感じでjsonが返ってくる!やったぁー!

$ python lambda_function.py
[
    {
        "kind": "calendar#event",
        "etag": "296421908588xxxx",
        "id": "9su49ajtsgsm0jdbhvri79xxxx",
        "status": "confirmed",
        "htmlLink": "https://www.google.com/calendar/event?eid=xxx",
        "created": "2016-12-10T03:59:55.000Z",
        "updated": "2016-12-19T01:05:42.941Z",
        "summary": "有給消化",
        "creator": {
            "email": "xxxxx@gmail.com",
            "displayName": "ユーザー名",
            "self": true
        },
        "organizer": {
            "email": "xxxxx@gmail.com",
            "displayName": "ユーザー名",
            "self": true
        },
        "start": {
            "date": "2016-12-22"
        },
        "end": {
            "date": "2017-02-03"
        },
        "transparency": "transparent",
        "iCalUID": "9su49ajtsgsm0jdbhvri79xxxx@google.com",
        "sequence": 1,
        "reminders": {
            "useDefault": false
        }
    },
    {
    ~略~
]

う…。もうこんな時間だ…

とりあえず取得は出来たから、続きは明日にしよう…。

おやすみなさい。

続き


るな
るな
エンジニア