Googleカレンダーの今週の予定を取得する
実行環境
M1 MacbookAir 16GB
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib pytz
で必要なライブラリをインストール
touch get_week.py
でファイルを作成
import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] def main(): """今週のGoogleカレンダーの予定を取得して表示します。""" creds = None # 既存のトークンファイルを使用 if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) else: print("トークンファイルが見つかりません。認証を実行してください。") return # Google Calendar APIサービスを構築 service = build('calendar', 'v3', credentials=creds) # タイムゾーンの設定(日本時間) tz = pytz.timezone('Asia/Tokyo') # 現在の日時を取得 now = datetime.datetime.now(tz) # 今週の開始日(月曜日)と終了日(日曜日)を計算 start_of_week = now - datetime.timedelta(days=now.weekday()) end_of_week = start_of_week + datetime.timedelta(days=7) # RFC3339形式に変換 time_min = start_of_week.isoformat() time_max = end_of_week.isoformat() print(f"{time_min} から {time_max} までの予定を取得します。") # イベントを取得 events_result = service.events().list( calendarId='primary', timeMin=time_min, timeMax=time_max, singleEvents=True, orderBy='startTime' ).execute() events = events_result.get('items', []) if not events: print('今週の予定はありません。') else: print('今週の予定:') for event in events: start = event['start'].get('dateTime', event['start'].get('date')) summary = event.get('summary', '(タイトルなし)') print(f"{start} - {summary}") if __name__ == '__main__': main()
実行結果は
2024-09-30T23:52:51.254684+09:00 から 2024-10-07T23:52:51.254684+09:00 までの予定を取得します。 今週の予定: 2024-10-05T09:00:00+09:00 - APIを使って追加したイベント
となる
一週間の予定は月曜日からの予定となっている
次は実行した日より前の予定は出力しないようにコード変更する
現在のコードでは、time_min(開始時刻)が「今週の始まり(週の月曜日)」
これを「現在の日時」に変更することで、実行した日より前の予定を除外
time_minをnow(現在の日時)に変更
import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] def main(): """今週のGoogleカレンダーの予定を取得して表示します。""" creds = None # 既存のトークンファイルを使用 if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) else: print("トークンファイルが見つかりません。認証を実行してください。") return # Google Calendar APIサービスを構築 service = build('calendar', 'v3', credentials=creds) # タイムゾーンの設定(日本時間) tz = pytz.timezone('Asia/Tokyo') # 現在の日時を取得 now = datetime.datetime.now(tz) # 今週の開始日(月曜日)と終了日(日曜日)を計算 start_of_week = now - datetime.timedelta(days=now.weekday()) end_of_week = start_of_week + datetime.timedelta(days=7) # RFC3339形式に変換 time_min = start_of_week.isoformat() time_max = end_of_week.isoformat() print(f"{time_min} から {time_max} までの予定を取得します。") # イベントを取得 events_result = service.events().list( calendarId='primary', timeMin=time_min, timeMax=time_max, singleEvents=True, orderBy='startTime' ).execute() events = events_result.get('items', []) if not events: print('今週の予定はありません。') else: print('今週の予定:') for event in events: start = event['start'].get('dateTime', event['start'].get('date')) summary = event.get('summary', '(タイトルなし)') print(f"{start} - {summary}") if __name__ == '__main__': main()
を
import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] def main(): """今週の残りのGoogleカレンダーの予定を取得して表示します。""" creds = None # 既存のトークンファイルを使用 if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) else: print("トークンファイルが見つかりません。認証を実行してください。") return # Google Calendar APIサービスを構築 service = build('calendar', 'v3', credentials=creds) # タイムゾーンの設定(日本時間) tz = pytz.timezone('Asia/Tokyo') # 現在の日時を取得 now = datetime.datetime.now(tz) # 今週の終了日(日曜日)を計算 start_of_week = now - datetime.timedelta(days=now.weekday()) end_of_week = start_of_week + datetime.timedelta(days=7) # time_minを現在の日時に設定 time_min = now.isoformat() # time_maxは今週の終了日時 time_max = end_of_week.isoformat() print(f"{time_min} から {time_max} までの予定を取得します。") # イベントを取得 events_result = service.events().list( calendarId='primary', timeMin=time_min, timeMax=time_max, singleEvents=True, orderBy='startTime' ).execute() events = events_result.get('items', []) if not events: print('今週の残りの予定はありません。') else: print('今週の残りの予定:') for event in events: start = event['start'].get('dateTime', event['start'].get('date')) summary = event.get('summary', '(タイトルなし)') print(f"{start} - {summary}") if __name__ == '__main__': main()
とすることで解決
次はテキストの内容から日時と予定を取り出しGoogleカレンダーへAPIで予定を書き込みできるようにする
また
日時と予定の取り出しはOllamaを使うことで汎用性を持たせることにする