Commit fef7e054 authored by Josh Roesslein's avatar Josh Roesslein
Browse files

Added appengine example for using oauth.

parent 5151949b
......@@ -7,6 +7,9 @@ during upgrade will be listed here.
+ Google App Engine fixes (thanks Thomas Bohmbach, Jr)
+ Added Retweet API methods
+ Added Retweet Streaming method
+ Added set_request_token() method to OAuthHandler
+ Examples
+ Appengine demo (oauth)
1.0 -> 1.0.1
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import sys
sys.path.insert(0, '')
import oauth_example.handlers
# Construct the WSGI application
application = webapp.WSGIApplication([
# OAuth example
(r'/oauth/', oauth_example.handlers.MainPage),
(r'/oauth/callback', oauth_example.handlers.CallbackPage),
], debug=True)
def main():
# Run the WSGI application
if __name__ == '__main__':
application: tweepy-demo
version: 1
runtime: python
api_version: 1
- url: /.*
<title>Tweepy OAuth Example -- Error!</title>
# This index.yaml is automatically updated whenever the dev_appserver
# detects that a new type of query is run. If you want to manage the
# index.yaml file manually, remove the above marker line (the line
# saying "# AUTOGENERATED"). If you want to manage some indexes
# manually, move them above the marker line. The index.yaml file is
# automatically uploaded to the admin console when you next deploy
# your application using
<title>Tweepy OAuth Example -- callback</title>
<h1>Access token</h1>
<li><b>Key:</b> {{access_token.key}}</li>
<li><b>Secret:</b> {{access_token.secret}}</li>
import pickle
from google.appengine.ext.webapp import RequestHandler, template
from google.appengine.ext import db
import tweepy
from oauth_example.models import OAuthToken
CONSUMER_KEY = 'e9n31I0z64dagq3WbErGvA'
CONSUMER_SECRET = '9hwCupdAKV8EixeNdN3xrxL9RG3X3JTXI0Q520Oyolo'
# Main page handler (/oauth/)
class MainPage(RequestHandler):
def get(self):
# Build a new oauth handler and display authorization url to user.
print template.render('oauth_example/main.html', {
"authurl": auth.get_authorization_url(),
"request_token": auth.request_token
except tweepy.TweepError, e:
# Failed to get a request token
print template.render('error.html', {'message': e})
# We must store the request token for later use in the callback page.
request_token = OAuthToken(
token_key = auth.request_token.key,
token_secret = auth.request_token.secret
# Callback page (/oauth/callback)
class CallbackPage(RequestHandler):
def get(self):
oauth_token = self.request.get("oauth_token", None)
oauth_verifier = self.request.get("oauth_verifier", None)
if oauth_token is None:
# Invalid request!
print template.render('error.html', {
'message': 'Missing required parameters!'
# Lookup the request token
request_token = OAuthToken.gql("WHERE token_key=:key", key=oauth_token).get()
if request_token is None:
# We do not seem to have this request token, show an error.
print template.render('error.html', {'message': 'Invalid token!'})
# Rebuild the auth handler
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_request_token(request_token.token_key, request_token.token_secret)
# Fetch the access token
except tweepy.TweepError, e:
# Failed to get access token
print template.render('error.html', {'message': e})
# So now we could use this auth handler.
# Here we will just display the access token key&secret
print template.render('oauth_example/callback.html', {
'access_token': auth.access_token
<title>Tweepy OAuth Example</title>
<h1>Tweepy OAuth Example</h1>
<h3><a href="{{authurl}}">Authorize Tweepy</a></h3>
<h3>Request token</h3>
<li><b>Key:</b> {{request_token.key}}</li>
<li><b>Secret:</b> {{request_token.secret}}</li>
from google.appengine.ext import db
class OAuthToken(db.Model):
token_key = db.StringProperty(required=True)
token_secret = db.StringProperty(required=True)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment