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を使うことで汎用性を持たせることにする