<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bluegold &#187; last.fm</title>
	<atom:link href="http://blog.bluegold.me/tag/lastfm/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bluegold.me</link>
	<description>OpenSolaris と MacBook で自宅ネットワークを構築するメモ</description>
	<lastBuildDate>Thu, 26 Aug 2010 14:38:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>last.fm のプレイリストをブログに表示するには</title>
		<link>http://blog.bluegold.me/2008/12/lastfm-playlist/</link>
		<comments>http://blog.bluegold.me/2008/12/lastfm-playlist/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:53:57 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[last.fm]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=117</guid>
		<description><![CDATA[last.fm のプレイリストをブログに表示するために書いた Ruby プログラムの説明]]></description>
			<content:encoded><![CDATA[<p><img src="http://wp-cdn.bluegold.me/2008/12/last-fm-audioscrobbler-logo.jpg" width="150" height="128" alt="last.fm" class="title_img" /></p>
<p>
<a href="http://higash.net" title="HiGash.Net">HiGash.Net</a>の中の人にWordPressのキレイなテーマを作ってもらったので、<a href="http://last.fm" title="last.fm">last.fm</a>の「最近聴いたトラック」を表示するプログラムを作りました。
</p>
<p>
last.fm の<a href="http://www.lastfm.jp/widgets/chart" title="last.fm">公式のウィジェット</a>を使用すれば簡単にブログに貼付ける事ができますが、公式の物はFlashを使っていて自分でデザインを変更できないので、自分で作ってみました。last.fmは<a href="http://www.audioscrobbler.net/">audioscrobbler</a>というAPIを用意しているので、このAPI経由で情報を取得します。今回は Ruby の <a href="http://scrobbler.rubyforge.org/">scrobbler gem</a>を利用しています。
</p>
<p><span id="more-117"></span>
<p>
scrobbler gem のインストールは以下のように簡単です。</p>
<pre class="brush: ruby;">
$ sudo gem install scrobbler
</pre>
</p>
<p>
<a href="http://scrobbler.rubyforge.org/docs/">scrobblerのドキュメント</a>を見ながら、プログラムを書いていきます。<br />
手順はだいたい次のようになります。</p>
<ol>
<li>last.fmのユーザの「最近聴いたトラック」の一覧を取得する</li>
<li>トラックのアルバムアートワークを取得する</li>
</ol>
<h2>last.fmのユーザの「最近聴いたトラック」の一覧を取得する</h2>
<p>
scrobblerライブラリを使うと簡単で、last.fmのユーザ名を指定して<a href="http://scrobbler.rubyforge.org/docs/classes/Scrobbler/User.html">Scrobbler::User</a>のオブジェクトを作成するだけです。</p>
<pre class="brush: ruby;">
user = Scrobbler::User.new('bluegold')
recent_tracks = user.recent_tracks
</pre>
<p>Scrobbler::User#recent_tracks の戻り値は<a href="http://scrobbler.rubyforge.org/docs/classes/Scrobbler/Track.html">Scrobbler::Track</a>のArrayになっています。Scrobbler::Track は再生した曲の情報を表すオブジェクトで、曲のアルバム名やアーチスト名、last.fmのURLなどの情報を保持しています。last.fmの URLは、たとえば Sheryl Crow の Real Goneの場合は<a href="http://www.lastfm.jp/music/Sheryl+Crow/_/Real+Gone">このページ</a>の事です。
</p>
<p>最近再生したトラックを表示するだけなら、ここまでで終わりです。</p>
<h2>トラックのアルバムアートワークを取得する</h2>
<p>
Scrobbler::Track のオブジェクトにもimageやthumbnailなどのattributeは存在するのですが、これらは&#8217;only seems to be used on top tracks for tag&#8217;とのことでScrobbler::User#recent_tracksでは値が設定されていません。そこでトラックのアーチスト名とアルバム名から<a href="http://scrobbler.rubyforge.org/docs/classes/Scrobbler/Album.html">Scrobbler::Album</a>のオブジェクトを作成して、そこからアルバムアートワークを取得します。Scrobbler#Trackのオブジェクトから得られるアルバム名は（アーチスト名も？）エスケープされていて、そのままでは正しくデータを取得出来ない場合があったので、CGI#unescapeHTML を利用して元に戻しています。</p>
<pre class="brush: ruby;">
track = recent_tracks.first
album = Scrobbler::Album.new(
  track.artist,
  CGI.unescapeHTML(track.albumname)
)
image_url = album.image(:small)
</pre>
<p>上のコードで1曲分のアートワーク画像へのURLが得られるので、表示したい曲数分繰り返します。
</p>
<p>あとは好きなようにHTMLを書いてスタイルを設定するだけです。完成した結果はこのブログのフッターに表示されている通りです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/12/lastfm-playlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
