GyaASEをデスクトップに表示させるためのスクリプト

UT3のように短い間しかサーバに人がいないゲームの場合、参加するタイミングを逃してしまうことがあります。というわけで見逃さないようデスクトップにサーバの情報を表示させるPerlスクリプト書いてみた。(FPSサーバブラウザのGyaASE APIを使わせてもらってます。)


実行結果はこんな感じ


自分で自分を褒めてあげたいですね!こいつのお陰で「えーやってたのぉ〜!」って一人寂しく呟く回数が減りました:)
実は前にjavascript+HTAで似たようなものを書いてて、今回はそれをperlperlっぽく書き直しただけ。新たに追加したのは鯖の中の人も見えるようにしたくらい。UT3のマスターサーバにバグがあって、人数表示がおかしかったりプレイヤー名が返ってこなかったりするんだけど、とりあえずそこのエラー処理は放置!よくわからないから!


以下、恥ずかしい中身

#!/usr/bin/perl                                                                                                                  

use strict;
use warnings;
use XML::Simple;
use LWP::UserAgent;

my $DOUBLE_SPACE = q{  };

# UT3はサーバが少ないからリクエスト数は15
my $api = 'http://d3.jpn.org/gyaase/gyastat.php?format=xml&max=15&start=1&game=ut3&country_code=JP';
# この辺はコピペ
my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$ua->timeout(15);
$ua->env_proxy();

my $res = $ua->get($api);
$res->is_success 
  or die "Can\'t connect to GyaASE!\n";

my $xml        = $res->content;
my $parse      = new XML::Simple(forcearray => 1);   # forcearray => 1にしないとうまくデータを取り出せない
my $data       = $parse->XMLin($xml);
my $num_of_req = $data->{totalReturned};

for (0..$num_of_req-1){
  next if ( $data -> {server} -> [$_] -> {status} ne 'UP' );

  my $server_name   = $data -> {server} -> [$_] -> {name      } -> [0];
  my $num_players   = $data -> {server} -> [$_] -> {numplayers} -> [0];
  my $max_players   = $data -> {server} -> [$_] -> {maxplayers} -> [0];

  print "<$num_players/$max_players>\t$server_name\n";

  if ($num_players > 0){
        my $count = $_;
        print "\t\t--------Players in the game--------\n";
        print "\t\t";
        for my $n (1..$num_players){
          print $data -> {server} -> [$count] -> {players} -> [0]
                      -> {player} -> [$n-1  ] -> {name   } -> [0];
          print $DOUBLE_SPACE;
          # 1行4人まで表示
          print "\n\t\t" if ( ($n % 4 == 0) && ($n != $num_players) );
        }
        print "\n\t\t-----------------------------------\n";
  }
  print "\n";
}
                                                                                                            

このスクリプトをGeekToolというソフトで90秒おきに実行して、結果をデスクトップに貼付けています。WindowsならSamurizeLinuxならConkyで多分同じことが出来ます。