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']
included = user_response.get('included')
if included:
pledge = next((obj for obj in included
if obj['type'] == 'pledge' and obj['relationships']['creator']['data']['id'] == creator_id), None)
campaign = next((obj for obj in included
if obj['type'] == 'campaign' and obj['relationships']['creator']['data']['id'] == creator_id), None)
else:
pledge = None
campaign = None
# pass user, pledge, and campaign to your view to render as needed
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(patron_access_token)
patrons_page = api_client.fetch_page_of_pledges(campaign_id, 10)
next_cursor = api_client.extract_cursor(patrons_page)
second_patrons_page = api_client.fetch_page_of_pledges(campaign_id, 10, cursor=next_cursor)