1 import urllib
2 import urllib2
3
4 import simplejson as json
5
6 import base
7 import utils
8
9
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):
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
43 return dict(format=self.response_format, nojsoncallback=1)
44
46 return json.loads(response)
47
49 if response['stat'] == 'fail':
50 msg = "%s: %s" % (response['code'], response['message'])
51 raise base.BackendError(msg)
52
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
66 response = self.call_api_method('flickr.auth.getFrob', False, **{})
67 self.frob = response['frob']['_content']
68 return self.frob
69
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
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