Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 16th, 2012  |  syntax: None  |  size: 2.23 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # app/views/root.py
  2. # -*- coding: utf-8 -*-
  3. from flask import (
  4.     Blueprint,
  5.     redirect,
  6.     render_template,
  7.     session,
  8.     url_for,
  9. )
  10. import oauth2 as oauth
  11. import twitter
  12. import urllib
  13.  
  14. import config
  15.  
  16. # parse_qsl moved to urlparse module in v2.6
  17. try:
  18.     from urlparse import parse_qsl
  19. except:
  20.     from cgi import parse_qsl
  21.  
  22. app = Blueprint('root', __name__)
  23.  
  24. oauth_consumer = oauth.Consumer(
  25.     key = config.object.TWITTER_OAUTH_CONSUMER_KEY,
  26.     secret = config.object.TWITTER_OAUTH_CONSUMER_SECRET,
  27. )
  28. oauth_client = oauth.Client(oauth_consumer)
  29.  
  30. @app.route('/login', methods = [ 'GET', 'POST' ])
  31. def login():
  32.     res, content = oauth_client.request(
  33.         'http://api.twitter.com/oauth/request_token?%s'
  34.         % urllib.urlencode({
  35.              'oauth_callback': 'http://localhost:5000' + url_for('root.oauth_authorized')
  36.         }).replace('+', '%20'),
  37.         'GET',
  38.     )
  39.     if res['status'] != '200':
  40.         raise Exception(
  41.             "Invalid response %s: %s" % (res['status'], content)
  42.         )
  43.  
  44.     request_token = dict(parse_qsl(content))
  45.     session['request_token'] = request_token
  46.     url = 'https://api.twitter.com/oauth/authorize?%s' % (
  47.         urllib.urlencode({
  48.              'oauth_token': request_token['oauth_token'],
  49.              'oauth_callback': 'http://localhost:5000' + url_for('root.oauth_authorized')
  50.         }).replace('+', '%20'),
  51.     )
  52.     return redirect(url)
  53.  
  54. @app.route('/oauth_authorized')
  55. def oauth_authorized():
  56.     request_token = session['request_token']
  57.     token = oauth.Token(
  58.         request_token['oauth_token'],
  59.         request_token['oauth_token_secret']
  60.     )
  61.     client = oauth.Client(oauth_consumer, token)
  62.     res, content = client.request(
  63.         'https://api.twitter.com/oauth/access_token',
  64.         'POST'
  65.     )
  66.     if res['status'] != '200':
  67.         raise Exception(
  68.             "Invalid response %s: %s" % (res['status'], content)
  69.         )
  70.     access_token = dict(parse_qsl(content))
  71.  
  72.     api = twitter.Api(
  73.         consumer_key = config.object.TWITTER_OAUTH_CONSUMER_KEY,
  74.         consumer_secret = config.object.TWITTER_OAUTH_CONSUMER_SECRET,
  75.         access_token_key = access_token['oauth_token'],
  76.         access_token_secret =  access_token['oauth_token_secret'],
  77.     )
  78.     return str(api.VerifyCredentials())