クローズなTwitterクローン用のBOT例
最近、私の会社の中でTwitterクローンのJiskoが流行っていて、みんなでログインして適当な事を言って遊んでます。その中の利用者の一人が「業務情報に関連するニュースを発言するBOTを作ろう」と真面目な発言をしてたので、僕も見習って前に見たこんなBOTを作ってみようと思いました。
Jisko上で発言すると、Twitterの該当アカウントの最後の発言を取得し、Jisko-APIを使って発言するだけの非生産的なBOTです。これで誰かが遅刻したりした時にTwitterで何言ってるのか見てみよう、と思います。
以下、そのソースコード(Perl)です。"botuser:twitter-id"と発言すると、該当アカウントの最新発言を取得してきます。
#!/usr/bin/perl use strict; use XML::FeedPP; use HTML::Entities; use XML::Simple; use Data::Dumper; while (1){ my $twid; my $twn; # 命令を待ち受けるループ while (1){ my $parser1 = XML::FeedPP->new('http://jisko-server/statuses/public_timeline.rss'); my $item1 = $parser1->get_item(0); my $string1 = HTML::Entities::decode($item1->title()); my $i1 = index($string1, ': '); $string1 = substr($string1, $i1+2, length($string1)); $i1 = index($string1, 'botuser:'); if ($i1 == 0){ $string1 = substr($string1, 8, length($string1)); $twid = substr($string1, 1, length($string1)); last; } sleep 60; } $twn = 1; # twitterからデータを取得 my $xmlurl = "http://twitter.com/statuses/user_timeline/".$twid.".xml"; my $ret = system("wget -O tmp.xml ".$xmlurl); if ($ret != 0){ # twitter-idがない system("curl -u botuser:5e7a4b051225b38a -d status=\"そんなIDは無いです\" http://jisko-server/statuses/update.xml"); next; } if ($twn >= 3){ # 引数多い system("curl -u botuser:5e7a4b051225b38a -d status=\"引数多いです\" http://jisko-server/statuses/update.xml"); next; } # 書き込む部分 my $parser2 = XML::Simple->new()->XMLin('tmp.xml'); my @entries_id; my $id; my $xx = 0; @entries_id = sort {$b cmp $a} keys %{$parser2->{status}}; foreach $id (@entries_id) { if ($xx < $twn){ # statuses->status[n]->text # 書き込み my $string2 = "@".$twid." speech : ".$parser2->{status}->{$id}->{text}; $string2 = "curl -u botuser:5e7a4b051225b38a -d status=\"".$string2."\" http://jisko-server/statuses/update.xml"; system($string2); }else{ last; } $xx++; } }
仕組み自体は超単純だけど、60行程度で作れてしまうのは流石Perlだなと思いました。