個人の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にしないと繰り返しなど取得したくないイベントまで取得されてしまいました。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
SQLAlchemyでシンプルにjoinする
過去のSQLAlchemyでjoinするという記事でPythonのSQLAlch …
-
-
Linux Mint 17 MATE 64bit にIPython Notebookをインストールする
今日行く勉強会でIPython Notebookの環境が必要なため、手持ちのLi …
-
-
Python SQLAlchemy MySQLでテーブルを指定せずにFunctionを使う
難しく考えて悩んでいましたが、queryに書いてやればいいだけでした。 sess …
-
-
Google Apps ScriptでAdmin SDK Directory Serviceを使ってグループメンバー情報を出力する
GoogleAppsのGoogleGroupをメーリングリストとして使っている人 …
-
-
Pepper 開発 ワークショップ初級~中級~番外編に1日で一気に参加した
Pepperの開発方法が知りたかったので、Pepperアトリエ秋葉原 with …
-
-
CentOS 6にPython実行環境を構築
CentOS6(32bit)にPython2.7実行環境を構築した際のメモです。 …
-
-
Redmine REST APIを操作するpython_redmineを試してみた
Redmine のGUIの登録が面倒なのでコマンドで登録、更新、時間の記録が出来 …
-
-
Chrome リモートデスクトップを使ってみる
自宅のMacをリモートで操作したい 外出用PCはWindows 8 とLinux …
-
-
Python SQLAlchemy MySQLでcase文を使う
PythohのORMライブラリSQLAlchemyでMySQLのテーブルSele …
-
-
Google関連のAPIを試すためのGoogleSiteを作ってみました
組み込み機能で出来る事は組み込み機能で と思いまして、Googleサイトを試験的 …