Created
February 16, 2013 19:37
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | |
# [email protected] 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