Web ベースの DAAP クライアントを作ってみる
iTunes って同じネットワークの人のライブラリ見れるじゃんスゲー
↓
ふむふむ、プロトコルは DAAP っていうのか
↓
Net::DAAP::Client で Ruby で操作できるじゃん
↓
Web ベースのクライアントアプリケーションでも作ってみるか
↓
ということで作ってみた。
Windows と Net::DAAP::Client
Windows では Net::DAAP::Client を使えないらしい。
正確には daapclient が依存している digest-m4p が
Windows にインストールできない。
諦めて Ubuntu Edgy にインストールした。
DAAPの バージョン
Net::DAAP::Client を使って iTunes 7.2 にアクセスを試みるが
どうやっても 403 Forbidden ではじかれる。
どうやら DAAP にはバージョンがあって、
iTunes 7.x の DAAP のバージョンに
Net::DAAP::Client は対応していないらしい。
というか iTunes 7.x の DAAP をしゃべることができる
サードパーティ製のクライアントは現時点では存在しないらしい。
# ちなみにプロトコルを解読すると Save OurTunes というサイトから1,000ドルもらえる。
解決策としては
が考えられるが、今回は後者を選択した。
Firefly Media Server
ということで Firefly Media Server というDAAP サーバを試してみた。
もともと mt-daap という名前で公開されていたらしい。
Windows / Mac / Linux 対応。
起動してスキャンしたら iTunes から見えるようになった。
ただし、Unicode 以外のタグは文字化けする模様。
パッチがどこかにあったので当てれば直るのかもしれない(やっていない
プログラムを書く
以下の2つのファイルを作成した。
- index.rhtml
- get.rb
index.rhtml は DAAP サーバから曲の一覧を取ってきて表示するページ。
再生には XSPF Web Music Player (Flash) - Plays MP3 on your website を使用する。
get.rb は 曲のデータを DAAP サーバから取ってくる CGI。
index.rhtml - 曲を列挙してテーブルに出力。
<% require 'rubygems' require 'net/daap' daap = Net::DAAP::Client.new('DAAPSERVERNAME', :password => 'PASSWORD') %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" type="text/css" href="Styles/main.css"> <title>webTunes</title> </head> <body> <div align="center" id="main"> <h1>webTunes</h1> <table> <tr> <th>No</th> <th>Artist</th> <th>Title</th> <th>Album</th> <th>#</th> </tr> <% i = 0 daap.connect do |dsn| daap.databases.each do |db| db.songs.each do |song| %> <tr> <td style="text-align:right;"><%= i += 1 %></td> <td><%= song.artist %></td> <td><%= song.name %></td> <td><%= song.album %></td> <td> <object type="application/x-shockwave-flash" data="./Flash/musicplayer.swf?song_url=get.rb?item=<%= i %>" width="17" height="17"> </object> </td> </tr> <% end end end %> </table> </div> </body> </html>
get.rb - XSPF Web Music Player から呼ばれて"item"パラメータで与えられた曲を読んで書き出す。
#!/usr/bin/ruby require 'rubygems' require 'net/daap' require "cgi" item = CGI.new["item"] puts "Content-type: audio/mpeg;\n\n"; daap = Net::DAAP::Client.new('DAAPSERVERNAME', :password => 'PASSWORD') i = 0 daap.connect do |dsn| daap.databases.each do |db| db.songs.each do |song| puts song.get if (i += 1) == item.to_i end end end
ブラウザで index.rhtml にアクセスすると↓
わーいできたー。音もちゃんと鳴るー。
ホントは検索とかリスト再生とかやりたかったけど
なんか満足してしまったのでここまで。
誰か iTunes 7.x の DAAP を解読してください><