2015年8月17日月曜日

Twitter つぶやき機能追加

Bitcoin価格評価システムにTwitterへの投稿機能を付けました。価格が高いor安いと判断したら、その旨つぶやきます。
アカウントは @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)」を参考にさせていただきました。

いろいろ調べて遠回りしてしまったので、簡単に作業内容をまとめておきます。
大きな流れとしては、以下の通りです。

  1. AppEngine-OAuth-Library の中の"oauth.py"をコピーします。
    ツイートするスクリプトが"tweet.py"だととすれば、"tweet.py"と同じ場所に置くのがわかりやすくていいでしょう。
  2. "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"と書き換えるという手もあります。
  3. 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 件のコメント:

コメントを投稿