GyaASEをデスクトップに表示させるためのスクリプト
UT3のように短い間しかサーバに人がいないゲームの場合、参加するタイミングを逃してしまうことがあります。というわけで見逃さないようデスクトップにサーバの情報を表示させるPerlスクリプト書いてみた。(FPSサーバブラウザのGyaASE APIを使わせてもらってます。)
自分で自分を褒めてあげたいですね!こいつのお陰で「えーやってたのぉ〜!」って一人寂しく呟く回数が減りました:)
実は前にjavascript+HTAで似たようなものを書いてて、今回はそれをperlでperlっぽく書き直しただけ。新たに追加したのは鯖の中の人も見えるようにしたくらい。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ならSamurize、LinuxならConkyで多分同じことが出来ます。