2008 . 01 . 05

Last.fmの非公式APIを利用してみる

最大の音楽系SNSであるLast.fmのネットラジオをもっとシンプルにそして手軽に使えたら、というような考えの元、標準で配布されている専用プレイヤーを使わず、普段使い慣れたプレイヤーでLast.fmラジオを再生させる方法を以前取り上げました 。[ Last.fmをWinampで聞く方法 ]

そこで紹介した Last.fm (Audioscrobbler) のAPIが昨年、プロトコルバージョン1.2にバージョンアップしたのに伴い、非公式のAPIがいくつか追加されました。

その中でも最も興味深いのが、ラジオのプレイリストファイルが取得できるようになったことです。
このファイルはAudioscrobblerで取得できる様々なデータファイルの類とは異なり、再生曲のストリームURLの情報が含まれる、XSPF形式のプレイリストファイルです。

今までのクライアント(プレーヤー)で受信するストリーム(再生曲)は多くのネットラジオで配信されているような、曲間に短い信号(sync)が入った一繋がりのファイルで、クライアントはこの信号に合わせて情報の入れ替えを行っていました。
しかし、新しいAPIではプレイリストから個々のストリームとその曲情報が所得できるため、より容易に開発が行えるようになりました。

プレイリストファイルの取得

それでは実際の手順を説明していきましょう。
まずはセッション番号の取得からですが、これは先のエントリーで説明したものと同様です。
http://ws.audioscrobbler.com/radio/handshake.php?version=1.1.1&platform=linux&username=ユーザー名&passwordmd5=パスワード&debug=0
ユーザー名とパスワードを指定して上のURLにアクセスすると、次のようなレスポンスが帰ってきます。(ユーザー名とパスワードが無効の場合はエラーになります)
パスワードはRednoizeなどでMD5に変換済みのものとします。
session=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
stream_url=http://streamer2.last.fm:80/last.mp3?Session=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
subscriber=0
framehack=0
base_url=ws.audioscrobbler.com
base_path=/radio
この中のsession=に続く文字列があなたのセッション番号です。(この番号は不定期で変更されることがあります

そして、このセッション番号を元に、次のURLにアクセスすると以下のようなプレイリストが取得できます。
http://ws.audioscrobbler.com/radio/xspf.php?sk=セッション番号&discovery=0&desktop=1.3.1.1
(上のパラメータのうち、discovery=はディスカバリーモードで、0はオフ、1はオンになります。)

プレイリストファイルについて

--Playlist Sample--
<playlist version="1" xmlns:lastfm="http://www.audioscrobbler.net/dtd/xspf-lastfm">
<title>+j-pop+Tag+Radio</title>
<creator>Last.fm</creator>
<link rel="http://www.last.fm/skipsLeft">6</link>
<trackList>
    <track>
        <location>http://kingpin6.last.fm/user/2617d14f03a801b785681ca81dbc1312.mp3</location>
        <title>Onaji yoru</title>
        <id>8910067</id>
        <album>Muzai Moratorium</album>
        <creator>椎名林檎</creator>
        <duration>218000</duration>
        <image>http://cdn.last.fm/coverart/130x130/1416504.jpg</image>
        <lastfm:trackauth>c4c9f</lastfm:trackauth>
        <lastfm:albumId>1416504</lastfm:albumId>
        <lastfm:artistId>1257158</lastfm:artistId>        
                <link rel="http://www.last.fm/artistpage">http://www.last.fm/music/%E6%A4%8E%E5%90%8D%E6%9E%97%E6%AA%8E</link>
        <link rel="http://www.last.fm/albumpage">http://www.last.fm/music/%E6%A4%8E%E5%90%8D%E6%9E%97%E6%AA%8E/Muzai+Moratorium</link>
        <link rel="http://www.last.fm/trackpage">http://www.last.fm/music/%E6%A4%8E%E5%90%8D%E6%9E%97%E6%AA%8E/_/Onaji+yoru</link>
        <link rel="http://www.last.fm/buyTrackURL"></link>
        <link rel="http://www.last.fm/buyAlbumURL">http://www.last.fm/affiliate_sendto.php?link=catch&amp;prod=1416504&amp;pos=65633c2c6d40fbe9c8bf27ce82d2ca5a</link>
        <link rel="http://www.last.fm/freeTrackURL"></link>
    </track>
     .
     .
</trackList>
</playlist>

XSPF形式のプレイリストファイルの各要素
  • <title> - ラジオステーション名
  • <creator> - プレイリストの製作者
  • <track><location> - 再生曲(MP3ファイル)のURL
  • <track><title> - 再生曲のタイトル
  • <track><id> - 再生曲のID
  • <track><album> - 再生曲の収録アルバム
  • <track><creator> - アーティスト名
  • <track><duration> - 演奏時間(ミリ秒)
  • <track><image> - アルバムカバーの画像
  • <track><lastfm:trackauth> - リコメンデーション キー
  • <track><lastfm:albumId> - アルバムID
  • <track><lastfm:artistId> - アーティストID
  • <track><link rel=...> - 関連ページへのリンク...etc

XSPFはXMLなので、例えば次のようなスタイルシートを適用することでM3UやHTMLなどに変換することもできます。


また、XSPFからHTMLに変換してくれるサイトというものも存在します。こちらはAPIが用意されていて、指定されたURLにプレイリストのURLを付け足してリクエストすれば、ダイレクトに出力されるので便利です。


(もっとも、閲覧することが最終目的のファイルではないので、このような変換に意味があるかはわかれませんが...)

実際に使用してみる

テストとして、今回はXSPFプレイリスト対応で汎用性に優れた JW MP3 Player に上のプレイリストをソースとして読み込ませ、HTMLページ上で動作させてみました。


今回、とくに JW MP3 Player に関する設定方法の説明はいたしませんが、1つだけ注意されたいのは、プレイリストに指定するURL文字列はUTF-8でエンコードが必要ということ、特にここで云うなら、「?」は「%3f」に、「=」は「%3d」に、「&」は「%26」にそれぞれ置き換えないとエラーになります。
[ 警告 ]
上のような使用は、ユーザー名とパスワードを公開することにつながるため、実際には公開ページ上での利用は避けましょう。[ 追記 ]

さて、このプレイリストによるストリームにはいくつかの特徴があります。

  1. 一度受信した曲は再度受信できないことです。
    これは、おそらく、1つストリームURLに一度リクエストを受けると、その時点でそのURLは無効になるようです。
  2. 1プレイリスト中、複数の曲の受信(ダウンロード)はできません。
  3. 受信(ダウンロード)の際の転送速度は、通常のストリーミング再生程度に抑えられています。
  4. プレイリストの過剰要求があった場合、サーバー側で一定時間使用不可の制限が掛けられるようです。

このように、XSPFのプレイリストという比較的オープンな形で扱いやすいAPIを提供していながらも、ラジオ的な利用以外には一定の制限を設けている所は、やはり大手らしさを感じさせます。(他のありがちな脆弱でダウンロード天国なプレイリスト共有サイトとは違い...)

活用方法を考えてみる

今回は取得したもの(プレイリスト)に全く手を加えずに利用できることとして、上のような実装例を挙げましたが、単にラジオウィジェットとして考えた場合でも、当然このままの状態ではちょっと物足りません。
また、WINAMPなど他のプレーヤーで聞くことを目的にした場合、M3Uに変換すれば一応そのまま再生はできますが、曲名やアーティスト名の表示のことや、あるいは通常ラジオのようにエンドレスで再生させることを求めると、やはり実用的な線までもっていくには、何らかのプログラミングを施す必要があると思います。

今までLast.fmを利用したマッシュアップサービスはいろいろありましたが、それらはどれも曲情報や類似アーティストの情報を入手することに終始していましたが、今回のストリームそのものを扱えるAPIにより、もっと斬新なサービスが出てくるかもしれません。

また、ローカルアプリに関しても、今回のAPIを使用すれば、かなり容易に専用プレーヤーの開発が行えるはずで、デスクトップで使うウィジェット、ガジェットの類いも多く出てくるような予感がします。

ちなみに、以前紹介した TheLastRipper というラジオレコーダーがありましたが、リリース当時あまり満足の行くレベルではなかったものの、今回の新APIに移行したことによって、一挙にパワーアップしたようです。

今回の情報は、主に開発者向けの情報ですが、アイデアとある程度のスキルがある方は、いろいろと挑戦されてみてはいかがでしょうか。


[ ご注意 ]
  • Last.fmは会員サービスなので、あらかじめアカウントを作成しておく必要があります。(無料)
  • この情報は非公式なもので、一切の保証がないため、そのことをよく留意した上で利用してください。


[ 追記 2008.01.06 ]
  • このプレイリストはおそらく、ユーザー本人以外の利用を想定していないと思われます。よって、上記使用例のように、公開ページ内での不特定多数からの利用は相応しくないようです。


[参考資料]