twitter.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import urlparse
  2. import oauth2 as oauth
  3. import requests
  4. import base64, random
  5. request_token_url = 'https://api.twitter.com/oauth/request_token'
  6. access_token_url = 'https://api.twitter.com/oauth/access_token'
  7. authorize_url = 'https://api.twitter.com/oauth/authorize'
  8. class TwitterOauthClient(object):
  9. oauth_token = None
  10. oauth_token_secret = None
  11. def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret):
  12. self.consumer_key = consumer_key
  13. self.consumer_secret = consumer_secret
  14. self.access_token = access_token
  15. self.access_token_secret = access_token_secret
  16. self.consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
  17. def get_authorize_url(self):
  18. '''
  19. Obtained oauth_token and oauth_token_secret from request_token_url,
  20. returns an authorize url.
  21. From the redirect url, we obtain the oauth verifier.
  22. '''
  23. client = oauth.Client(self.consumer)
  24. resp, content = client.request(request_token_url, 'GET')
  25. if int(resp['status']) != 200:
  26. raise Exception('Invalid response %s' %resp['status'])
  27. request_token = dict(urlparse.parse_qsl(content))
  28. #temporary
  29. self.oauth_token = request_token['oauth_token']
  30. self.oauth_token_secret = request_token['oauth_token_secret']
  31. print self.oauth_token
  32. #link to authorize app access twitter data and return to twitter api example page
  33. link = authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/twitter/"
  34. return link
  35. def get_access_token_url(self, oauth_verifier):
  36. token = oauth.Token(self.oauth_token, self.oauth_token_secret)
  37. token.set_verifier(oauth_verifier)
  38. client = oauth.Client(self.consumer, token)
  39. resp, content = client.request(access_token_url, 'POST')
  40. if int(resp['status']) != 200:
  41. raise Exception('Invalid response %s' %resp['status'])
  42. print content
  43. access_token = dict(urlparse.parse_qsl(content))
  44. #permanent
  45. self.oauth_token = access_token['oauth_token']
  46. self.oauth_token_secret = access_token['oauth_token_secret']
  47. self.user_id = access_token['user_id']
  48. self.username = access_token['screen_name']
  49. def get_nonce(self):
  50. '''
  51. Unique token generated for each request.
  52. '''
  53. n = base64.b64encode(
  54. ''.join([str(random.randint(0, 9)) for i in range(24)]))
  55. return n