ネットランキングに使う Perl スクリプトを書きました。

作ったiアプリにネットランキングの機能をつけたいなぁと思ったとき、検索しても簡単に使えそうなスクリプトが見つからなかったので、Perlのクラスの書き方の勉強ついでに書いてみました。

といっても、いつものごとく最低限の機能しかありませんので、Perlの勉強とか面倒だけど、とりあえずネットランキングを使いたいんだ!という方くらいにしか需要はないかもしれません。

このスクリプトの使い方。

新規にネットランキングに登録する場合は↓こんな感じです。

#!/usr/local/bin/perl

use NetRanking::Manager;
use NetRanking::User;

# データ受け取り
my $data;
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
# ゲーム識別番号&スコア&名前
# こんな感じで&で区切られたデータとします。
my ($game,$score,$name) = split(/&/, $data);

# ランキング管理クラス
my $ranking = new NetRanking::Manager($game);

# ランキングのデータを読み出します。
$ranking->read_file;

# 送られてきたデータを格納します。
my $newuser = new NetRanking::User($name,$score);
# 登録します。(順位を0から始まる数値で返すので 1 を足してます。)
my $rank = $ranking->entry($newuser) + 1;
# 全体の登録者数取得します。
my $entries = $ranking->get_entries;

# 表示形式は適当に変更してください。
print "あなたは全登録者$entries人中$rank位の成績でした。";

# 現在のランキングを保存します。
$ranking->write_file;

ネットランキングのデータを閲覧する場合は↓こんな感じです。

#!/usr/local/bin/perl

use NetRanking::Manager;
use NetRanking::User;

# 0番目のデータを読み込みます。
my $game = 0;

# ランキング管理クラス
my $ranking = new NetRanking::Manager($game);

# 10位から50位までの順位をファイルから読み込みます。
# この関数は読み込めた数を返すので取得しておきます。
my $min = 10-1, my $max = 50;
$max = $ranking->create_data_from_file($min,$max);

for(my $i = 0; $i < $max; ++$i){
    my $user = $ranking->get($i);
    # $user->{name}で名前、$user->{score}でスコアを取得します。
    # 表示形式は適当に変更してください。
    printf("%3d位 %10s %10d", ($min+$i+1), $user->{name}, $user->{score});
}

ソースコードはこちら。
ZIPダウンロード