maidstone-hackspace/site/widgets/google_calendar.py

47 lines
2.1 KiB
Python

from dateutil import parser
from scaffold.core.widget import base_widget_extended
from datetime import datetime
import time
import requests
class control(base_widget_extended):
contents = []
def create(self, title="Events", calendar_id=None, api_key=None):
super(control, self).create()
date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S+00:00')
date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S+00:00')
url = 'https://www.googleapis.com/calendar/v3/calendars/%s/events?singleEvents=True&orderBy=startTime&maxResults=2&timeMin=%s&key=%s' % (
calendar_id,
datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00'),
api_key)
response = requests.get(url)
calendar_data = response.json()
self.contents = []
# loop over calendar results, and format for display
for event in calendar_data.get('items'):
str_datetime = parser.parse(event.get('start').get('dateTime'))
formatted_date = str_datetime.strftime('%d %b %Y %H:%M')
description = event.get('description') + '<br />' if event.get('description') else ''
location = '<a target="_blank" href="https://www.google.co.uk/maps/search/%s">%s</a>' % (
event.get('location'), event.get('location')) if event.get('location') else ''
self.contents.append((
event.get('summary')+ '<br />',
description,
formatted_date + '<br />' + location))
return self
def render(self):
htm = ''
for row in self.contents:
htm += '<li>%s %s %s</li>' % row
return '''<div class="calendar">
<ul>%s</ul>
<span>
<a class="left but" href="https://calendar.google.com/calendar/render?cid=http://www.google.com/calendar/ical/contact@maidstone-hackspace.org.uk/public/basic.ics">Subscribe</a>
</span>
<span>
<a class="right but" href="https://www.google.com/calendar/embed?src=contact@maidstone-hackspace.org.uk&ctz=Europe/London">View All</a>
</span></div>''' % htm