Python and Flattr API v2
In Fiddled around with python-oauth2 and flattr I described how to access the Flattr API. Since this post, the Flattr guys relased a new API which is currently still beta but already useful working. However, at least after a fix of the access token process ;-)
So. What exactly changed? Almost everything, starting with a completely new and different authentication and authorization process.
I think, with v2 it's easier to develop apps. The API seems to be more straight forward. The process to get an access token is much simpler. I also like that JSON is used by default. Also the documentation is better than before, and very easy to understand and follow. What I really like, I don't need python-oauth2 as dependency any more. Everything is working with e.g. httplib2 .
First we have to send the User to Flattr, for authorizing our app. Therefor we have to include our client_id, which is the KEYof our app on https://flattr.com/apps :
https://flattr.com/oauth/authorize?scope=thing&response_type=code& client_id=KEY&redirect_uri=http://localhost
After the authentication, we will be redirected to http://localhost/?code=NEW_CODE.Your app should be registered now at https://flattr.com/settings/applications .
The next step is already to get the access token, using HTTP Basic Auth:
>>> http = httplib2.Http(disable_ssl_certificate_validation=True) >>> http.add_credentials(key, secret) >>> code=NEW_CODE >>> params = {'code': code, ... 'grant_type': 'authorization_code', ... 'redirect_uri': 'http://localhost/'} >>> ret = http.request('https://flattr.com/oauth/token', 'POST', j.dumps(params), headers={'Content-Type': 'application/json'}) >>> ret ({'status': '200', 'content-length': '73', 'strict-transport-security': 'max-age=500', 'set-cookie': 'PHPSESSID=3hceaj0umb533cipg462briq64; path=/; domain=.flattr.com; HttpOnly', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'vary': 'Accept-Encoding', 'server': 'lighttpd', 'connection': 'close', '-content-encoding': 'gzip', 'pragma': 'no-cache', 'cache-control': 'no-store', 'date': 'Sun, 20 Nov 2011 10:48:44 GMT', 'content-type': 'application/json; charset=utf-8'}, '{"access_token":"NEW_ACCESS_TOKEN","token_type":"bearer"}')
That's it. We now have our access token and are able to use it.
Get my user information using the access token:
>>> headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer NEW_ACCESS_TOKEN'} >>> ret = http.request('https://api.flattr.com/rest/v2/user', headers=headers) >>> ret ({'status': '200', 'x-ratelimit-remaining': '4990', 'content-location': 'https://api.flattr.com/rest/v2/user', '-content-encoding': 'gzip', 'strict-transport-security': 'max-age=500', 'vary': 'Accept-Encoding', 'content-length': '274', 'server': 'lighttpd', 'connection': 'close', 'x-ratelimit-limit': '5000', 'date': 'Sun, 20 Nov 2011 10:54:01 GMT', 'content-type': 'application/json'}, '{"type":"user","resource":"https:\\/\\/api.flattr.com\\/rest\\/v2\\/users\\/chrigl","link":"https:\\/\\/flattr.com\\/profile\\/chrigl","username":"chrigl","firstname":"Christoph","lastname":"Glaubitz","city":"","zip":"","province":"","cellphone":"","avatar":"","about":"","country":0}') >>> simplejson.loads(ret[1]) {'about': '', 'avatar': '', 'cellphone': '', 'city': '', 'country': 0, 'firstname': 'Christoph', 'lastname': 'Glaubitz', 'link': 'https://flattr.com/profile/chrigl', 'province': '', 'resource': 'https://api.flattr.com/rest/v2/users/chrigl', 'type': 'user', 'username': 'chrigl', 'zip': ''}
And that's it. Thanks for reading, and don't forget to consult the Flattr API v2 documentation .