Skip to content

Instantly share code, notes, and snippets.

@thesnapdragon
Created January 30, 2014 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thesnapdragon/8721772 to your computer and use it in GitHub Desktop.
Save thesnapdragon/8721772 to your computer and use it in GitHub Desktop.
little script with Google Calendar API for Conky
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Milán Unicsovics, u.milan at gmail dot com
# usage: ./calToConky.py
# writes out upcoming calendar events from Google Calendar
import gdata.calendar.service
import datetime
from textwrap import fill
def main():
username = 'EMAILADDRESS'
visibility = 'PRIVATE_CALENDAR_URL'
projection = 'full'
conkywidth = 40
query = gdata.calendar.service.CalendarEventQuery(username, visibility, projection)
query.start_min = datetime.date.today().strftime("%Y-%m-%d")
length = datetime.timedelta(days = 7)
end = datetime.date.today() + length
query.start_max = end.strftime("%Y-%m-%d")
calendar_service = gdata.calendar.service.CalendarService()
try:
feed = calendar_service.CalendarQuery(query)
except:
print("No upcoming events.")
return
events = {}
count = 0
for i, an_event in enumerate(feed.entry):
for a_when in an_event.when:
try:
starttime = datetime.datetime.strptime(a_when.start_time[0:19], '%Y-%m-%dT%H:%M:%S')
endtime = datetime.datetime.strptime(a_when.end_time[0:19], '%Y-%m-%dT%H:%M:%S')
if (starttime.strftime("%Y.%m.%d") == endtime.strftime("%Y.%m.%d")):
# one day event + time is given
datetext = '%s-%s' % (starttime.strftime("%Y.%m.%d, %H:%M"), endtime.strftime("%H:%M"))
else:
# longer than one day + time is given
datetext = '%s-%s' % (starttime.strftime("%Y.%m.%d, %H:%M"), endtime.strftime("%Y.%m.%d, %H:%M"))
except ValueError:
starttime = datetime.datetime.strptime(a_when.start_time[0:19], '%Y-%m-%d')
endtime = datetime.datetime.strptime(a_when.end_time[0:19], '%Y-%m-%d') - datetime.timedelta(days = 1)
# longer than 1 day
if (starttime < endtime):
datetext = '%s-%s' % (starttime.strftime("%Y.%m.%d"), endtime.day)
# one day event
else:
datetext = starttime.strftime("%Y.%m.%d")
events[count] = (datetext, an_event.title.text)
count = count + 1
if (len(events) == 0):
print("No upcoming events.")
events = sorted(list(events.values()), key = lambda x: x[0])
if (count > 5):
count = 5
for i in range(0, count):
if events[i-1][0] != events[i][0] or i == 0:
print(fill(events[i][0], conkywidth))
print(fill(events[i][1], conkywidth))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment