Interact with the Patreon API via OAuth.
Get the egg from PyPI, typically via pip:
pip install patreon
or
echo "patreon" >> requirements.txt
pip install -r requirements.txt
Make sure that, however you install patreon,
you install its dependencies as well
Visit the OAuth Documentation Page while logged in as a Patreon creator to register your client.
This will provide you with a client_id and a client_secret.
e.g., in a Flask route
import patreon
from flask import request
...
client_id = None # Replace with your data
client_secret = None # Replace with your data
creator_id = None # Replace with your data
@app.route('/oauth/redirect')
def oauth_redirect():
oauth_client = patreon.OAuth(client_id, client_secret)
tokens = oauth_client.get_tokens(request.args.get('code'), '/oauth/redirect')
access_token = tokens['access_token']
api_client = patreon.API(access_token)
user_response = api_client.fetch_user()
user = user_response.data()
pledges = user.relationship('pledges')
pledge = pledges[0] if pledges and len(pledges) > 0 else None
# pass user and pledge to your view to render as neededYou'll notice that the user_response does not return raw JSON data.
Instead, it returns a JSON:API resource object,
to simplify traversing the normalized graph data that the Patreon API returns.
Some available methods are:
response.data()to get the main resourceresponse.data().attribute('full_name')to get thefull_nameattribute from the response dataresponse.data().relationship('campaign').attribute('pledge_sum')to get thepledge_sumattribute from thecampaignresource related to the main response dataresponse.find_resource_by_type_and_id('user', '123')to find an arbitrary resource
patreon.API instances have four methods for interacting with the API:
fetch_user(includes=None, fields=None)fetch_campaign(includes=None, fields=None)fetch_campaign_and_patrons(includes=None, fields=None)fetch_page_of_pledges(campaign_id, page_size, cursor=None, includes=None, fields=None)
The includes and fields arguments to these methods specify
the related resources
and the resource attributes
you want returned by our API, as per the JSON:API specification.
The lists of valid includes and fields arguments are provided on patreon.schemas.
For instance, if you wanted to request the total amount a patron has ever paid to your campaign,
which is not included by default, you could do:
api_client = patreon.API(patron_access_token)
patron_response = api_client.fetch_user(None, {
'pledge': patreon.schemas.pledge.default_attributes + [patreon.schemas.pledge.Attributes.total_historical_amount_cents]
})patreon.API also has a utility method extract_cursor
which you can use to extract pagination links
from our json:api response documents:
api_client = patreon.API(creator_access_token)
campaign_id = api_client.fetch_campaign().data()[0].id()
pledges = []
cursor = None
while True:
pledges_response = api_client.fetch_page_of_pledges(campaign_id, 10, cursor=cursor)
pledges += pledges_response.data()
cursor = api_client.extract_cursor(pledges_response)
if not cursor:
break
names_and_pledges = [{
'full_name': pledge.relationship('patron').attribute('full_name'),
'amount_cents': pledge.attribute('amount_cents'),
} for pledge in pledges]- Clone this repo
virtualenv venvsource venv/bin/activatepip install -e .pip install -r dev-requirements.txtgit checkout -b my-branch-name- make your edits, writing tests for any new functionality
- make sure tests pass with
python setup.py test git push- Open a pull request, explaining your changes (both problem and solution) clearly