HiGash.Netの中の人にWordPressのキレイなテーマを作ってもらったので、last.fmの「最近聴いたトラック」を表示するプログラムを作りました。
last.fm の公式のウィジェットを使用すれば簡単にブログに貼付ける事ができますが、公式の物はFlashを使っていて自分でデザインを変更できないので、自分で作ってみました。last.fmはaudioscrobblerというAPIを用意しているので、このAPI経由で情報を取得します。今回は Ruby の scrobbler gemを利用しています。
scrobbler gem のインストールは以下のように簡単です。
$ sudo gem install scrobbler
scrobblerのドキュメントを見ながら、プログラムを書いていきます。
手順はだいたい次のようになります。
- last.fmのユーザの「最近聴いたトラック」の一覧を取得する
- トラックのアルバムアートワークを取得する
last.fmのユーザの「最近聴いたトラック」の一覧を取得する
scrobblerライブラリを使うと簡単で、last.fmのユーザ名を指定してScrobbler::Userのオブジェクトを作成するだけです。
user = Scrobbler::User.new('bluegold') recent_tracks = user.recent_tracks
Scrobbler::User#recent_tracks の戻り値はScrobbler::TrackのArrayになっています。Scrobbler::Track は再生した曲の情報を表すオブジェクトで、曲のアルバム名やアーチスト名、last.fmのURLなどの情報を保持しています。last.fmの URLは、たとえば Sheryl Crow の Real Goneの場合はこのページの事です。
最近再生したトラックを表示するだけなら、ここまでで終わりです。
トラックのアルバムアートワークを取得する
Scrobbler::Track のオブジェクトにもimageやthumbnailなどのattributeは存在するのですが、これらは’only seems to be used on top tracks for tag’とのことでScrobbler::User#recent_tracksでは値が設定されていません。そこでトラックのアーチスト名とアルバム名からScrobbler::Albumのオブジェクトを作成して、そこからアルバムアートワークを取得します。Scrobbler#Trackのオブジェクトから得られるアルバム名は(アーチスト名も?)エスケープされていて、そのままでは正しくデータを取得出来ない場合があったので、CGI#unescapeHTML を利用して元に戻しています。
track = recent_tracks.first album = Scrobbler::Album.new( track.artist, CGI.unescapeHTML(track.albumname) ) image_url = album.image(:small)
上のコードで1曲分のアートワーク画像へのURLが得られるので、表示したい曲数分繰り返します。
あとは好きなようにHTMLを書いてスタイルを設定するだけです。完成した結果はこのブログのフッターに表示されている通りです。