個人の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
関連記事
-
YoutubeチャンネルにカスタムURLを設定しました
YoutubeチャンネルのURLは初期状態では、https://www.yout …
-
Linux Mint 17 MATE 64bit にTensorFlowをインストールする
勉強会でTensorFlowを使用しますので、Linux Mint 17 MAT …
-
RedmineにGoogleAppsアカウントでログイン出来るようにする
RedmineのログインをGoogleアカウントで出来るように[redmine_ …
-
Googleナレッジパネルの申請が承認されました
今年の4/13に「Googleナレッジパネルの認証を受けるために申請してみた」が …
-
Redmine REST APIを操作するpython_redmineを試してみた
Redmine のGUIの登録が面倒なのでコマンドで登録、更新、時間の記録が出来 …
-
「streamlit勉強会」に参加しました
streamlitってなんだろう? と思いながら参加しまししました。 fin-p …
-
Google関連のAPIを試すためのGoogleSiteを作ってみました
組み込み機能で出来る事は組み込み機能で と思いまして、Googleサイトを試験的 …
-
Python openpyxlで結合セルを含むExcelファイルを開くと罫線が消える
PythonのExcelを読み書きするためのライブラリ、openpyxlで結合セ …
-
PythonでHTMLエスケープされた全角ハイフンをアンエスケープする
PythonでHTMLエスケープとアンエスケープについて調べていると、 xml. …
-
動画間の広告を飛ばすのが面倒になったのでYoutube Premiumに加入しました
テレビのCMは全然見る方なんですが、Youtubeの動画の間の広告ってなんか流し …