Last.fmで遊ぶ(その1)
Perlの話題が出たので勢いでそのまま続けてみる。
Last.fmリニューアル後、様々なデータがRSS等で提供されているのですが*1、Audioscrobblerのwikiページ*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
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
左の数字は何人の結果と一致しているか=4なら4人ともお気に入りって事です。長くなるので3以下は割愛。
(ちなみにデータは〜50位までの結果を集計)
なんだかんだで(?)みんなモー娘。を聴いてる罠。
SweetSやドリを初め、エイベ陣が多いかも。うん、なかなか面白い結果になりますた。
せっかくならCGIでフォームを用意して、任意のユーザで比較出来るようにしたいなぁ、なんて。
という訳で今回はこの辺で。