add
parent
45a58e400d
commit
31b85bc8d3
|
@ -0,0 +1,84 @@
|
||||||
|
import caldav
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
# Function to create calendar events from JSON data
|
||||||
|
def create_calendar_events_from_json(caldav_url, username, password, json_file_path):
|
||||||
|
try:
|
||||||
|
# 1. Connect to CalDAV server
|
||||||
|
client = caldav.DAVClient(
|
||||||
|
url=caldav_url,
|
||||||
|
username=username,
|
||||||
|
password=password
|
||||||
|
)
|
||||||
|
|
||||||
|
# 2. Get principal and calendar
|
||||||
|
my_principal = client.principal()
|
||||||
|
my_calendar = my_principal.calendar(name="Achievement of the Week") # Replace with your calendar name
|
||||||
|
|
||||||
|
# 3. Read JSON data
|
||||||
|
with open(json_file_path, 'r') as file:
|
||||||
|
events_data = json.load(file)
|
||||||
|
|
||||||
|
# 4. Create events from JSON data
|
||||||
|
for event in events_data:
|
||||||
|
# Create event in iCal format
|
||||||
|
ical_data = f"""BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
BEGIN:VEVENT
|
||||||
|
SUMMARY:{event['Title']}
|
||||||
|
DTSTART:{datetime.fromisoformat(event['StartAt']).strftime('%Y%m%dT%H%M%S')}
|
||||||
|
DTEND:{datetime.fromisoformat(event['end_time']).strftime('%Y%m%dT%H%M%S')}
|
||||||
|
DESCRIPTION:{event.get('description', 'Description')}
|
||||||
|
LOCATION:{event.get('location', '')}
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
||||||
|
"""
|
||||||
|
# Create the event
|
||||||
|
my_calendar.save_event(ical_data)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error: {str(e)}")
|
||||||
|
|
||||||
|
# Example JSON format:
|
||||||
|
"""
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Achievement": {
|
||||||
|
"ID": 354286,
|
||||||
|
"Title": "Adventure Man: Action Force Victory",
|
||||||
|
"Description": "Complete the Dr X Battle on Adventure Mode (No Passwords)",
|
||||||
|
"Points": 10,
|
||||||
|
"TrueRatio": 17,
|
||||||
|
"Type": "win_condition",
|
||||||
|
"Author": null,
|
||||||
|
"BadgeName": "399242",
|
||||||
|
"BadgeURL": "/Badge/399242.png",
|
||||||
|
"DateCreated": "2023-09-08",
|
||||||
|
"DateModified": "2023-09-11"
|
||||||
|
},
|
||||||
|
"Console": {
|
||||||
|
"ID": 5,
|
||||||
|
"Title": "Game Boy Advance"
|
||||||
|
},
|
||||||
|
"ForumTopic": {
|
||||||
|
"ID": 29289
|
||||||
|
},
|
||||||
|
"Game": {
|
||||||
|
"ID": 9848,
|
||||||
|
"Title": "Action Man: Robot Atak"
|
||||||
|
},
|
||||||
|
"StartAt": "2025-01-06T00:00:00.000000Z",
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Usage example
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# CalDAV server details
|
||||||
|
CALDAV_URL = "https://cal.cdnutter.org/dav.php/calendars/cdnutter/qesvjipbzdtcahrz/"
|
||||||
|
USERNAME = "cdnutter"
|
||||||
|
PASSWORD = "ZRGiXtDHP3jvXq0d"
|
||||||
|
JSON_FILE = "https://retroachievements.org/API/API_GetAchievementOfTheWeek.php?&y=oHdON3RERFPnHV1J6Oiax5F85Wkh5Msq"
|
||||||
|
|
||||||
|
create_calendar_events_from_json(CALDAV_URL, USERNAME, PASSWORD, JSON_FILE)
|
Loading…
Reference in New Issue