iTunesで指定したプレイリストの曲だけを取り出したい

はこべにっき# - iTunesで指定したプレイリストの曲だけを取り出したいの続き。

ただ、この"iTunes Music Library.xml"というファイルは巨大になりがちで*1このXMLをパースするのにすごく*2時間がかかってしまう。もう少し軽量なやり方はないかなぁ。

と、考えたところで、これはと言える軽量な方法を思いついた。やっとこのスクリプトが完成したところなんだけどなー。

はこべにっき# - iTunesで指定したプレイリストの曲だけを取り出したい

というわけで、iTunesのプレイリストの処理をしたいときにはPerlでやるよりももっと良い方法がありました。

そもそも、"iTunes Music Library.xml"を直接読み書きするなんてどう考えてもナンセンスで、iTunesの仕事は極力iTunesにやらせるのが道理というもの。なので、AppleScriptでiTunesにtellしてやってもらう事にしました。

tell application "iTunes"
    display dialog "ファイルのパスを調べるiTunesプレイリストの曲を再生してOKを押してください"
    set result_txt to ""
    repeat with t in every track of current playlist
        set result_txt to (result_txt & POSIX path of (location of t as string) & "?n")
    end repeat
    
    set the clipboard to result_txt
end tell

英語っぽい感じのコードがしびれる、AppleScript。次の画像のようにおもむろにスクリプトエディタにコピペして実行すると、選択したプレイリストの曲ファイルの場所がクリップボードに入る。
スクリプトエディタ

コード内にもにあるように対象のプレイリストを選択するのには一度、再生状態にしないとだめっぽい。一回再生状態にしてそのプレイリストにフォーカスが写れば停止しても良いみたい。

特定のアプリケーションに深く関わっている仕事をするときには、AppleScriptを使うと、たとえばPerlで時間かけてごりごり処理しなくても、非常に簡単に同じことができてしまう。MacOSXアプリケーションそれぞれの操作を直接呼び出せるのが強力でかなり便利だ。最近AppleScriptいじっていなかったけど、他にいろいろできないか試してみたくなってきたなぁ。

普段から特定の言語いじっていると、それだけでなんでもできそうな気になってしまう。けど、一つの道具にこだわるよりも、道具の得手不得手を判断して、適材適所で使っていくのが重要だよな。柔軟に道具持ち変えれるようになりたいものだ。

ちなみにAppleScriptプログラミングに関しては、AppleScript PARK / IntroductionAppleScript入門教室そして、AppleScript PARK / Dictionaryが非常に参考になりました。