last.fm のラジオ再生のための Ruby ライブラリを作ってみた
by k-ui ~ 10月 19th, 2008. Category: ほげほげ.以前のブログの記事で、Google Code 上の thelastripper にて公開されているドキュメント (LastFM12UnofficialDocumentation) の簡単な説明と、スクリプトを公開しました。
Linux を NAS 兼メディアセンターとして使っているので、Linux で X 立ち上げずに last.fm ラジオの再生できたらなぁと思ってたりしてました。
ということで、LastFM12UnofficialDocumentationを元に、last.fm ラジオの再生の助けになるライブラリを作ってみました。
lastfmradio-0.1.tar.gz のダウンロード
本当は、RubyForge なり GitHub になり置いた方が良いかもしれないんですが、どっちがいいんですかねぇ。
同梱されているドキュメント。。英語ですがかなり怪しいですね。
使い方
メソッドごとに説明をするよりも、サンプルコードの方がどんな感じかわかりやすいと思うので、コードで二つほど例示します。
基本的に、ハンドシェイク → ラジオ局の選択 → トラックの取得 → 処理 の流れは変わりません。省かれているように見える場合は、内部で処理をしています。
一番基本的な例
mpg123 を使ってラジオ再生する
#! ruby -Ku # last.fm 上でのアカウント名とパスワード user_name = 'USER_NAME' password = 'PASSWORD' # 内部ではハンドシェイクをしている lastfm = LastfmRadio.new(user_name, password) # electoronic タグラジオに合わせる lastfm.adjust_station('tag', 'electoronic') loop do # トラック情報の取得 # クラス Track のインスタンスの Array を返す tracks = lastfm.get_tracks tracks.each do |track| # トラック情報の表示 puts "-"*75 puts "artist: #{track.artist}" puts "title: #{track.title}" puts "album: #{track.album}" puts "length: #{track.length/1000}[sec]" # mpg123 を使って現在のトラック再生 `mpg123 -q #{track.location}` end end
LastfmRadio#get_tracks メソッドは要注意。返してくれるトラックの数はまちまちです。ラジオ局によっては、 1 つも取得できない時があります。これは、引数に整数を与えることで解決ができます。たとえば引数に 2 をあたえると、2 個以上のトラックを取得するまでリターンしなくなります。
LastfmRadio#adjust_station メソッドは、第一引数に以下のようなシンボル or 文字列をとります。
- tag または globaltags
- 第二引数で指定されるタグラジオを選択
- artist
- 第二引数で指定されるアーティストに似たラジオを選択
- personal
- 第二引数で指定されるアカウントのパーソナルラジオを選択
- recommended
- 第二引数で指定されるアカウントのおすすめラジオを選択
- neighbours
- 第二引数で指定されるアカウントのお隣さんのラジオを選択(日本語。。。)
- group
- 第二引数で指定されるグループのラジオを選択
一番簡単な例
wget を使ってラジオから流れてくる曲をダウンロード
require "lastfmradio" hash = { :user_name => "SOME_USER", :password => "PASSWORD", :station => ["tag","electoro"], # adjust_station の引数と同じ :min_num_tracks => 2, # 2 個以上のトラックを必ず取得(optional) #:debug => true # デバグモード(optional) } loop do # ハンドシェイク、局の選択、トラックの取得をする # 二回め以降は、同じユーザ名・局の場合は、ハンドシェイク、局の選択はしない。 tracks = LastfmRadio.get_tracks(hash) tracks.each do |track| puts "-"*25 + " " + Time.now.to_s + " " + "-"*25 puts "artist: #{track.artist}" puts "title: #{track.title}" puts "album: #{track.album}" puts "length: #{track.length/1000}[sec]" `mpg123 -q #{track.location}` end end
こんな感じで使えます。
しかしここまで書いたら、アプリケーションとして公開した方がよかったかな。。。気にしない。。。。ruby ライブラリを公開したの初めてですが、インストーラーとかみんなどうしてるんでしょうかね。
面白そうなスクリプトですね。
インターネットラジオの録音でいろいろ調べていて、このブログにたどり着きました。