reupload
This commit is contained in:
119
env/lib/python3.6/site-packages/twitter/oauth_dance.py
vendored
Normal file
119
env/lib/python3.6/site-packages/twitter/oauth_dance.py
vendored
Normal file
@@ -0,0 +1,119 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import webbrowser
|
||||
import time
|
||||
|
||||
from .api import Twitter, json
|
||||
from .oauth import OAuth, write_token_file
|
||||
from .oauth2 import OAuth2, write_bearer_token_file
|
||||
|
||||
try:
|
||||
_input = raw_input
|
||||
except NameError:
|
||||
_input = input
|
||||
|
||||
|
||||
def oauth2_dance(consumer_key, consumer_secret, token_filename=None):
|
||||
"""
|
||||
Perform the OAuth2 dance to transform a consumer key and secret into a
|
||||
bearer token.
|
||||
|
||||
If a token_filename is given, the bearer token will be written to
|
||||
the file.
|
||||
"""
|
||||
twitter = Twitter(
|
||||
auth=OAuth2(consumer_key=consumer_key, consumer_secret=consumer_secret),
|
||||
format="",
|
||||
api_version="")
|
||||
token = json.loads(twitter.oauth2.token(grant_type="client_credentials"))["access_token"]
|
||||
if token_filename:
|
||||
write_bearer_token_file(token_filename, token)
|
||||
return token
|
||||
|
||||
def get_oauth_pin(oauth_url, open_browser=True):
|
||||
"""
|
||||
Prompt the user for the OAuth PIN.
|
||||
|
||||
By default, a browser will open the authorization page. If `open_browser`
|
||||
is false, the authorization URL will just be printed instead.
|
||||
"""
|
||||
|
||||
print("Opening: %s\n" % oauth_url)
|
||||
|
||||
if open_browser:
|
||||
print("""
|
||||
In the web browser window that opens please choose to Allow
|
||||
access. Copy the PIN number that appears on the next page and paste or
|
||||
type it here:
|
||||
""")
|
||||
|
||||
try:
|
||||
r = webbrowser.open(oauth_url)
|
||||
time.sleep(2) # Sometimes the last command can print some
|
||||
# crap. Wait a bit so it doesn't mess up the next
|
||||
# prompt.
|
||||
if not r:
|
||||
raise Exception()
|
||||
except:
|
||||
print("""
|
||||
Uh, I couldn't open a browser on your computer. Please go here to get
|
||||
your PIN:
|
||||
|
||||
""" + oauth_url)
|
||||
|
||||
else: # not using a browser
|
||||
print("""
|
||||
Please go to the following URL, authorize the app, and copy the PIN:
|
||||
|
||||
""" + oauth_url)
|
||||
|
||||
return _input("Please enter the PIN: ").strip()
|
||||
|
||||
|
||||
def oauth_dance(app_name, consumer_key, consumer_secret, token_filename=None, open_browser=True):
|
||||
"""
|
||||
Perform the OAuth dance with some command-line prompts. Return the
|
||||
oauth_token and oauth_token_secret.
|
||||
|
||||
Provide the name of your app in `app_name`, your consumer_key, and
|
||||
consumer_secret. This function will let the user allow your app to access
|
||||
their Twitter account using PIN authentication.
|
||||
|
||||
If a `token_filename` is given, the oauth tokens will be written to
|
||||
the file.
|
||||
|
||||
By default, this function attempts to open a browser to request access. If
|
||||
`open_browser` is false it will just print the URL instead.
|
||||
"""
|
||||
print("Hi there! We're gonna get you all set up to use %s." % app_name)
|
||||
twitter = Twitter(
|
||||
auth=OAuth('', '', consumer_key, consumer_secret),
|
||||
format='', api_version=None)
|
||||
oauth_token, oauth_token_secret = parse_oauth_tokens(
|
||||
twitter.oauth.request_token(oauth_callback="oob"))
|
||||
oauth_url = ('https://api.twitter.com/oauth/authorize?oauth_token=' +
|
||||
oauth_token)
|
||||
oauth_verifier = get_oauth_pin(oauth_url, open_browser)
|
||||
|
||||
twitter = Twitter(
|
||||
auth=OAuth(
|
||||
oauth_token, oauth_token_secret, consumer_key, consumer_secret),
|
||||
format='', api_version=None)
|
||||
oauth_token, oauth_token_secret = parse_oauth_tokens(
|
||||
twitter.oauth.access_token(oauth_verifier=oauth_verifier))
|
||||
if token_filename:
|
||||
write_token_file(
|
||||
token_filename, oauth_token, oauth_token_secret)
|
||||
print()
|
||||
print("That's it! Your authorization keys have been written to %s." % (
|
||||
token_filename))
|
||||
return oauth_token, oauth_token_secret
|
||||
|
||||
def parse_oauth_tokens(result):
|
||||
for r in result.split('&'):
|
||||
k, v = r.split('=')
|
||||
if k == 'oauth_token':
|
||||
oauth_token = v
|
||||
elif k == 'oauth_token_secret':
|
||||
oauth_token_secret = v
|
||||
return oauth_token, oauth_token_secret
|
||||
Reference in New Issue
Block a user