last.fm のラジオ再生のための Ruby ライブラリを作ってみた

以前のブログの記事で、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 ライブラリを公開したの初めてですが、インストーラーとかみんなどうしてるんでしょうかね。

WordPress にコードハイライト機能インストール

前の記事で code タグ使って書いてみたもののさっぱりだった...なので,コードのシンタックスハイライトやその他諸々をやってくれるプラグインが無い分けないので探してみた.

あったあった.ほかにもたくさんあるみたいですね.上から順に挑戦してみました.環境はWordPress 2.6.2 だったはず.

SyntaxHighlighter
→ 動かない.正確には,このプラグインのためのタグ[sourcecoe]を解釈してくれないため,そのまま吐き出される.
SyntaxHighlighter Plus
→ 動かない.正確には(ry
Google Code Prettify for wordpress
→ 動いた!でも,Bashのシンタックスハイライト変.「//」をコメントアウトとして解釈してる..?
WP-Syntax
→動いた!しかもBashもそれっぽくハイライトしてくれる!

ということで,WP-Syntax を使います.

Bashだと

# ついでにプラグインのインストール方法を書く
$ wget http://www.deanlee.cn/downloads/google_code_prettify_v1.1.zip
$ unzip google_code_prettify_v1.1.zip
$ mv google_code_prettify [Wordpressが設置されているディレクトリ]/wp-content/plugins

こんな感じに変換される.インストールはこの後に,管理画面から,プラグインを有効にする操作が必要になる.

前回の投稿の autopagerize の siteinfo に使うと,

{
  url: '^http://libra\.msra\.cn/(IGResult_paper|AuthorResult|authordetail|AuthorDetail|PaperResult|paperresult|ConferenceResult|JournalResult|IGResult|papercited)\.aspx.+',
  nextLink: 'id("pageLst_next")',
  pageElement: 'id("paperRes authorRes confRes jourRes igRes paperList")',
  exampleUrl: 'http://libra.msra.cn/paperresult.aspx?query=association+rules',
}

こんな感じ.あまりサンプルになってないですね.

書き方は <pre lang=”SOME_LANGAGE”>…</pre> でくくればよい感じ.本当は,pre タグで括って例示したかったんだけどどうやら,pre タグの中に今回の記述を入れると正しく動作しない様子.

シンタックスハイライトに対応しているのは(SOME_LANGAGE に入れられるのは)現在のところ以下の言語.

abap, actionscript, actionscript3, ada, apache, applescript, aptsources, asm, asp, autoit, bash, blitzbasic, bnf, boo, c, cmac, caddcl, cadlisp, cil, cfdg, cfm, cobol, cpp-qt, cpp, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, bnuplot, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, klonec, klonecpp, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, ocaml, oobas, oracle8, pascal, per, pic16, perl, php-brief, php, plsql, povray, powershell, progress, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, typoscript, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xorg_conf, xpp, z80

おおいなー

Libra の siteinfo を AutoPagerize の wedata に登録

Libra の siteinfo を AutoPagerize の wedata に登録してみた.たぶん Libra 内で対応漏れページがあると思うけれど,とりあえず目立つところと,よく使うページに対応しておいた.wordpress の対応を見てみたいので siteinfo を貼り付けてみる.

{
    url:          '^http://libra\.msra\.cn/(IGResult_paper|AuthorResult|authordetail|AuthorDetail|PaperResult|paperresult|ConferenceResult|JournalResult|IGResult|papercited)\.aspx.+',
    nextLink:     'id("pageLst_next")',
    pageElement:  'id("paperRes authorRes confRes jourRes igRes paperList")',
    exampleUrl:   'http://libra.msra.cn/paperresult.aspx?query=association+rules',
}

WordPress の諸設定

少し弄った。

  • 投稿するときにユーザ名が admin になるの気に入らないので、ユーザ登録して “管理者” に設定して登録以後 admin 使わない予定
  • テンプレートを Blank WordPress Themes から頂く。以降これを改造していく。

さーCCSと戦うぞー

テンプレート変更

とりあえず http://burnfield.com/martin/ で配布してるテンプレート採用。
ほんとは「blank theme wordpress」あたりでググって適当なの見つけてCCS弄るってのでも良かったんだけど、手間掛かりすぎるから後日。

さくらインターネットサーバに WordPress 設置

凄い簡単だった。拍子抜け。

解凍ファイル置いて、ブラウザから index.php にアクセス → 指示に従う → 終了

さくらインターネットサーバにインストールするさいの注意点って言ったら、データベースのホスト名が “localhost” じゃない点かな。 “mysql**.sakura.ne.jp” だからね。