アカウントは @BTCcheck です。ぜひフォローしてみてください。
Google App Engine から、Twitterに投稿するのはちょっと面倒でした。
Pythonからツイートするといえば、requests-oauthlib が比較的有名で、python-twitter でも内部でrequests-oauthlibが呼ばれているようです。
requests-oauthlibの情報は検索すればたくさん出てくるのですが、Google App Engineからは使えませんでした。
でも、蛇の道はヘビといいますか、さすがインターネット、必ず先人がおられます。先人たちの残してくださった情報をもとに、どうにかツイート機能を実装することができました。
一番の決め手は AppEngine-OAuth-Library です。この中の"oauth.py"を使います。
使い方は、ここ「TwitterボットをOAuthに対応させてみた - Google App Engine(Python)」を参考にさせていただきました。
いろいろ調べて遠回りしてしまったので、簡単に作業内容をまとめておきます。
大きな流れとしては、以下の通りです。
- AppEngine-OAuth-Library の中の"oauth.py"をコピーします。
ツイートするスクリプトが"tweet.py"だととすれば、"tweet.py"と同じ場所に置くのがわかりやすくていいでしょう。 - "oauth.py"の53行目あたり、"import json"をコメントアウトして、すぐ上の行にコメントアウトされている"#from django.utils import simplejson as json"の頭の"#"を外します。
もし、うまく動作しない場合は、djangoのライブラリ設定がうまくできていないと思われますが、いろいろ考えるのが面倒なら、ここ(https://pypi.python.org/pypi/simplejson)からsimplejsonをダウンロードして、"simplejson"というフォルダを"oauth.py"と同じディレクトリに置き、53行目を"import simplejson as json"と書き換えるという手もあります。 - 「TwitterボットをOAuthに対応させてみた - Google App Engine(Python)」に書かれているサンプルを参考に、ほぼほぼこのまま使わせていただきます。
ただし、Twitterに投稿のリクエストをするURL"http://twitter.com/statuses/update.json"は、少し古いようで、"https://api.twitter.com/1.1/statuses/update.json"に書き換える必要があります。
変数paramを書き換えてからTweetHandlerをwebapp.WSGIApplicationに渡してやれば、ツイート内容を変えることができます。
"TweetHandler.get.param = {'status' : u'新しくつぶやく内容'}"とすれば、ツイート内容を変更できるはずです。
現在運用中のBitcoin価格評価システムでは、いろいろいじくっていたので、paramはTweetHandlerの直下にあります。したがって、"TweetHandler.param = {'status' : u'新しくつぶやく内容'}"を実行してから、"application = webapp.WSGIApplication([('tweet.pyを呼ぶURL', TweetHandler)], debug=DEBUG)"を実行しています。
先人たちの残してくれたライブラリや各種情報のおかげで、なんとかツイート機能を追加できました。ありがとうございます!
ちなみにOAuth認証の「OAuth」ですが、「オー オース」と発音するそうです。(参照:Wikipedia)
0 件のコメント:
コメントを投稿