読者です 読者をやめる 読者になる 読者になる

そのねこがうたうとき

物語偏愛者の詭弁と戯言

Tumblrの過去ポストをランダムにつぶやくTwitter botを作りました

ノウハウ

以前からbot作ってみたい!と思っていましたが、ようやく本当に作りました。といってもイチからプログラムを組んだわけではないので、あまり褒められたものでもないのですが。botの用途は完全に自分用です。なので今のところprotectedで運用。「反復学習を自動化したい」という思いがあり、Tumblrはてブの過去ログを自動でポストするbotを作ってみました。

使わせていただいたのは主に以下のツール。

  1. Easybotter(EasyBotter - プログラミングができなくても作れるTwitter botの作り方より)
  2. Pipes: 全自動はてブ棚卸し
  3. Google FeedBurner
  4. GAE-Cron Club

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に登録して設置しちゃうのもアリです。

完成!

以上、簡単な形でbotができちゃいました。もう一つやりたいこととして、Evernoteからの自動ランダムポストがあるのですが、これは現状難しいっぽいので実現していません。現時点では手動でEasybotterのdata.txtにコピペして回しています。なんとも悲しい。いつかなんとかして自動化させたいのですが。

@chroju_2nd(※protected運用中です)