以前、「ASE(Android Scripting Environment)で作成したPythonスクリプトから、OAuth認証を経てTweet出来ました。」の記事でAndroidアプリから、OAuth認証経由でのTweetが出来たので、今度は、Google App Engineで同じことをやってみます。
ASE(Android Scripting Environment)で作成したPythonスクリプトから、OAuth認証を経てTweet出来ました。
http://vivo-design.blogspot.com/2010/10/aseandroid-scripting.html
同様のことを実装されている方のサイトを色々と拝見しました。その中で、下記のサイトの説明がとても分かりやすかったので、その方法で試させてもらいます。
Google App Engineで手軽にOAuthアプリを作成!(Twitterとか!) - AppEngine-OAuth
http://0-oo.net/sbox/python-box/appengine-oauth
必要なファイルを確認します。
- main.py
- app.yaml
- basehandler.py
- appengine_oauth.py
- appengine_twitter.py
まず、TwitterアプリケーションをTwitterアプリケーションプラットフォームに登録をします。今回は、赤枠の「vivo_bot_by_gae」というアプリケーションを登録しました。この画面は、登録後の画面ですが、新規に追加をする際は、下部にある「新しいアプリケーションを追加」をクリックします。
アプリケーション登録申請画面が表示されるので、必要事項を入力します。この画面は設定後のものです。
「アプリケーションの種類」は、「ブラウザアプリケーション」を指定します。「コールバックURL」はユーザ登録をするロジックを用意して、そのURLを設定しなければいけません。今回の場合は、
http://vivo-red.appspot.com/oauth/
にて、Twitterへの認証を申請して
http://vivo-red.appspot.com/oauth/callback
にて、Twitter APIより送られてきた認証結果を記録する処理をしています。その後は、記録した認証情報を使って、アクセスしていきます。
よって、「コールバックURL」には
http://vivo-red.appspot.com/oauth/callback
を指定します。
必要な情報を入力後、「保存する」を押すと申請の登録が完了します。
Application Details画面で表示されるので、
- Consumer key
- Consumer secret
次に main.py を3箇所修正します。
- Consumer key を設定
- Consumer secret を設定
- メッセージの表示の部分を自分用に変更
msg += u'http://vivo-red.appspot.com/oauth/callback からこんにちは!'
下記が変更したソースです。
#!/usr/bin/env python # -*- coding: UTF-8 -*- ''' Sample for AppEngine-OAuth on Google App Engine See: http://0-oo.net/sbox/python-box/appengine-oauth See also: http://apiwiki.twitter.com/OAuth-FAQ ''' import logging import wsgiref.handlers from appengine_twitter import AppEngineTwitter from basehandler import BaseHandler, h from django.utils import simplejson from google.appengine.ext import db from google.appengine.ext import webapp OAUTH_KEY = '*** ここにConsumer keyを設定 ***' OAUTH_SECRET = '*** ここにConsumer secretを設定 ***' class DemoHandler(BaseHandler): def demo_header(self): self.simple_header(u'AppEngine-OAuthのデモ') self.p(u'次に、Google App Engine Launcherを使ってアップします。AppEngine-OAuthのデモ
') def demo_footer(self): self.p(' ') self.p('
', True) self.p(u'このページは') self.p('') self.p(u'AppEngine-OAuth と ') self.p('') self.p(u'AppEngine-Twitter のデモです') self.simple_footer() class InitHandler(DemoHandler): def get(self): twitter = AppEngineTwitter() twitter.set_oauth(key=OAUTH_KEY, secret=OAUTH_SECRET) req_info = twitter.prepare_oauth_login() # request_tokenはcallbackされた後で使うのでDatastoreに保存しておく OAuthRequestToken(token=req_info['oauth_token'], secret=req_info['oauth_token_secret']).put() self.demo_header() self.p('') self.p(u'TwitterのOAuthログインへ', True) self.demo_footer() class CallbackHandler(DemoHandler): def get(self): twitter = AppEngineTwitter() twitter.set_oauth(OAUTH_KEY, OAUTH_SECRET) # TwitterからHTTP GETでrequest_tokenが渡される req_token = self.request.get('oauth_token') # Datastoreに保存しておいたreqest_token_secretを取り出す query = OAuthRequestToken.all() query.filter('token = ', req_token) req_tokens = query.fetch(1) # request_tokenとaccess_tokenを交換する acc_token = twitter.exchange_oauth_tokens(req_token, req_tokens[0].secret) # ここまで来ればOAuthを使ってAPIが使える。試しにユーザー名を取得 twitter.verify() name = simplejson.loads(twitter.last_response.content)['screen_name'] self.demo_header() self.p(u'こんにちは、' + name + u'さん!', True) self.p(' ') # 以後は再ログインせずにaccess_tokenを繰り返し使うことができる tw2 = AppEngineTwitter() tw2.set_oauth(OAUTH_KEY, OAUTH_SECRET, acc_token['oauth_token'], acc_token['oauth_token_secret']) msg = u'AppEngine-OAuth (on Python and Google App Engine) ' msg += u'http://vivo-red.appspot.com/oauth/callback からこんにちは!' tw2.update(msg.encode('utf8')) self.p(u'つぶやいたよ(自分のTLを見てね)', True) self.p(' ') if tw2.is_following('uresuji_books') == False: tw2.follow('uresuji_books') self.p(u'@uresuji_books をフォローしたよ', True) self.p(' ') self.p(u'最初のページへ戻る', True) self.demo_footer() #Model(s) class OAuthRequestToken(db.Model): token = db.StringProperty() secret = db.StringProperty() logging.getLogger() routing = [('/oauth/', InitHandler), ('/oauth/callback', CallbackHandler)] application = webapp.WSGIApplication(routing, debug=False) wsgiref.handlers.CGIHandler().run(application)
アプリを選んで、「Deploy」ボタンをクリックします。
Deploy Application to Googleの認証画面で、Emailとパスワードを入れて、「OK」ボタンを押します。
その後は自動でアップロードが始まり、動作状況がモニタされます。アップが完了すると、ウィンドウを閉じてもいいですよと、メッセージが表示されます。
用意が出来たサイトにアクセスをします。
「TwitterのOAuthログインへ」をクリックします。
Twitterへの認証許可の確認ページが表示されます。「許可する」をクリックします。
認証が完了し、Twitterユーザ名の取得と表示、そのTwitterユーザでのツイート、@uresuji_booksへのフォロー追加を実行した旨の表示がされます。
実際に動作したのかどうかを確認します。正常に動作していました。
ツイートの確認
フォロー追加の確認
これで後は、つぶやく内容、何をいつ、つぶやくかを設定していきます。
この内容を確認できるまでに、他にも、沢山のサイトに教えていただきました。ありがとうございます。
Twitter OAuth 自動化 with GAE/Py (Python-twoauth 版) - 混沌脳内
http://d.hatena.ne.jp/blaue_fuchs/20100926/1285497228
TwitterのbotをOAuthに対応させる
http://d.hatena.ne.jp/shibason/20090802/1249204953
TwitterボットをOAuthに対応させてみた - Google App Engine(Python)
http://blog.mudaimemo.com/search/label/google%20app%20engine
Google App Engine + Twitter + OAuthでTwitterにつぶやくためのメモ
http://blog.mudaimemo.com/2010/02/google-app-engine-twitter-oauth.html
GAE用のOAuthライブラリ simpleoauth-gae を作ってる
http://d.hatena.ne.jp/tagomoris/20100523/1274603964
python-twitter とついでに Mercurial を入れてみる
http://d.hatena.ne.jp/idemo/20100905/p2
Python-Twitter API構築
http://k-communication.sakura.ne.jp/blog/?p=83
0 件のコメント:
コメントを投稿