簡単なTwitterのbotを作ってみようと思ったのですが、普通にperlとかで書くのもつまらないので、MTMLでボットを書けるようなプラグインを作ってみました。



右上の「Download Source」ボタンからダウンロードできます。なかなかサックリ書けたと思います。

そして、早速、占いをするボットを作ってみました。



Twitterで@mturanaiあてに投稿すると、占いらしき返事を返します。お暇な方は遊んでみてください。

以下プラグインの説明。
MTMLTwitterAPIプラグインをインストールすると、以下の二つのブロックタグが利用可能になります。


  • mt:TwitterMentions

  • mt:TwitterStatusUpdate



使用上の注意



これらのタグが動作するたび(=これらのタグが書かれたテンプレートが再構築されるたび)に、ネット経由でのAPIアクセスが発生します。そのため、通常の更新を行うサイトのテンプレートで利用する目的には向きません。最悪、致命的なパフォーマンス低下を起こし更新不能となる場合も考えられますので、十分ご理解いただいた上でご利用ください。

mt:TwitterMentions



特定ユーザーに対しての@付き発言を取得し、取得した発言の分だけ繰り返しを行うブロックタグです。
ブロック内では、各発言についての情報が以下の変数に設定されます。


  • id

  • text

  • name

  • screen_name



以下のモディファイアを指定できます。


endpoint

エンドポイントのURLを指定します。通常は指定する必要はありません。
twitterのAPI仕様が変更になった場合や、twitter互換の別サービスを利用する場合に指定すると良いと思います。

username

twitterAPIを利用するユーザーのログインネームを指定します。必須です。

password

twitterAPIを利用するユーザーのパスワードを指定します。必須です。

timeout

リクエストのタイムアウトまでの時間を設定します。デフォルトでは10秒になっています。

fatal_error

何らかの理由でリクエストが失敗した場合に再構築を終了したい場合には1を指定してください。デフォルトでは、リクエストに失敗しても致命的エラーとはならず、再構築が続行されます(エラーの記録はMTのログから確認できます。)

new_mentions_only

twitterAPIから取得したデータには、最近の(20?)件のデータが含まれています。デフォルトでは、一度でも取得した事のあるデータに関しては処理をスキップする仕様になっています。もし何らかの理由で常に(20?)件のデータの処理を行いたい場合、new_mentions_only=0を指定してください。

namespace

同一MT上で複数のTwitterMentionsタグを運用しており、上記所得済みデータの判定を使い分けたい場合に指定します。




mt:TwitterStatusUpdate



Twitterに対して発言を行うブロックタグです。mt:TwitterStatusUpdateタグで囲まれた内容の再構築結果をTwitterにポストします。


endpoint

エンドポイントのURLを指定します。通常は指定する必要はありません。
twitterのAPI仕様が変更になった場合や、twitter互換の別サービスを利用する場合に指定すると良いと思います。

username

twitterAPIを利用するユーザーのログインネームを指定します。必須です。

password

twitterAPIを利用するユーザーのパスワードを指定します。必須です。

timeout

リクエストのタイムアウトまでの時間を設定します。デフォルトでは10秒になっています。

fatal_error

何らかの理由でリクエストが失敗した場合に再構築を終了したい場合には1を指定してください。デフォルトでは、リクエストに失敗しても致命的エラーとはならず、再構築が続行されます(エラーの記録はMTのログから確認できます。)



使い方



ブログのメインページにTwitterStatusUpdateを設置して再構築頻度を観察するという使い方もあるかと思いますが、やっぱりボットを作るのが一番の醍醐味かと思います。

以下は、実際に@mturanaiを運用しているテンプレートです。



どっさりと配列を用意した上で、ランダムに配列の中身を取り出して返信しています。
(MTのデフォルトでは乱数を所得するタグはありませんが、twitterの更新速度が充分速いので、twitterの発言idを乱数として利用しています。)

実際にボットとして運用するために、ローカルマシン上で動作しているMTにテンプレートを作成しておき、cronで定期的に再構築を行っています。

*/2 * * * * cd /Users/aklaswad/Sites/cgi-bin/greyhound; ./tools/mt-tmpl-test -b=2 -t=186


enjoy!