Skip to main content

OAuth of Fanfou

Project description


$ sudo pip install fanfou


>>> import fanfou

Step 1: Authorize

The module provides several ways to authorize, see more details on Fanfou API OAuth.

Way 1:

>>> consumer = {'key': 'your key', 'secret': 'your secret'}
>>> client = fanfou.OAuth(consumer)    # (1)(2)
>>> request_token = client.request_token()
>>> print(client.authorize_url)    # browse the url to authorize
>>> access_token = client.access_token()    # done

(1). The default callback is ‘http://localhost:8080’.

(2). The default authorize_url is ‘…’, you can pass auth_host=’’ to change it.

Maybe you handling the callback elsewhere, create a new client and get access_token, like that:

>>> client = fanfou.OAuth(consumer, request_token)
>>> access_token = client.access_token()    # done
>>> # or
>>> client = fanfou.OAuth(consumer)
>>> access_token = client.access_token(request_token)    # done

Way 2:

>>> consumer = {'key': 'your key', 'secret': 'your secret'}
>>> client = fanfou.OAuth(consumer, callback='oob')
>>> request_token = client.request_token()
>>> print(client.authorize_url)    # browse the url and copy verifier_code
>>> verifier_code = 'your verifier_code'
>>> access_token = client.access_token(oauth_verifier=verifier_code)    # done

You can also create a new client and get access_token, like the way 1 above.

Way 3:

>>> consumer = {'key': 'your key', 'secret': 'your secret'}
>>> access_token =  {'key': 'your key', 'secret': 'your secret'}    # access_token is what you saved before
>>> client = fanfou.OAuth(consumer, access_token)    # done

Way 4:

>>> consumer = {'key': 'your key', 'secret': 'your secret'}
>>> client = fanfou.XAuth(consumer, 'username', 'password')    # done
>>> access_token = client.access_token()    # optional, if you want to save access_token

Using https:

In the lastest edition, you can using https like that:

>>> consumer = {'key': 'your key', 'secret': 'your secret'}
>>> client = fanfou.XAuth(consumer, 'username', 'password', fake_https=True)

The fake_https is available in all authorize ways.

Step 2: Access API

We assume that you’ve got client on Step 1, now you have two styles to access API.

Style 1:

>>> import json
>>> resp = client.request('/statuses/home_timeline', 'GET')  # resp is a HTTPResponse instance
>>> print(resp.code)
>>> data = json.loads(    # Python 3: data = json.loads('utf8'))
>>> for item in data:
>>>     print(item['text'])
>>> body = {'status': 'update status test 1'}
>>> resp = client.request('/statuses/update', 'POST', body)
>>> print(resp.code)

Style 2:

>>> import json
>>> fanfou.bound(client)    # note the line
>>> body = {'page': 2, 'count': 20, 'mode': 'lite'}
>>> resp = client.statuses.home_timeline()
>>> data = json.loads(    # Python 3: data = json.loads('utf8'))
>>> for item in data:
>>>     print(item['text'])
>>> body = {'status': 'update status test 2'}
>>> resp = client.statuses.update(body)
>>> print(resp.code)

If you want to use style 2, you must fanfou.bound(client) before use. They have the same effect, just two different styles.

Just put all you want to request args to a dict (above is body), and then access a API. If you want to upload a photo, please see pack_image. More API details on Fanfou API Apicategory.

What’s new in 0.2.x

>>> fanfou.bound(client)
>>> resp =
>>> data = resp.json()    # equal: data = json.loads('utf8'))

In this update, you can get a Python object directly by using resp.json().

More details

pack_image(args, binary=None)

On /account/update_profile_image and /photos/upload you need to upload a image, pack_image can help you work easily.

>>> # update profile image
>>> args = {'image': 'test.jpg', 'mode': 'lite'}
>>> body, headers = fanfou.pack_image(args)
>>> resp = client.account.update_profile_image(body, headers)
>>> # or, resp = client.request('/account/update_profile_image', 'POST', body, headers)
>>> print(resp.code)
>>> # upload photo
>>> args = {'photo': '', 'status': 'upload online photo'}
>>> body, headers = fanfou.pack_image(args)
>>> resp =, headers)
>>> print(resp.code)

Just put the filename in the args, then pack_image it, and then you can access API. The image file can be local or network file, pack_image will auto read it.

Sometimes you want to provide binary bytes instead of filename when you’re writing a webapp, because the data you get from the form is binary. (like

>>> f = open('test.jpg')
>>> args = {'photo': 'test.jpg', 'status': 'upload local photo'}
>>> body, headers = fanfou.pack_image(args,  # note the line
>>> f.close()
>>> resp =, headers)
>>> print(resp.code)

auth classes

The __init__ method for auth classes is as follows:

class OAuth (oauth_consumer, oauth_token=None, callback=None, auth_host=None, https=False, fake_https=False)

class XAuth (oauth_consumer, username, password, https=False, fake_https=False)


Thank Fanfou and thank you for tolerating my poor English.

If you have any questions, I am here @home2.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for fanfou, version 0.2.6
Filename, size File type Python version Upload date Hashes
Filename, size fanfou-0.2.6-py2.py3-none-any.whl (10.9 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size fanfou-0.2.6.tar.gz (7.3 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page