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.get_identity()
user = user_response.data()
memberships = user.relationship('memberships')
membership = memberships[0] if memberships and len(memberships) > 0 else None
# pass user and membership 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 methods for interacting with the API based on the routes described in the docs.
All methods include includes and fields parameters.
ie:
get_identity(includes=None, fields=None)
List methods take page_size and cursor methods as well, ie:
get_campaigns(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.get_identity(None, {
'membership': patreon.schemas.member.Attributes.currently_entitled_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.get_campaigns().data()[0].id()
memberships = []
cursor = None
while True:
members_response = api_client.get_campaigns_by_id_members(campaign_id, 10, cursor=cursor)
members += members_response.data()
cursor = api_client.extract_cursor(members_response)
if not cursor:
break
names_and_membershipss = [{
'full_name': member.relationship('user').attribute('full_name'),
'amount_cents': member.attribute('amount_cents'),
} for member in members]- Clone this repo
- Install dependencies
- If you're on Python 3:
python -m venv venv && source venv/bin/activate && python setup.py develop - If you're on Python 2:
virtualenv venv && source venv/bin/activate && pip install -e . && pip install -r dev-requirements.txt
- If you're on Python 3:
git 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