Twitterボット作成手順
今更感満載ですが、PHPの勉強がてらTwitterボットをつくってみたときのメモが出てきたので、キャプチャとりなおしてまとめました。
全体的な手順としては、こんな感じです。
日曜コーディングにちょうどいいボリュームじゃないでしょうか。
アカウントの取得
まずはボット用のツイッターアカウントを取得します。
http://twitter.com/
アカウントの作成にはメールアドレスを用意する必要がありますが
Gmailのアカウントを持っていたら、エイリアスを使うのがおすすめです。
エイリアスというのは、アカウント名と任意の文字列を+記号で連結した
[Gmailアカウント]+[好きな文字列]@gmail.com という形式で
特別な設定なしにアドレスを増やせて、受信は既存アカウントでそのまま行えます。
yourname@gmail.com というアドレスならば
yourname+twitter_bot@gmail.com という感じで作成できるわけです。
こうしておけば、Gmailのフィルタで、ボットに関するメールを抽出できたりと管理上も便利です。
これでもってアカウントを作成してTwitterから認証メールがきたら、APIキーを取得します。
APIキー(OAuth)の取得
ボットのアカウントでログインして [Create a new application]ボタンで作成画面に移動します。
"My applications"の各項目を埋めていきます。
Name
アプリケーション名(ツイートの「○○から」の部分)
Description
10文字以上の説明文。
Website
アプリケーションの説明ページのURL
Callback URL
登録後に転送するURLを設定しますが、今回は使用しないので空欄。
規約の内容を確認して問題なければ、[Create your Twitter application]で登録を完了させます。
アプリケーションページが作成されたら、まずは画面上部の[Settings]タブを開きます。
ツイートの投稿を行うのでApplication Typeから、"Read and Write"を選びます。
設定内容を[Update this Twitter application's settings]ボタンで更新します。
もといたタブ[Details]に戻って、OAuth settingsの項目にあるAccess levelが "Read and Write"になっているのを確認したら、
Consumer keyとConsumer secretを控えます。
続いて、最下部にある[Create my access token]ボタンでアクセストークンを発行します。
トークンキーがすぐに表示されない場合がありますが、リロードするかしばらくしてからアクセスすると表示されてると思います。
正常に Access TokenとAccess Token Secretが表示されたら、これも控えます。
次の4つがそろったら、ツイッター上での作業は終了です。
コーディング
「ファイルを実行するごとに、ツイートする」というがスクリプトの大まかな流れです。
スクリプトからツイートさせるには、OAuth認証を行うのですが、これはライブラリにまかせます。
おそらく一番手軽に使えるのが、これだと思います。
https://github.com/abraham/twitteroauth
このライブラリに、先ほど取得した4つのキーを渡して、リクエストメソッドを実行すると
認証からTwitter APIに投げるとこまでやってくれます。便利!
OAuthライブラリを利用する Botクラスファイルと、このクラスを使用する app.php とにファイルを分けます。
ファイル構成はこんな感じに。
OAuth.phpOAuth ライブラリ TwitterOAuth.php ライブラリ Bot.php ツイート処理を行うボットクラス app.php 定期実行させるファイル
勉強もかねて無駄にクラス化された Botクラスがこちら。
<?php class Bot { /** * @var TwitterOAuth */ private $_api; /** * 初期化 * * @param type $twitterOAuth OAuthクラス */ function __construct($twitterOAuth) { $this->_api = $twitterOAuth; } /** * ツイートを投稿 * * @param string $tweetText ツイートテキスト * @param string $print 結果の出力 */ public function postTweet($tweetText, $print = true) { $result = $this->_api->OAuthRequest( "http://api.twitter.com/1/statuses/update.xml", "POST", array("status"=>$tweetText) ); if ($print) { print_r($result); } } } ?>
app.php
<?php require_once("Bot.php"); require_once("twitteroauth.php"); $consumer_key = "控えておいた Consumer key"; $consumer_secret = "控えておいた Consumer secret"; $access_token = "控えておいた Access Token"; $access_token_secret = "控えておいた Access Token Secret"; $bot = new Bot( new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret) ); //時刻をつぶやかせる $bot->postTweet(date("Y/m/d H:i:s")); ?>
"控えておいた〜〜" となっている箇所には、取得したAPIキーを適宜記入してください。
Mac環境であれば ターミナルで実行して動作を確認します。
cdでファイルのあるディレクトリまで移動したら次のコマンドで実行します。
$ php app.php
問題なければ、ボットアカウントのTLに時刻がツイートされてると思います。
定期処理
正常に動いたら、これを cron で定期実行させます。
私は、さくらを使ってるのでその設定例。
さくらのコントロールパネルの"CRONの設定"を開き、新規項目を追加します。
サーバーに配置した実行ファイルが app.php ならば、こんな感じなります。
コマンド:
cd /home/[アカウント]/www/[ボットまでのディレクトリ]/; /usr/local/bin/php app.php
完了通知が不要だったら末尾に " 1> /dev/null" オプションをつけます。
続いて実行間隔の設定。
月:*
日:*
時:*
分:0,15,30,45
この設定だと、15分おきに実行されるはずです。
サンプルコードのものは、ほんと最小限の機能ですので、
たとえばランダムなテキストをポストさせたり、リプライに反応させるなど
ボット機能を拡充させていくといいんじゃないでしょうか。