September 08, 2004

itshell - Net::DAAP::Client

MyTunes Rudex なんて iTunes の共有をダウンロードするエグいツールが出てたんで、ちょっと実装を調べてみることに。

基本的には Rendezvous をつかって mDNS にサービスを登録しておき、共有しているサーバのリストを取得。iTunes の音楽配信自体は DAAP というプロトコルで行われる、と。この辺は developer.apple.com などで詳しく解説されています。日本語だと MYCOM の記事 とか。

んで Perl によるオープンな実装は CPAN で検索すると、Net::DAAP::Client というそのものがあり、そこに itshell というコマンドラインツールも同梱されてる。ActivePerl から CPAN シェルでがっつりいれるとカンタンにはいりました。

itshell は Rendezvous を調べる機能はないみたいで、サーバ名なしで起動すれば localhost をルックアップする仕様になっています。

C:\Documents ans Settings\miyagawa> itshell
iTunes> db
Loading database (may take a moment)
iTunes> playlist
1615: miyagawa(Ashlee Simpson)
iTunes> find Ashlee
3733 : Autobiography, Ashlee Simpson (Autobiography)
iTunes> get 3733
Fetching 3733 : Autobiography, Ashlee Simpson (Autobiography)
iTunes>

こんな感じで取得できた。他のマシンは IP アドレス指定すればOK。

んで、そもそも Rendezvous から共有されているマシンリストは、以下のような感じで取得できる。Machine Name は UTF-8 なので適宜シェルの文字コードにあわせて (Win なら cp932 あたり) 変換する必要ありです。

use Net::Rendezvous;

my $res = Net::Rendezvous->new("daap");
$res->discover;

for my $entry ($res->entries) {
    printf "%s:%s (%s)\n", $entry->address, $entry->port, $entry->attribute('Machine Name');
}

といじっているうちに、どうも1個だけ IP アドレスが正しく出てこず、しかも問い合わせがとっても長びくものがある。調べてみると iTunes の共有名に . (ドット) が含まれると split にシケる Net::Rendezvous のバグ。しかも Net::DNS::Resolver::Win32 にも影響がありそうなややこしい問題。この辺でとりあえず作者に報告して深追い終了しますか。。。

Posted by miyagawa at September 8, 2004 09:35 PM | Permalink | Comments (3) | TrackBack(1)
Comments

Net::Rendezvous は重すぎますね…。
ちなみに Win32 の iTunes 4.6 ですが、Forbidden でハジかれずに済んでます。
Net::Rendezvous から取り出した IP を使って、itshell で他の人の共有から playlist を見て、普通に問題なく get 出来ました。
日本語の曲が入ってると "Wide character in print" で怒られるので、itshell を所々書換えて使ってます。

Posted by: nipotan on September 8, 2004 11:47 PM

うーん、そうですか。
なんかこっちの Net::DAAP::Client とかの問題かな?

Posted by: miyagawa on September 9, 2004 12:04 AM

Net::DAAP::Client、なんか CPAN で最新入れた後に、古い dapple っていうパッケージで上書きしてもうてた。最新版にしたら問題なく動いたっす!

Posted by: miyagawa on September 9, 2004 06:11 PM
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/1241
iTunes COM API with Perl
Excerpt: DAAP と Rendezvous で iTunes の共有プロトコルをいじれることがわかったので、次はローカルにインストールされてる iTunes 自体をハック。 これは iTunes COM で公開されてる API を使用すればカンタン。言語をそろえるために Perl でやるなら、 use strict; use
Weblog: blog.bulknews.net
Tracked: September 9, 2004 08:41 PM
Post a comment