Twitterボット作成手順

今更感満載ですが、PHPの勉強がてらTwitterボットをつくってみたときのメモが出てきたので、キャプチャとりなおしてまとめました。
全体的な手順としては、こんな感じです。

  • ボット用のTwitterアカウントの取得
  • APIキーの取得
  • 決まった文言をツイートする仕組みをコーディング
  • これを定期的に処理するcronを設定する

日曜コーディングにちょうどいいボリュームじゃないでしょうか。

アカウントの取得

まずはボット用のツイッターアカウントを取得します。
http://twitter.com/

アカウントの作成にはメールアドレスを用意する必要がありますが
Gmailのアカウントを持っていたら、エイリアスを使うのがおすすめです。

エイリアスというのは、アカウント名と任意の文字列を+記号で連結した
[Gmailアカウント]+[好きな文字列]@gmail.com という形式で
特別な設定なしにアドレスを増やせて、受信は既存アカウントでそのまま行えます。

yourname@gmail.com というアドレスならば
yourname+twitter_bot@gmail.com という感じで作成できるわけです。

こうしておけば、Gmailのフィルタで、ボットに関するメールを抽出できたりと管理上も便利です。
これでもってアカウントを作成してTwitterから認証メールがきたら、APIキーを取得します。

APIキー(OAuth)の取得

https://dev.twitter.com/apps/

ボットのアカウントでログインして [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 keyConsumer secretを控えます。

続いて、最下部にある[Create my access token]ボタンでアクセストークンを発行します。

トークンキーがすぐに表示されない場合がありますが、リロードするかしばらくしてからアクセスすると表示されてると思います。
正常に Access TokenAccess Token Secretが表示されたら、これも控えます。

次の4つがそろったら、ツイッター上での作業は終了です。

  • Consumer key
  • Consumer secret
  • Access Token
  • Access Token Secret

コーディング

「ファイルを実行するごとに、ツイートする」というがスクリプトの大まかな流れです。
スクリプトからツイートさせるには、OAuth認証を行うのですが、これはライブラリにまかせます。

おそらく一番手軽に使えるのが、これだと思います。
https://github.com/abraham/twitteroauth

このライブラリに、先ほど取得した4つのキーを渡して、リクエストメソッドを実行すると
認証からTwitter APIに投げるとこまでやってくれます。便利!

OAuthライブラリを利用する Botクラスファイルと、このクラスを使用する app.php とにファイルを分けます。

ファイル構成はこんな感じに。

OAuth.phpOAuth	ライブラリ
TwitterOAuth.php	ライブラリ
Bot.php			ツイート処理を行うボットクラス
app.php			定期実行させるファイル

勉強もかねて無駄にクラス化された Botクラスがこちら。

Bot.php

<?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分おきに実行されるはずです。

サンプルコードのものは、ほんと最小限の機能ですので、
たとえばランダムなテキストをポストさせたり、リプライに反応させるなど
ボット機能を拡充させていくといいんじゃないでしょうか。