[Mac M2 Pro 12CPU, Ventura 13.6, Python 3.10.4]
Googleカレンダーから入手したicsファイルの内容をgpt-4oに見せて、jsonファイルの作成スクリプトを考えさせました。
これまではGitHubなどから使えそうなコードを引っ張ってきたりしていましたが、AIに作らせる方が手っ取り早いです。
今回の場合はicsファイルに記念日が混在していたので、結局自分で手を入れて仕上げることになりました。
import json
from icalendar import Calendar
from datetime import datetime
# アメリカの祝日リスト
us_holidays = {
"New Year's Day",
"Martin Luther King Jr. Day",
"Presidents' Day",
"Memorial Day",
"Juneteenth",
"Independence Day",
"Labor Day",
"Columbus Day",
"Veterans Day",
"Thanksgiving Day",
"Christmas Day"
}
def parse_ics(file_path):
with open(file_path, 'r') as f:
ics_content = f.read()
calendar = Calendar.from_ical(ics_content)
holidays = {}
for component in calendar.walk():
if component.name == "VEVENT":
summary = str(component.get('summary'))
dtstart = component.get('dtstart').dt
if isinstance(dtstart, datetime):
dtstart = dtstart.date()
dtstart_str = dtstart.strftime('%Y-%m-%d')
# アメリカの祝日リストに含まれているか確認
if any(holiday in summary for holiday in us_holidays):
holidays[dtstart_str] = summary
return holidays
def save_to_json(data, output_file):
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
if __name__ == "__main__":
ics_file_path = 'america.ics' # ICSファイルのパスを指定
output_json_file = 'holidayUS.json' # 出力するJSONファイルの名前
holidays = parse_ics(ics_file_path)
# 日付の昇順で並べ替え
sorted_holidays = dict(sorted(holidays.items()))
save_to_json(sorted_holidays, output_json_file)
print(f"祝日情報が {output_json_file} に保存されました。")
{
"2019-01-01": "New Year's Day",
"2019-01-21": "Martin Luther King Jr. Day",
"2019-02-18": "Presidents' Day",
"2019-05-27": "Memorial Day",
"2019-06-19": "Juneteenth",
"2019-07-04": "Independence Day",
"2019-09-02": "Labor Day",
"2019-11-11": "Veterans Day",
"2019-11-28": "Thanksgiving Day",
"2019-12-25": "Christmas Day",
<以下略>