Package flickyou :: Package backend :: Module json

Source Code for Module flickyou.backend.json

 1  import urllib 
 2  import urllib2 
 3   
 4  import simplejson as json 
 5   
 6  import base 
 7  import utils 
 8   
 9   
10 -class JSONBackend(base.BaseBackend):
11 """This backend uses JSON as format for HTTP Response 12 and REST for the Request. 13 14 See <http://www.flickr.com/services/api/request.rest.html> 15 and <http://www.flickr.com/services/api/response.json.html>."""
16 - def __init__(self, api_key, secret_key):
17 super(JSONBackend, self).__init__(api_key, secret_key) 18 self.response_format = 'json'
19
20 - def _get(self, method, auth, **params):
21 params.update(self._get_backend_params()) 22 if 'format' not in params: 23 params['format'] = self.response_format 24 25 params['api_key'] = self.api_key 26 27 for key, value in params.iteritems(): 28 if isinstance(value, list): 29 params[key] = ','.join([item for item in value]) 30 31 if method: 32 params['method'] = method 33 34 if auth and self.token: 35 params['auth_token'] = self.token 36 37 params['api_sig'] = utils.get_api_signature(self.secret_key, **params) 38 39 return urllib2.urlopen(utils.REST_API_URL, 40 urllib.urlencode(params)).read()
41
42 - def _get_backend_params(self):
43 return dict(format=self.response_format, nojsoncallback=1)
44
45 - def _parse_response(self, response):
46 return json.loads(response)
47
48 - def _handle_error(self, response):
49 if response['stat'] == 'fail': 50 msg = "%s: %s" % (response['code'], response['message']) 51 raise base.BackendError(msg)
52
53 - def auth_checkToken(self):
54 try: 55 response = self.call_api_method('flickr.auth.checkToken', False, 56 auth_token=self.token) 57 except base.BackendError: 58 return (None, None) 59 60 token = response['auth']['token']['_content'] 61 perms = response['auth']['perms']['_content'] 62 63 return token, perms
64
65 - def auth_getFrob(self):
66 response = self.call_api_method('flickr.auth.getFrob', False, **{}) 67 self.frob = response['frob']['_content'] 68 return self.frob
69
70 - def auth_getToken(self):
71 if not self.frob: 72 raise base.BackendError("You must call auth_getFrob() first.") 73 74 response = self.call_api_method('flickr.auth.getToken', False, 75 frob=self.frob) 76 self.token = response['auth']['token']['_content'] 77 return self.token
78
79 - def get_buddy_icon_url(self, user_id=None):
80 """ 81 get_buddy_icon_url: 82 Returns the URL of the given user's buddy icon. 83 This works outside the Flickr API documentation. 84 85 See: <http://flickr.com/services/api/misc.buddyicons.html>""" 86 base_url = ( 87 "http://farm%(icon_farm)s.static.flickr.com/" 88 "%(icon_server)s/buddyicons/%(nsid)s.jpg") 89 90 user_info = self.call_api_method('flickr.people.getInfo', True, 91 user_id=user_id)['person'] 92 93 d = dict(icon_farm=user_info['iconfarm'], 94 icon_server=user_info['iconserver'], nsid=user_id) 95 return base_url % d
96