以前からbot作ってみたい!と思っていましたが、ようやく本当に作りました。といってもイチからプログラムを組んだわけではないので、あまり褒められたものでもないのですが。botの用途は完全に自分用です。なので今のところprotectedで運用。「反復学習を自動化したい」という思いがあり、Tumblrやはてブの過去ログを自動でポストするbotを作ってみました。
使わせていただいたのは主に以下のツール。
1はphaさんが配布している「プログラミングができなくてもTwitter botが作れる」ツールです。中身はPHPで書かれていて、今回はこちらをちょこちょこと改造して使わせてもらいました。
Tumblrからのランダムポストを実現する
Tumblrの過去ログをプログラムに漁らせてポストするので、Tumblrが提供しているAPIを使います。英語ですが説明書きはこちら。掻い摘んで言ってしまえば、以下のURLからxmlデータを取得することができます。
http://(ユーザー名).tumblr.com/api/read?type=(ポストのタイプ)&num=(取得するポストの個数)&start=(何番目のポストを取得するか)
typeにはphoto、quote、videoなどのタイプを指定できます。空ならすべてのタイプから取得するみたいです。numは取得するポストの個数、startは何番目のポストを取得してくるか。例えばtype=photo&num=1&start=20とすれば、photoの20番目のポストを1個だけ取ってくることになります。他にもGETパラメータにはいろいろ指定できるみたいですが、基本的なのはこんなところ。で、書いたのが以下のソース。
function postTumblr(){ $xml = simplexml_load_file("http://chroju.tumblr.com/api/read"); $max = (int) $xml->posts->attributes()->total; //乱数発生 $num = mt_rand(1, $max); // tublrからxml受け取り $xml2 = simplexml_load_file("http://chroju.tumblr.com/api/read?type=photo&num=1&start=".$num); $status = (String) $xml2->posts->post->attributes()->url; $status = "【ランダムTumblr】".$status; $response = $this->setUpdate(array("status"=>$status)); return $this->showResult($response); }
まずsimplexml_load_fileでxmlを読み込み、その中から総ポスト数を取得して$maxに代入しています。次に1〜$maxの範囲で乱数を発生させ、投稿するポストをランダムに決定。生成された乱数をnumに設定して、改めてxmlを呼び出しています。ポストのURLは、xmlファイルのposts->post->attributes()->urlにあるので、これを呼び出して$statusに格納。あとはEasybotterのTwitter投稿の書式に従って、Twitterに投げるだけです。結果は以下のようになります。
このソースをEasybotter.php内に書き込み、bot.phpから5回に1度の割合で呼び出しています(残り4回はpostRandomを使用)。
はてブの過去ログを自動ポストさせる
「全自動はてブ棚卸し」は、xヶ月前のはてブを取得できるツールです。rssも吐けるので、これをFeedburner経由でTwitter botに投稿させています。ポストサンプルはこんな感じ。
はい、楽チンですね。
cronを設定する
bot作成時に一番わずらわしいのがcronの設定らしいですが、これについても簡単なツールが世の中にはあったりします。GAE-Cron Clubがそれです。Google App Engine上に設置した簡易cronを無料で公開していただいているので、登録すればすぐにでもcronが使えます。すばらいいです。感謝です。ちなみにソースコードも公開されているので、自分でGAEに登録して設置しちゃうのもアリです。