]> jfr.im git - z_archive/twitter.git/blob - twitter/oauth_dance.py
d3f0ea8f6548635a5c93d6c832f160bb0d5f5cf3
[z_archive/twitter.git] / twitter / oauth_dance.py
1 from __future__ import print_function
2
3 import webbrowser
4 import time
5
6 from .api import Twitter
7 from .oauth import OAuth, write_token_file
8
9 try:
10 _input = raw_input
11 except NameError:
12 _input = input
13
14
15
16 def oauth_dance(app_name, consumer_key, consumer_secret, token_filename=None):
17 """
18 Perform the OAuth dance with some command-line prompts. Return the
19 oauth_token and oauth_token_secret.
20
21 Provide the name of your app in `app_name`, your consumer_key, and
22 consumer_secret. This function will open a web browser to let the
23 user allow your app to access their Twitter account. PIN
24 authentication is used.
25
26 If a token_filename is given, the oauth tokens will be written to
27 the file.
28 """
29 print("Hi there! We're gonna get you all set up to use %s." % app_name)
30 twitter = Twitter(
31 auth=OAuth('', '', consumer_key, consumer_secret),
32 format='', api_version=None)
33 oauth_token, oauth_token_secret = parse_oauth_tokens(
34 twitter.oauth.request_token())
35 print("""
36 In the web browser window that opens please choose to Allow
37 access. Copy the PIN number that appears on the next page and paste or
38 type it here:
39 """)
40 oauth_url = ('https://api.twitter.com/oauth/authorize?oauth_token=' +
41 oauth_token)
42 print("Opening: %s\n" % oauth_url)
43
44 try:
45 r = webbrowser.open(oauth_url)
46 time.sleep(2) # Sometimes the last command can print some
47 # crap. Wait a bit so it doesn't mess up the next
48 # prompt.
49 if not r:
50 raise Exception()
51 except:
52 print("""
53 Uh, I couldn't open a browser on your computer. Please go here to get
54 your PIN:
55
56 """ + oauth_url)
57 oauth_verifier = _input("Please enter the PIN: ").strip()
58 twitter = Twitter(
59 auth=OAuth(
60 oauth_token, oauth_token_secret, consumer_key, consumer_secret),
61 format='', api_version=None)
62 oauth_token, oauth_token_secret = parse_oauth_tokens(
63 twitter.oauth.access_token(oauth_verifier=oauth_verifier))
64 if token_filename:
65 write_token_file(
66 token_filename, oauth_token, oauth_token_secret)
67 print()
68 print("That's it! Your authorization keys have been written to %s." % (
69 token_filename))
70 return oauth_token, oauth_token_secret
71
72 def parse_oauth_tokens(result):
73 for r in result.split('&'):
74 k, v = r.split('=')
75 if k == 'oauth_token':
76 oauth_token = v
77 elif k == 'oauth_token_secret':
78 oauth_token_secret = v
79 return oauth_token, oauth_token_secret