Last.fmで遊ぶ(その1)

Perlの話題が出たので勢いでそのまま続けてみる。

Last.fmリニューアル後、様々なデータがRSS等で提供されているのですが*1Audioscrobblerwikiページ*2を見ていたら自分のblogなんかに結果を表示させる為のスクリプト(PHPが中心)がたくさん載っていたのです。
ちなみにこのダイアリーの一番上に貼り付けてあるのも、このwikiページにコードが掲載されていた、はず。


その中のリンク先に、Pythonで書かれたモノを発見*3
こちらはコマンドラインから実行するスクリプトで、引数に2人のLast.fmユーザ名を指定すると、それぞれのTop Artistsの結果をマージして共通している好みのアーティストを表示してくれるというものです。


面白そうなので早速ダウンロードし、Cygwin上で実行してみますた。
今回は勝手ながら、Last.fm登録時から高いシンクロ率を誇り、私がはてなに参加するきっかけにもなったid:MIRAさんとの相性を見てみます(wktk

cubick@P4SC ~last_fm
$ python pair.py cubick ARIM
上戸彩
松浦亜弥
河辺千恵子
大塚愛
玉置成実
島谷ひとみ
Sugar
Berryz工房
SweetS
aiko
モーニング娘。
嘉陽愛子
鈴木あみ
下川みくに
浜崎あゆみ
Dream
水樹奈々
倖田來未

ほうほう、なるほどx2。

んで、そのまま実行しててもつまらんので(わざわざ)Perlで書き直してみました。
ぶっちゃけPythonなんかいじった事無いんですが、コードの内容はフィーリングで理解出来ましたので(ぇ

”とりあえず動けばいいや”というノリで書いたので、エラーチェックとかはしておりません。
(ちなみに"HTTP::Lite"は標準モジュールでは無いので自分でインスコしてね。)

#!/usr/bin/perl

use HTTP::Lite;

my $http = new HTTP::Lite;

sub favArtistArray {
  my @fa = ();
  my $username = shift;
  my $url = "http://ws.audioscrobbler.com/1.0/user/${username}/topartists.txt";

print "url: $url\n";

  $http->reset();
  $http->add_req_header("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)");
  $req = $http->request($url)
    or die "Unable to get document!: $!";

  $data = $http->body;
  @data = split(/\n/,$data);
  foreach (@data) {
    @tmp = split(/,/,$_);
    push(@fa, $tmp[2]);
  }

  return @fa;
}

@res1 = &favArtistArray("$ARGV[0]");
@res2 = &favArtistArray("$ARGV[1]");

%uniq = undef;
for (@res1,@res2) {
  $uniq{$_}++;
}

foreach (sort{$uniq{$b} <=> $uniq{$a}} keys %uniq) {
  print "$uniq{$_}: $_\n" if ("$uniq{$_}" > 1);
}

まぁ、言語を翻訳しただけで出力結果は同じ訳です。
んで、このまま実行しててもつまらんのでちょっくらアレンジを加えてみる(デジャブ)。

先ほどのコードの太字部分を以下のものと置き換える。


while ( defined($user = shift(@ARGV)) ) {
  @res = ();
  @all = &favArtistArray("$user");
  push(@all,@res);
}

%uniq = undef;
for (@ll) {
  $uniq{$_}++;
}

なんてことは無い、引数に2人以上指定出来るようにして結果を全てマージするだけです。

今回はまことに勝手ながら、さきほどのMIRAさんに加え、いつもお世話になっているid:alfawingさん、id:tsucasaさんのデータとマージしてみますたm(_ _;)m


4: 浜崎あゆみ
4: モーニング娘。
4: SweetS
4: Dream

                  • -
3: 下川みくに 3: 島谷ひとみ 3: 鈴木あみ 3: 嘉陽愛子 3: 水樹奈々 3: 上戸彩 3: day after tomorrow 3: aiko 3: 玉置成実 3: Sugar 3: 三枝夕夏 IN db 3: 愛内里菜 3: 倖田來未

左の数字は何人の結果と一致しているか=4なら4人ともお気に入りって事です。長くなるので3以下は割愛。
(ちなみにデータは〜50位までの結果を集計)


なんだかんだで(?)みんなモー娘。を聴いてる罠。


SweetSやドリを初め、エイベ陣が多いかも。うん、なかなか面白い結果になりますた。
せっかくならCGIでフォームを用意して、任意のユーザで比較出来るようにしたいなぁ、なんて。


という訳で今回はこの辺で。