-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresponse.py
More file actions
81 lines (69 loc) · 3.86 KB
/
response.py
File metadata and controls
81 lines (69 loc) · 3.86 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import datetime
from calender import get_events
import re
# 日付をGoogle Calendar API用にフォーマットする関数 (ISO 8601形式)
def format_datetime(dt):
return dt.isoformat() + "Z" # UTC形式 (末尾にZを追加)
# 日付判定関数
def parse_date(text):
today = datetime.datetime.utcnow().date() # 日付のみを取得
# 特定の日付の指定
date_match = re.search(r"(\d{4})年(\d{1,2})月(\d{1,2})日", text)
if date_match:
year, month, day = map(int, date_match.groups())
target_date = datetime.date(year, month, day)
return format_datetime(datetime.datetime.combine(target_date, datetime.time.min)), format_datetime(datetime.datetime.combine(target_date, datetime.time.max))
# 特定の曜日の指定
weekday_match = re.search(r"(今週|来週)の(月|火|水|木|金|土|日)曜日", text)
if weekday_match:
week, weekday_str = weekday_match.groups()
weekday_dict = {"月": 0, "火": 1, "水": 2, "木": 3, "金": 4, "土": 5, "日": 6}
target_weekday = weekday_dict[weekday_str]
days_ahead = (target_weekday - today.weekday() + 7) % 7
if week == "来週":
days_ahead += 7
target_date = today + datetime.timedelta(days=days_ahead)
return format_datetime(datetime.datetime.combine(target_date, datetime.time.min)), format_datetime(datetime.datetime.combine(target_date, datetime.time.max))
# 日付の範囲指定
date_range_match = re.search(r"(\d{4})年(\d{1,2})月(\d{1,2})日から(\d{4})年(\d{1,2})月(\d{1,2})日まで", text)
if date_range_match:
start_year, start_month, start_day, end_year, end_month, end_day = map(int, date_range_match.groups())
start_date = datetime.date(start_year, start_month, start_day)
end_date = datetime.date(end_year, end_month, end_day)
return format_datetime(datetime.datetime.combine(start_date, datetime.time.min)), format_datetime(datetime.datetime.combine(end_date, datetime.time.max))
# 〇日後、〇日前の指定
days_relative_match = re.search(r"(\d+)日(後|前)", text)
if days_relative_match:
days, relative = days_relative_match.groups()
days = int(days)
if relative == "後":
target_date = today + datetime.timedelta(days=days)
else:
target_date = today - datetime.timedelta(days=days)
return format_datetime(datetime.datetime.combine(target_date, datetime.time.min)), format_datetime(datetime.datetime.combine(target_date, datetime.time.max))
# 既存のキーワード
if "今日" in text:
return format_datetime(datetime.datetime.combine(today, datetime.time.min)), format_datetime(datetime.datetime.combine(today + datetime.timedelta(days=1), datetime.time.min))
elif "明日" in text:
return format_datetime(datetime.datetime.combine(today + datetime.timedelta(days=1), datetime.time.min)), format_datetime(datetime.datetime.combine(today + datetime.timedelta(days=2), datetime.time.min))
elif "一週間後" in text:
return format_datetime(datetime.datetime.combine(today + datetime.timedelta(days=7), datetime.time.min)), format_datetime(datetime.datetime.combine(today + datetime.timedelta(days=8), datetime.time.min))
return None, None
# メイン関数
def main():
text = input().strip()
start_time, end_time = parse_date(text)
if not start_time or not end_time:
return
# Google Calendarから予定を取得
events = get_events('primary', start_time, end_time)
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()