次に、ボットの振る舞いを作成します。これがいわば、ボットのアイデンティティであり本体になります。
振る舞いは幾つでも設定できますが、なるべくひとつの「人格」をひとつのクラスで表現した方がわかりやすいと思います。
ここでは例として、次のような振る舞いをするボットを作ってみます。
全く無意味ですが、機械翻訳のままならなさを軽く楽しむだけのサンプルです。
名前は j2e2j とつけました。そのまま、“Japanese to English to Japanese” ということです。
TuiBotter_Eventsから、「フォローされた」イベントを選んで実装してやります。
class TuiBotter_j2e2j implements TuiBotter_Event_BeFollowed
{
public function eventBeFollowed(Tuitter_User $user, Tuitter $tuitter)
{
}
}
これで、このアカウントがフォローされた場合に、eventBeFollowed という関数が呼び出されるようになります。引数として渡される $user は、フォローしてきたユーザを表すオブジェクト。2番目の $tuitter は Tuitter オブジェクトです。
ここで行いたいことは「フォローし返す」なので、ユーザを既にフォロー中かどうかを確認し、まだであればフォローするように記述します。
class TuiBotter_j2e2j implements TuiBotter_Event_BeFollowed
{
public function eventBeFollowed(Tuitter_User $user, Tuitter $tuitter)
{
if(!$user->isFollowing())
$user->follow();
}
}
この部分の説明は、本題とは異なるので割愛します。Google Translation API を利用しています。
private static function _translate($text, $from, $to)
{
$res = '';
$url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='.urlencode($text).'&langpair='.$from.'%7C'.$to;
if($trans_json = @file_get_contents($url)){
$trans_json = mb_convert_encoding($trans_json, 'utf-8', 'auto');
$trans_data = json_decode($trans_json);
if(isset($trans_data->responseData->translatedText)){
$res = $trans_data->responseData->translatedText;
}
}
return $res;
}
イベント BeMentioned もしくは BeReplied を用います。ここでは BeMentioned を使うことにします。
該当するイベント用のインターフェースを、追加します。
class TuiBotter_j2e2j implements TuiBotter_Event_BeFollowed, TuiBotter_Event_BeMentioned
{
public function eventBeFollowed(Tuitter_User $user, Tuitter $tuitter)
{
if(!$user->isFollowing())
$user->follow();
}
public function eventBeMentioned(Tuitter_Tweet $tweet, Tuitter $tuitter)
{
// ここに処理を追加
}
}
第1引数が、今度は呟きになっています。先程作った関数を使用して内容を翻訳し、呟くには次のようにします。
$text = $tweet->text;
$en = self::_translate($text, 'ja', 'en'); // 日本語→英語
$ja = self::_translate($en, 'en', 'ja'); // 英語→日本語
// つぶやく
$tuitter->sendMessage('TT @'.$tweet->user->screen_name.': '.$ja);
“TT“は“Transfered Tweet“の略で、適当に作ってみました。つぶやきの主のスクリーン名を付与しています。
これで「ボット」が完成しました。
INIファイルに、この振る舞いを登録してやります。
[Behaviours]
TuiBotter_j2e2j = /path/to/your/project/j2e2j.php