個人のGoogleカレンダーの予定をPythonで取得する
Google Calendar Twilio ReminderのGoogleカレンダーの予定を取得する部分の説明です。
個人のというかアクセス制限されたカレンダーからの予定取得はサービスアカウントを発行しなければいけなく少し手間取りました。
目次
Google API ConsoleでCalendarAPIのサービスアカウントを発行
Google API Consoleで新しいプロジェクトを作成します。
作成したプロジェクトで[APIを有効にする]をクリックします。
ライブラリの一覧で[Calendar API]を選択します。
[有効にする]をクリックします。
[認証情報]-[認証情報を作成]-[サービスアカウントキー]を選択します。
[新しいサービスアカウント]を選択して[サービスアカウント名]を入力して役割は「オーナー」にしました。
キーのタイプは「JSON」にします。
[作成]をクリックするとJSONファイルがダウンロードされるので「google_key.json」というファイル名でソースコードと同じフォルダに配置します。
自動で生成されるサービスアカウントIDは後で環境変数に設定するので控えておきます。
AWS Lambdaの環境変数
GOOGLE_SERVICE_ACCOUNT_IDという環境変数を設定して、先ほど作成したサービスアカウントIDを設定します。
対象のカレンダーのアクセス権限
一般公開していない個人のカレンダーが前提ですので、特定のユーザーにサービスアカウントIDの閲覧権限を設定します。
予定取得のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# coding:utf-8 import httplib2 from apiclient import discovery from oauth2client.service_account import ServiceAccountCredentials import logging import os import sys import traceback logger = logging.getLogger() logger.setLevel(logging.INFO) class GoogleCalendar(object): def __init__(self): self.service_account_id = os.environ['GOOGLE_SERVICE_ACCOUNT_ID'] def get_credentials(self): scopes = 'https://www.googleapis.com/auth/calendar' credentials = ServiceAccountCredentials.from_json_keyfile_name( 'google_key.json', scopes=scopes ) return credentials def get_schedule(self,calendar_id, time_min, time_max): try: credentials = self.get_credentials() http = credentials.authorize(httplib2.Http()) service = discovery.build( 'calendar', 'v3', http=http ) events = service.events().list( calendarId=calendar_id, timeMin=time_min, timeMax=time_max, singleEvents=True ).execute() items = events['items'] return items except Exception as e: logger.error(traceback.format_exc(sys.exc_info()[2])) |
get_credentials
- ServiceAccountCredentials.from_json_keyfile_nameで認証を戻します。
- scopesは’https://www.googleapis.com/auth/calendar’です。
- from_json_keyfile_nameなので保存したjsonファイルを指定します。
get_schedule
- service.events().list().execute()でevetnsを取得
- events[‘items’]が予定のリスト
service.events().listの引数
- calendarId : Googleアカウント(メールアドレス)
- timeMin : 開始時間
- timeMax : 終了時間
- singleEvents : 該当時間内のイベント
※singleEvents=Trueにしないと繰り返しなど取得したくないイベントまで取得されてしまいました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
IPython Notebookで梅田のラーメン屋さんの統計情報を抽出するというハンズオンに行ってきました
IPython Notebookで梅田のラーメン屋さんの情報をWebスクレイピン …
-
-
ライブ配信のカレンダーをGoogle Apps Scriptとかで作りました
ライブ配信がまとまっているカレンダー欲しいなあと思いまして。 まとめようと思いま …
-
-
pythonのsqlalchemyで嵌った話
エラーメッセージ InvalidRequestError: SQL expres …
-
-
youtube-container クラスのheightを調整
当ブログにGoogleカレンダーとかGoogleフォームを埋め込むと、heigh …
-
-
Google One 100GBプランを購入しました
2021/6/1からGoogle Photos、Gmail、Google Dri …
-
-
「【第2回】データ分析勉強会(尼崎Pythonの会#1)」に行ってきました
「【第2回】データ分析勉強会(尼崎Pythonの会#1)」に行ってきました。 略 …
-
-
Googleカレンダーの予定をV3 APIでPHPからJSONを取得してWebページに表示する
Googleカレンダーを使って管理しているライブスケジュールを日付によって、 未 …
-
-
trafficbot.liveからのスパムアクセス
ある日のGoogleAnalyticsで、5,000を超えるページビューがtra …
-
-
Pepper 開発 ワークショップ初級~中級~番外編に1日で一気に参加した
Pepperの開発方法が知りたかったので、Pepperアトリエ秋葉原 with …
-
-
「MonotaRo Tech #3 テスト自動化」に行ってきました
モノタロウさんの「MonotaRo Tech #3 テスト自動化」に行ってきまし …