iTunes Music Library.xml を見つけ出す

ちょっと必要があって iTunes Music Library.xml の場所がどこにあるかを AppleScript で探し出したいんだけど...。目的はそれだけなんです。

iTunes Music Library.xml は iMovie や iPhoto、iDVD、Keynote など他のアプリケーションが利用するファイルです。iTunes が管理しているファイルやプレイリストなどの情報が記述されています。拡張子は XML ですが、中身は Apple の Property List 形式で記述されています。

なんで iTunes Music Library.xml を探し出したいかというと、iTunes が利用している iTunes Music フォルダの場所を参照したいからです。その情報が iTunes Music Library.xml に記述されているのです。

通常、iTunes はユーザーの Music フォルダ(~/Music)に iTunes というフォルダを作成し、そこで各ファイルの管理をするのですが、このフォルダの場所はユーザーが変更可能です。ですから、iTunes Music Library.xml が ~/Music/iTunes 以下に存在すると決めつけることはできません。

ところで、iTunes 9 になってファイルの整理方式が変更になったんですね。知りませんでした。うちの iTunes フォルダは古くからのもので、OS のバージョンアップの度に外付け HDD に退避し、バージョンアップ後に戻す...ということを繰り返しているので、現在では利用されていないファイルやフォルダが複数散見されます。このことが余計に事態を複雑にしてくれました。

他のアプリケーションが参照するファイルなんだから、iTunes Music Library.xml の場所を調べる方法が何かあるはず...という想定のもと調べてみると、com.apple.iApps.plist というファイルが見つかりました。ここに iTunes Music Library.xml の場所が記述されているのでした。

ユーザーの Preferences フォルダにある com.apple.iApps.plist は iTunes、もしくは iPhoto の起動時に作成されます。とりあえずこのファイルを見てみれば iTunes Music Library.xml の場所が分かります(まぁ、問題点がないわけでもないようですが)。

以下、iTunes Music Library.xml の場所を調べ、iTunes Music フォルダの場所を調べるスクリプト。エラー処理はしていないので、その辺りは大人の対応で。

Script Editor で開く

set music_folder to find_iTunes_folder()

on find_iTunes_database()
    set prefs_folder to path to preferences folder from user domain as text
    set prefs_file to POSIX path of (prefs_folder & "com.apple.iApps.plist")

    tell application "System Events"
        tell property list file prefs_file
            set file_list to value of property list item "iTunesRecentDatabasePaths"
            return item 1 of file_list
        end tell
    end tell
end find_iTunes_database

on find_iTunes_folder()
    set xml_file to find_iTunes_database()
    tell application "System Events"
        tell property list file xml_file
            set music_folder to value of property list item "Music Folder"
        end tell
    end tell

    return do shell script "python -c \"import sys, urlparse, urllib; print urllib.unquote(urlparse.urlparse(sys.argv[1]).path)\" " & quoted form of music_folder
end find_iTunes_folder

0 件のコメント :

コメントを投稿