Skip to content

Instantly share code, notes, and snippets.

@c-bata
Last active August 29, 2015 14:05
Show Gist options
  • Save c-bata/7807f84a64b7a6f3d533 to your computer and use it in GitHub Desktop.
Save c-bata/7807f84a64b7a6f3d533 to your computer and use it in GitHub Desktop.
Python/FlaskでRauthライブラリを使ったTwitterログイン
from flask import (Flask, flash, request, redirect, render_template, session,
url_for)
from rauth.service import OAuth1Service
from rauth.utils import parse_utf8_qsl
from datetime import datetime
CONSUMER_KEY = 'consumer key'
CONSUMER_SECRET = 'consumer secret'
# Flask setup
app = Flask(__name__)
app.secret_key = 'secret key'
# rauth OAuth 1.0 service wrapper
twitter = OAuth1Service(
name='twitter',
consumer_key=CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET,
request_token_url='https://api.twitter.com/oauth/request_token',
access_token_url='https://api.twitter.com/oauth/access_token',
authorize_url='https://api.twitter.com/oauth/authorize',
base_url='https://api.twitter.com/1.1/')
# views
@app.route('/')
def index():
if 'username' in session:
return 'Hello %s<br><a href="/logout">Log out.</a>' % session['username']
return '<a href="/login">Sign in with Twitter</a>'
@app.route('/login')
def login():
if 'username' in session:
return redirect(url_for('index'))
oauth_callback = url_for('callback', _external=True)
params = {'oauth_callback': oauth_callback}
r = twitter.get_raw_request_token(params=params)
data = parse_utf8_qsl(r.content)
session['twitter_oauth'] = (data['oauth_token'],
data['oauth_token_secret'])
return redirect(twitter.get_authorize_url(data['oauth_token'], **params))
@app.route('/callback')
def callback():
"""
OAuth callback from Twitter
"""
request_token, request_token_secret = session.pop('twitter_oauth')
# check to make sure the user authorized the request
if not 'oauth_token' in request.args:
flash('You did not authorize the request')
return redirect(url_for('index'))
try:
creds = {'request_token': request_token,
'request_token_secret': request_token_secret}
params = {'oauth_verifier': request.args['oauth_verifier']}
sess = twitter.get_auth_session(params=params, **creds)
except Exception, e:
flash('There was a problem logging into Twitter: ' + str(e))
return redirect(url_for('index'))
# tweet test
text = 'test tweet - {now_time}'.format(now_time=datetime.now())
response = sess.post('statuses/update.json',
data={'status':text}).json()
# get user profile
verify = sess.get('account/verify_credentials.json',
params={'format':'json'}).json()
session['username'] = verify['screen_name']
session['twitter_id'] = verify['id']
session['name'] = verify['name']
#flash('Logged in as ' + verify['name'])
return redirect(url_for('index'))
@app.route('/logout')
def logout():
"""
Logout
"""
# Delete session data
session.pop('username', None)
session.pop('twitter_id', None)
session.pop('name', None)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment