2006-05-23 @ 16:34
Browsing iTunes Networks with Ruby
I’ve been working on my ruby DAAP Client lately, and I ran across a thread on the ruby-talk list about a multicast DNS client. Combining the two of those gave me some pretty neat information about the iTunes servers running on our network.
I could easliy get a list of iTunes servers using only mdns-sd like this:
require 'rubygems'
require 'net/dns/mdns-sd'
DNSSD = Net::DNS::MDNSSD
# Find all iTunes servers
browse_service = DNSSD.browse('_daap._tcp') do |r|
rservice = DNSSD.resolve(r.name, r.type, r.domain) do |res|
puts res.target
end
end
$stdin.gets
browse_service.stop
Once I was able to get a list of iTunes servers, listing all available artists was trivial. I just added the DAAP client in, and it worked:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
require 'rubygems' require 'net/daap' require 'net/dns/mdns-sd' DNSSD = Net::DNS::MDNSSD # Find all iTunes servers browse_service = DNSSD.browse('_daap._tcp') do |r| rservice = DNSSD.resolve(r.name, r.type, r.domain) do |res| daap = Net::DAAP::Client.new(res.target) daap.connect do |dsn| daap.databases.each { |db| db.artists.each { |a| puts "#{res.target} #{a.name}" } } end end end $stdin.gets browse_service.stop |
Combine that with the get method on Net::DAAP::Song, and you have a winning combo! A script that will automatically detect iTunes servers, and download the music. This will be great for backing up the music I keep on my Mac. I just plug it in to the network, and this script will automatically sync it up.