Calendar APIでGoogleカレンダーから情報を取得する
プロジェクト作成
Google の API を利用するためには事前にプロジェクトの登録が必要です,
GCP Console からの操作も可能ですが,Python Quickstart | Calendar API | Google Developers のページで Step1 の Enable the Google Calendar API を押すと簡単に作成できます.
プロジェクトを作成したら,認証用のファイルである credentials.json をダウンロードしてルートディレクトリに置いておきます.
実装方法
Google Calendar API を用いて Python でカレンダーのイベントを取得します.カレンダーはいくつかあるので,全てのカレンダーのイベントをまとめて一つのリストにします.
Google カレンダーに接続するためには予め認証しておく必要があります.初めて実行するとブラウザで認証画面が表示されます.
セキュリティの問題でページが遷移できずに表示されない場合,詳細 をクリックすることで表示できます.どうしても開けない場合はターミナル上に表示されている URL で開くことも可能です.
from __future__ import print_function
from datetime import datetime
import os
import pickle
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
# If modifying these scope, delete the file token.pickle
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
def main():
"""Shows basic usage of the Google Calendar API.
Prints the start and name of the next 10 events on the user's calendar.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is created automatically when the authorization flow completes for the first time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('calendar', 'v3', credentials=creds)
# Call the Calendar API
# 'Z' indicates UTC time
now = datetime.utcnow().isoformat()+'Z'
print('Getting the upcoming 10 events')
res = service.calendarList().list().execute()
calendars = [item['id'] for item in res['items']]
events = []
for calendar_id in calendars:
events_res = service.events().list(
calendarId=calendar_id,
timeMin=now,
maxResults=10,
singleEvents=True,
orderBy='startTime'
).execute()
events += events_res['items']
if not events:
print('No upcoming events found.')
for event in events:
start = event['start']['dateTime'] if 'dateTime' in event['start'].keys() \
else event['start']['date']
print(start, event['summary'])
if __name__ == '__main__':
main()
実行するとイベントの日付と名前が表示されます.それ以外の情報が欲しい場合は JSON を出力して中身を見ればわかります,
また,些細な注意点ですが,Google Calendar APIに関連するファイルで calendar.py
のような名前をつけると内部でエラーが発生するので,その他の適当な名前をつけてください.