mirror of
https://github.com/netzbegruenung/schaufenster.git
synced 2024-05-06 02:53:40 +02:00
First ical parser
This commit is contained in:
parent
a7ef6625fc
commit
99ed046b7a
51
service/api/events.py
Normal file
51
service/api/events.py
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# coding: utf8
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import icalendar
|
||||||
|
from datetime import datetime
|
||||||
|
from datetime import date
|
||||||
|
|
||||||
|
class Client(object):
|
||||||
|
|
||||||
|
def __init__(self, url, timezone=None):
|
||||||
|
self.url = url
|
||||||
|
self.timezone = timezone
|
||||||
|
self.events = []
|
||||||
|
self.__load()
|
||||||
|
|
||||||
|
def __load(self):
|
||||||
|
r = requests.get(self.url)
|
||||||
|
r.raise_for_status()
|
||||||
|
|
||||||
|
cal = icalendar.Calendar.from_ical(r.text)
|
||||||
|
self.events = []
|
||||||
|
|
||||||
|
for event in cal.walk('vevent'):
|
||||||
|
title = None
|
||||||
|
description = None
|
||||||
|
if "SUMMARY" in event:
|
||||||
|
title = event["SUMMARY"]
|
||||||
|
if "DESCRIPTION" in event:
|
||||||
|
description = event["DESCRIPTION"]
|
||||||
|
dtstart = event["DTSTART"].dt
|
||||||
|
dtend = event["DTEND"].dt
|
||||||
|
self.events.append({
|
||||||
|
"title": title,
|
||||||
|
"description": description,
|
||||||
|
"start": dtstart,
|
||||||
|
"end": dtend,
|
||||||
|
})
|
||||||
|
|
||||||
|
def next_events(self, num=10):
|
||||||
|
"""
|
||||||
|
Returns the next num events from the calendar
|
||||||
|
"""
|
||||||
|
now = datetime.utcnow()
|
||||||
|
out = []
|
||||||
|
for event in self.events:
|
||||||
|
end = event["end"]
|
||||||
|
if isinstance(end, date):
|
||||||
|
end = datetime.combine(end, datetime.min.time())
|
||||||
|
if end > now:
|
||||||
|
out.append(event)
|
||||||
|
return out
|
Loading…
Reference in a new issue