41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import datetime
|
|
import requests
|
|
|
|
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
|
|
|
|
def run():
|
|
schedule = requests.get('https://api.events.ccc.de/congress/2025/schedule.json').json() # json.load(open('schedule.json', 'r'))
|
|
talks = []
|
|
for day in schedule['schedule']['conference']['days']:
|
|
for room in ['Zero', 'One', 'Fuse', 'Ground']: #day['rooms']:
|
|
talks += day['rooms'][room]
|
|
|
|
|
|
talks.sort(key=lambda talk: talk['date'])
|
|
now = datetime.datetime.now()
|
|
|
|
upcoming = []
|
|
for talk in talks:
|
|
if datetime.datetime.fromisoformat(talk['date']).timestamp() < now.timestamp():
|
|
continue
|
|
upcoming.append({'start': talk['start'], 'room': talk['room'], 'title': talk['title']})
|
|
|
|
return json.dumps(upcoming)
|
|
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
data = run().encode("utf-8")
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "text/plain; charset=utf-8")
|
|
self.send_header("Content-Length", str(len(data)))
|
|
self.end_headers()
|
|
self.wfile.write(data)
|
|
|
|
if __name__ == '__main__':
|
|
server = ThreadingHTTPServer(("0.0.0.0", 8000), Handler)
|
|
server.serve_forever()
|