Taking Twitter as an example on how to use OAuth1Client
.
from aiohttp_oauth_client import OAuth1Client
For OAuth 1.0, the first step is requesting a temporary credential (aka request token).
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_request_token():
url = 'https://api.twitter.com/oauth/request_token'
async with OAuth1Client(client_id, client_secret) as session:
request_token = await session.fetch_request_token(url)
return request_token
This fetch_request_token
method will return the temporary credential like:
{'oauth_token': 'Ih....Jw', 'oauth_token_secret': 'gr...GE', 'oauth_callback_confirmed': 'true'}
We can test this function with:
# twitter.py
import asyncio
from aiohttp_oauth_client import OAuth1Client
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_request_token():
url = 'https://api.twitter.com/oauth/request_token'
async with OAuth1Client(client_id, client_secret) as session:
request_token = await session.fetch_request_token(url)
return request_token
async def main():
request_token = await fetch_request_token()
print(request_token)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
The second step is to generate the authorization URL:
def create_authorization_url(request_token):
authenticate_url = 'https://api.twitter.com/oauth/authenticate'
client = OAuth1Client(client_id, client_secret)
url = client.create_authorization_url(authenticate_url, request_token['oauth_token'])
return url
This step is synchronized, no need for async
and await
. Passing the
request_token
we got from the first step, we would get a url like:
https://api.twitter.com/oauth/authenticate?oauth_token=Ih....Jw
Then visit this URL with your browser, and approve the request. Twitter
will redirect back to your default redirect_uri
you registered in Twitter.
If you want to redirect to your specified URL, rewrite the code like:
def create_authorization_url(request_token):
authenticate_url = 'https://api.twitter.com/oauth/authenticate'
client = OAuth1Client(client_id, client_secret, redirect_uri='https://your-defined-url')
url = client.create_authorization_url(authenticate_url, request_token['oauth_token'])
return url
The last step is to fetch the access token. In previous step, twitter will redirect back to a URL, for instance, something like:
https://your-domain.org/auth?oauth_token=Ih...Jw&oauth_verifier=fcg..1Dq
We will use the oauth_verifier
in this URL to fetch access token. Here
is our code:
async def fetch_access_token(request_token, oauth_verifier):
url = 'https://api.twitter.com/oauth/access_token'
async with OAuth1Client(client_id, client_secret) as session:
session.token = request_token
token = await session.fetch_access_token(url, oauth_verifier)
return token
# if you specified redirect_uri in previous step, create the session with
# OAuth1Client(client_id, client_secret, redirect_uri='....')
We can test this function with:
# twitter.py
import asyncio
from aiohttp_oauth_client import OAuth1Client
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_access_token(request_token, oauth_verifier):
url = 'https://api.twitter.com/oauth/access_token'
async with OAuth1Client(client_id, client_secret) as session:
session.token = request_token
token = await session.fetch_access_token(url, oauth_verifier)
return token
async def main():
# from step 1
request_token = {
'oauth_token': 'Ih....Jw',
'oauth_token_secret': 'gr...GE',
'oauth_callback_confirmed': 'true'
}
# from step 2
verifier = 'fcg..1Dq'
token = await fetch_access_token(request_token, verifier)
print(request_token)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
from aiohttp_oauth_client import OAuth2Client
from aiohttp_oauth_client import AssertionClient