Googleカレンダーの今週の予定を取得する
実行環境
M1 MacbookAir 16GB
1 | pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib pytz |
で必要なライブラリをインストール
1 | touch get_week.py |
でファイルを作成
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 55 56 57 58 59 | import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ 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() |
実行結果は
1 2 3 | 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(現在の日時)に変更
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 55 56 57 58 59 | import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ 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() |
を
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 55 56 57 58 59 60 | import os import datetime import pytz from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # カレンダーAPIのスコープ 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を使うことで汎用性を持たせることにする