Skip to content

Instantly share code, notes, and snippets.

@simon-weber
Created February 16, 2013 19:37
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 simon-weber/4968381 to your computer and use it in GitHub Desktop.
Save simon-weber/4968381 to your computer and use it in GitHub Desktop.
A dirty little script that will make Google Calendar events for muspy releases. Fill in 'XXXXX' with the relevant values.
import os.path
import requests
#Google client api imports
import gflags
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
#Config:
#File of the form, eg:
# my@email.com my_password_here
MUSPY_AUTH_FILE = 'muspy_auth'
CALENDAR_ID = 'XXXXX'
#End config
GCAL_AUTH_FILE = 'gcal_auth'
LAST_RELEASE_FILE = 'last_release'
MUSPY_API = 'https://muspy.com/api/1/'
FLAGS = gflags.FLAGS
def auth_to_gcal():
"""Attempt to authenticate with Google and return a service object."""
FLOW = OAuth2WebServerFlow(
client_id='XXXXX',
client_secret='XXXXX',
scope='https://www.googleapis.com/auth/calendar',
user_agent='muspy-gcal/0')
FLAGS.auth_local_webserver = False
storage = Storage(GCAL_AUTH_FILE)
credentials = storage.get()
if credentials is None or credentials.invalid == True:
credentials = run(FLOW, storage)
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='calendar', version='v3', http=http,
developerKey='XXXXX')
return service
def get_muspy_userid(auth_pair):
"""Return the userid for the given (email, passwd) tuple."""
r = requests.get(MUSPY_API + 'user', auth = auth_pair)
return r.json['userid']
def get_muspy_releases(userid, after_release_mbid=None):
"""Return a list of releases for the userid.
Optionally, return only releases after some release mbid."""
params = {}
if after_release_mbid:
params['since'] = after_release_mbid
r = requests.get(MUSPY_API + 'releases/' + userid, params=params)
return r.json
def create_release_event(release, gcal_service, gcal_id=CALENDAR_ID):
"""Return an event created on the calendar identified by *gcal_id*."""
print "creating for %s" % release['name']
e = gcal_service.events().quickAdd(
calendarId=gcal_id,
text="{artist} releases {release} on {date}".format(
artist=release['artist']['name'],
release=release['name'],
date=release['date']
)
).execute()
return e
if __name__ == '__main__':
with open(MUSPY_AUTH_FILE) as f:
muspy_auth = tuple(f.read()[:-1].split(' '))
muspy_userid = get_muspy_userid(muspy_auth)
service = auth_to_gcal()
try:
with open(LAST_RELEASE_FILE) as f:
last_release = f.read()[:-1]
except IOError:
last_release = None
releases = get_muspy_releases(muspy_userid, after_release_mbid=last_release)
if releases:
for r in releases[::-1]: #process least recent first
create_release_event(r, service)
with open(LAST_RELEASE_FILE, 'w') as f:
f.write(releases[0]['mbid'])
f.truncate()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment