週間予定の取得
実行環境
M1 MacbookAir 16GB
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() |
を実行したが
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 2024-10-09T01:28:10.960984+09:00 から 2024-10-14T01:28:10.960984+09:00 までの予定を取得します。 Traceback (most recent call last): File "/Users/snowpool/aw10s/week_calendar_voice/get_week.py" , line 60, in <module> main() File "/Users/snowpool/aw10s/week_calendar_voice/get_week.py" , line 47, in main ).execute() File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/googleapiclient/_helpers.py" , line 130, in positional_wrapper return wrapped(*args, **kwargs) File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/googleapiclient/http.py" , line 923, in execute resp, content = _retry_request( File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/googleapiclient/http.py" , line 191, in _retry_request resp, content = http.request(uri, method, *args, **kwargs) File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/google_auth_httplib2.py" , line 209, in request self.credentials.before_request(self._request, method, uri, request_headers) File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/google/auth/credentials.py" , line 135, in before_request self.refresh(request) File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/google/oauth2/credentials.py" , line 335, in refresh ) = reauth.refresh_grant( File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/google/oauth2/reauth.py" , line 351, in refresh_grant _client._handle_error_response(response_data, retryable_error) File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/google/oauth2/_client.py" , line 73, in _handle_error_response raise exceptions.RefreshError( google.auth.exceptions.RefreshError: ( 'invalid_scope: Bad Request' , { 'error' : 'invalid_scope' , 'error_description' : 'Bad Request' }) |
となる
Chatgpt では
1 |
となっているが
1 |
というようにスコープを変更したら解決した
これはカレンダー追加がこのスコープで動作するのに
取得の場合はコードが違うので試したら動いた