クローズな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だなと思いました。