iTunesのデータベースをRubyで書き換えてみる
公開日:
:
最終更新日:2014/01/27
Mac
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
iTunes で一括置換したい曲名があって、
手作業で書き換えるのも面倒なので
Rubyの勉強も兼ねて、自動で書き換えるスクリプトを書いてたんですが、
XMLのXPathがよく分からなくて大苦戦。
アキヨドでXPathについて書いてある書籍を買ってきたり。
そしてついに ‘iTunes Music Library.xml’ を望み通りに書き換えられたんですが、
iTunes を起動しても何故か反映されない。
んで、色々とググっていたら、
まず、iTunesのライブラリは、iTunes Library.itlというバイナリファイルが主です。これを元にサードパーティツールが連携しやすいようにiTunes Music Library.xmlが生成されています。なので、xmlファイルを書き換えてもiTunesを再起動すると元に戻ってしまいます。
あー、そういうことか!
くそー、無駄な時間を過ごしてしまった。
xmllintとか使いながら書き換えたい場所を調査してから書いたので
超ハードコーディングなんですが、一応スクリプトを貼っておきます。
#!/opt/local/bin/ruby
require 'rexml/document'
source = '/Users/user/Music/iTunes/iTunes Music Library.xml'
dest = '/Users/user/Music/iTunes/iTunes Music Library.xml.conv'
xml = REXML::Document::new(File.open(source))
1772.upto(1823) do |n|
path = "/plist/dict/dict/dict[#{n}]"
REXML::XPath.each(xml, path) do |e|
e.each_element("./string[1]") do |s|
if s.text =~ /^\d{2}$/
s.text = s.text.sub(/^(\d{2})$/, '1-\1')
end
end
end
end
xml.write(open(dest, "w"))