#!/usr/bin/env python # -*- coding: iso-8859-1 -*- from google.appengine.api.urlfetch import fetch from urllib import quote_plus from django.utils.simplejson import loads from google.appengine.ext import db import re import cgitb class AnyClipAPIData(db.Model): apiKey = db.StringProperty(required=True) token = db.StringProperty() class AnyClipAPI(): def __init__(self, key): apiDataFetch = AnyClipAPIData.all().filter('apiKey = ', key).fetch(1) if (len(apiDataFetch) == 1): self.apiData = apiDataFetch[0] else: self.apiData = AnyClipAPIData(apiKey = key) self.errorMatch = re.compile("(.*)(.*)") def request(self, method, args = ()): if method == "authenticate": url = "http://api3.anyclip.com/ac_auth/v1/json/authenticate/%s/" % args[0] else: if self.apiData.token == None: self.authenticate() url = "http://api3.anyclip.com/ac_api/v1/%s/json/%s/" % (self.apiData.token, method) for arg in args: url += "%s/" % quote_plus(str(arg)) response = fetch(url) if response.status_code != 200: return ("", "") error = self.errorMatch.search(response.content) if error != None: if error.group(1) == '1001': self.authenticate() return self.request(method, args) else: return (error.group(1), error.group(2)) try: return loads(response.content) except: return ("", "") def authenticate(self): self.apiData.token = self.request("authenticate", [self.apiData.apiKey])["Token"] self.apiData.put()