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 .