basic functionality
This commit is contained in:
parent
44e6a72896
commit
a9ed302574
4 changed files with 55 additions and 1 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
__pycache__/
|
||||||
|
output.ics
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) <year> <copyright holders>
|
Copyright (c) 2023 flimpie & contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
|
50
calendarparser.py
Normal file
50
calendarparser.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import icalendar
|
||||||
|
import datetime
|
||||||
|
import hashlib
|
||||||
|
import time
|
||||||
|
|
||||||
|
OFFSET = -time.timezone
|
||||||
|
events_url = "https://bitlair.nl/Special:Ask/-5B-5BCategory:Event-5D-5D-20-5B-5BStart::%E2%89%A519-20January-202023-5D-5D/-3FStart/-3FEnd/-3FEvent-20location/mainlabel%3D/limit%3D50/order%3DASC/sort%3DStart/prettyprint%3Dtrue/format%3Djson"
|
||||||
|
# above URL asks for all events and returns their name, start, end and location
|
||||||
|
events_page = requests.get(events_url)
|
||||||
|
# remove first line from output because the first line is '<script src='/vendor/composer/installed.js'></script>'
|
||||||
|
# which is not valid JSON, believe it or not
|
||||||
|
events = json.loads(''.join(events_page.text.splitlines(keepends=True)[1:]))
|
||||||
|
|
||||||
|
cal = icalendar.Calendar()
|
||||||
|
|
||||||
|
# Some properties are required to be compliant
|
||||||
|
cal.add('prodid', '-//Bitlair event calendar//bitlair.nl//')
|
||||||
|
cal.add('version', '2.0')
|
||||||
|
|
||||||
|
for key, value in events['results'].items():
|
||||||
|
# unix timestamps from semwiki are not in UTC but in $localtime
|
||||||
|
start_time = int(value['printouts']['Start'][0]['timestamp']) - OFFSET
|
||||||
|
end_time = int(value['printouts']['End'][0]['timestamp']) - OFFSET
|
||||||
|
|
||||||
|
# remove preceding 'Events/YYYY-MM-DD ' from pagename to result in the actual event name
|
||||||
|
eventname = key[18:]
|
||||||
|
|
||||||
|
event = icalendar.Event()
|
||||||
|
event.add('summary', eventname)
|
||||||
|
|
||||||
|
event.add('description', f'{key}\n {value["fullurl"]}')
|
||||||
|
event.add('dtstamp', datetime.datetime.now())
|
||||||
|
event.add('dtstart', datetime.datetime.fromtimestamp(start_time))
|
||||||
|
event.add('dtend', datetime.datetime.fromtimestamp(end_time))
|
||||||
|
event.add('url', value['fullurl'])
|
||||||
|
event['location'] = icalendar.vText(value['printouts']['Event location'][0]['fulltext'])
|
||||||
|
|
||||||
|
url_hash_substr = hashlib.md5(value["fullurl"].encode()).hexdigest()[0:10]
|
||||||
|
# we need to use something that is relatively safe as a UID, so use the first 10 characters of the hexdigest of the wikiurl
|
||||||
|
event['uid'] = f'{url_hash_substr}@bitlair.nl'
|
||||||
|
|
||||||
|
# Add the event to the calendar
|
||||||
|
cal.add_component(event)
|
||||||
|
|
||||||
|
|
||||||
|
f = open('output.ics', 'wb')
|
||||||
|
f.write(cal.to_ical())
|
||||||
|
f.close()
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
requests
|
||||||
|
icalendar
|
Loading…
Add table
Add a link
Reference in a new issue