2011/04/28

TwitterBot開発 ~Twitter連携~

今回は、TwitterBotを作るうえで重要な、Twitterとの連携についての話を。

Torubotは、一定時間につぶやく機能や、自分に関係のあるつぶやき(mention)を確認して
返信を返す機能などを実装しています。

Twitterとどうやって連携してるの?というと、一番直接的な方法はTwitterAPIに直接アクセスする方法があります。

このあたりを見ると、やり方やらが色々出てくるわけですが・・・

僕は難しくてそんなことできないんで、githubから、教えてもらったコンポーネント使ってアクセスします。
正直、一番面倒だなぁと思ったのが、oAuth認証で、コレさえなかったらURL直接アクセスもいいんでしょうが・・・
(お前が内容理解してないだけだろうといわれれば、返す言葉もございません)

んで、神速さんに教わったのが、Tweepyでして。

必要なコンポーネントやらスクリプトの入手

joshthecoder/tweepy - GitHub <https://github.com/joshthecoder/tweepy>

からいただいてきます。

使い方は、ローカルで使う場合は、setup.py があるので、setuptools使って入れます。

setuptools は、このあたりからインストーラを拾ってくれば簡単に入れることができます。

tweepy自体はgithubから取得するので、cloneしましょう。
gitの使い方は、前になんか記事書いた気がする。

HIGH risk LOW return + α: GitをWindowsで使うには? <http://highrisklowreturn.blogspot.com/2010/10/gitwindows.html>

んで、

> git clone URL

で、ダウンロードしてきましょう。URL部分は

image

さっきのtweepyのページに、アクセス用のURLがあるので、そこを指定します。

ダウンロードできたら、実際にインストールしてみます。

ダウンロードしてきたリポジトリの直下に、setup.py があるので、実行しましょう。

> python setup.py install

って打つと、インストールが完了します。

次に、bot作るアカウントの情報を持ってきます。

実際に必要な情報は、oAuth認証を行って、トークン集めをします。

全部そろわないと、アクセスできないよ!

でも、やること自体は、そこまで複雑ではなくて、もう一つリポジトリをダウンロードしてきます。
tweepyのサンプル集なんですが、ここにoAuthの認証サンプルがいるんで、そいつを使いましょう。

まずは、githubなので、先ほどと同様に、

joshthecoder/tweepy-examples - GitHub <https://github.com/joshthecoder/tweepy-examples>

ここから落としてきましょう。

ここまでで、必要なスクリプトやコンポーネントがそろったことになります。

アプリケーションの登録

最初にやることは、tweepyからアクセスするアカウントに、自分のアプリを知らせなくてはいけません。

ブラウザから、tweepyからアクセスするアカウントにログインして、アプリケーションの登録を行いましょう。

登録は、ログインしたあと、設定のメニューから行います。

image

設定メニューを開くと、一番右に連携アプリというタブがあるので、そこを開きます。

さらに、そのページの右側カラムの開発者のところの連携アプリの追加と設定に入りましょう。

image

こんなページが表示されるので、「新しいアプリケーションを追加」から新しいアプリケーションを追加しましょう。

いろいろ聞かれるので、しっかりと埋めておきます。

重要な部分として、アプリケーションの種類をブラウザアプリケーション標準のアクセスタイプを Read-Write に設定します

しっかりと埋まっていれば、Consumer KeyConsumer Secret が表示されます。
また、この値は、メモっておくほか、開発者のページに来れば確認することができます。

oAuth認証

実際にoAuth認証をして、アクセスするために必要なTokenを取得します。

先ほどダウンロードしてきたexamplesリポジトリの /oauthフォルダ以下のpythonスクリプトを実行することで、取得できます。

> python getaccesstoken.py

Consumer key とか Consumer Secret を聞かれるので先ほどメモした値を入れましょう。

答えると、リダイレクトで認証番号がブラウザに表示されるので
さらにそれを入力します。

これで、認証が完了し、Access Token/Secret を返してくれます。

この値は、どっかにメモっておいてください。コレが無いとアクセスできなくなっちゃいます。

つぶやいてみる

全部取得できたら、次は実際につぶやいて見ましょう。

つぶやき方ですが、tweepyの使い方の手順として

  1. APIクラスのインスタンス(命令を出す本体)を生成する
  2. APIクラスから、やりたいことを呼び出す

とっても単純になってます。

スクリプトを見てみましょう。

まず認証して、APIクラスのインスタンスを作りましょう

import tweepy

# create OAuth handler
auth = tweepy.OAuthHandler(Profile.consumer_key, Profile.consumer_secret)

# set access token to OAuth handler
auth.set_access_token(Profile.access_key, Profile.access_secret)

# create API
api = tweepy.API(auth_handler=auth)

これで、準備完了です。

Profileの中には、先ほど取得した値が名前どおりに格納されていると思っておいてください

  • Consumer key → Profile.consumer_key
  • Consumer Secret → Profile.consumer_secret
  • Access Token → Profile.access_token
  • Access Secret → Profile.access_secret

の4種類ですね。

認証が終われば、後はツイートするだけなので、つぶやくのであれば

api.update_status(つぶやく内容)

でつぶやくことができます。

その他の機能は?

そのほかの機能については、tweepyのヘルプを読んでみてください。
書いてある内容は、twitterを使ったことある人なら、大体推測がつく内容になってます。

というわけで、自分の作ったtorubotはこのあたりから落とすことができます。
実際にtwitter関連の制御をまとめたtwitter.pyがあるので、興味があればご覧ください。
(ソースは酷いので、あまり気にしないでください・・・)

toru-bot/source/riskrisk-torubot at master from risk/risk – GitHub
<https://github.com/risk/risk/tree/master/toru-bot/source/riskrisk-torubot>

2011/04/25

TwitterBot開発 ~開発環境~

ずいぶんと長く開いてしまった。一応仕事がたて込んでたってコトで・・・

本題ですが、開発環境とかの話。

今回のBotは、GAEで動かすことが決定してたので、そのとおり組み立てていきました。

GAE自体は前に毎時50分のタイミングでつぶやく、10分前行動Botを作ったときに
作ったの元データがあったので、いろいろ流用しました。

大まかに、どんなもの使ったかを箇条書きすると

  • OS : Windows7
  • 実行環境
    • Python - Version 2.6(GAEが2.5だということに、気がつきながらも2.6でやってたとか・・・)
    • GoogleApplicationEngine (実際にソフトを動かすところ。タダおいしいです(^q^))
  • テスト関連ツール
    • nose (テストフレームワークで、途中からTDDに移行するに当たってお世話になった)
    • noseGAE(nose上でGAE依存のテストをするために必要なモジュール)
    • pymox (Mockを使うために必要 GoogleのPython用Mockオブジェクトフレームワーク EasyMockがベースになってる )
  • バージョン管理
    • git (cygwin)
    • github

を使いました。

最初はTDDとかぜんぜん考えてなくて、Python2.6 と GAE のみで動かしてましたw

当初のテストに関しては、何もやらなかったというわけではなく、mainに関数呼び出しをいろいろ実装しといて、
そこが正しく動いたように見えれば「まぁいっか(笑)」という感じで・・・

ちなみに、どのツールもインストールは簡単で

pythonに関してはここhttp://www.python.org/)から、インストーラをダウンロードするんですが、いま2.7で、今回はそれより前のバージョンを使うので

左側のメニューからDOWNLOADを開く、そこのReleaseを開く そうすると、リリースバージョンが選べるので、そこから
お好きなバージョンを選んでください(GAEの開発なら2.5が妥当だと思います)

image

インストールは、次へ連射になるので・・・

次は、GAEのインストールですが、これもGAEのページhttp://code.google.com/intl/ja/appengine/)から、
ダウンロードを選択して、SDKのインストーラを落としてきます。

今回はPythonを使って開発するので、選ぶツールは

Google App Engine SDK for Python の Windows用

image

これ、Java用もあるのでお間違えの無きよう。

あとは、次へ連射でインストール完了です。

忘れちゃいけないことなんですが、GAEを使う場合、お手持ちのGoogleアカウントで認証が必要です。
認証方法については、詳しく書かないですが、GAEのホームに、使い方の手順が右側のカラムに書いてあるので、
そちらを参考にしてもらえればと思います。

んで、準備ができたら、ためしにサンプルのGAEプロジェクトを作りたいと思うのが技術者なので、とりあえずなんか作ります

まず、GAEにアプリケーションを登録しましょう。

https://appengine.google.com/ にアクセスすると、自分のプロジェクトの一覧が見れます。

ここの一番下に、

image

のボタンがあるので、これを押して自分のアプリケーションを登録します。

アプリケーションのIDとタイトルを設定したら、出来上がりです。IDに関しては
あとで、yamlの名称のところに突っ込む必要があるので、どっかにメモっといてください。

正しく登録できたら、次に進みます。

こんどは、自分のPCにGAEのプロジェクトを作りましょう。

GAEのSDKをインストールするとGoogleApplicationLauncher

image

がインストールされるので、これを使います。

このツールは、ローカルのダミー実行から、デプロイまで一通りサポートしてくれるので、とっても便利です。

まずは、新規のプロジェクト作成です。

image

こんな感じで、Fileメニューの中に、新規に作成(Create New)と既存を追加(Add Existing)があるので、
Createのほう、選んでください。

そしたら、プロジェクト名とパスを決めろってダイアログ出ます。

image

ポート番号は、実際にローカル環境で実験を行う場合の接続先になります。
ここで指定された番号(defaultだと8000かな?)を使ってる場合は、別の値にします。

んで、プロジェクトを作ると、ベースは全部作ってくれます(hello worldを作ってくれます)

フォルダの中には

  • app.yaml (どこにアクセスしたら、何を呼び出す?っていう設定の書いたてあるファイル)
  • index.yaml (いじらない・・・むしろいじったことがない)
  • main.py (app.yaml の設定に使われていて、実際に呼び出されるスクリプト)

が出来上がります。

今度はさっきメモったIDを、app.yaml に設定します。

image

を押しまして、テキストエディタでapp.yamlを開いてくれます。
(テキストエディタは、デフォルトがワードパッドで、上部メニューの、edit -> prefarences... から変更できます。)

image

applicationのところを、さっきメモしたアプリケーションの名前に設定します

では、実際にデプロイして、Web上で動かしましょ。

右端の2つのボタンが、デプロイ(サーバーに反映させる)と管理ページ(Dashboard)のボタンです。

image 

まず、左のDeployを押しましょう。

image

こんな画面がでてきますので、gmailのアドレスとパスワードを突っ込んでOK

複数プロジェクトを作ってる場合は、Projectのところにプロジェクト名が出てますのでちゃんと確認しましょう
ちなみに、プロジェクトの名前が並んでるリストボックスで選択されているものがカレントになります。

(決して、いまつくったプロジェクトをデプロイしようとしてとおるぼっとをデプロイした
なんてことはありません、ええ、断じてありまsん)

次に、右側のDashboardを押しましょう。

そうすると、ブラウザに管理ページが表示されます。

左側のメニューから、Application Settings を選択すると
Application Identifier に、URLがあるので、そこのアドレスにアクセスします

image

左下のところと、右側ののアプリケーションのところです。

実際に、表示されているURLにアクセスすると、

「Hello world!」が表示され、スクリプトが動作したことを確認できます。

次に、Twitterやら、テストやらに特化した話を少し書こうと思います。