Tag: iTunesアートワークを取得したい

  • アートワークのSQLiteデータベースからPersistent IDとHASH文字列の対応を出力するSQL

    とりあえず作業用メモ

    sqlite> SELECT ITM.ZPERSISTENTID, SRC.ZURL, IMG.ZHASHSTRING FROM ZDATABASEITEMINFO AS ITM, ZSOURCEINFO AS SRC, ZIMAGEINFO AS IMG WHERE ITM.ZSOURCEINFO=SRC.Z_PK AND SRC.ZIMAGEINFO=IMG.Z_PK;

    ついでに、xmlのPERSISTENT_IDをSQLで64bit整数に変換してファイル名のhash文字列を検索するSQL。
    “FFFFFFFFFFFFFFFF”の部分に実際のPERSISTENT_IDが入る

    SELECT ITM.ZPERSISTENTID, SRC.ZURL, IMG.ZHASHSTRING FROM ZDATABASEITEMINFO AS ITM, ZSOURCEINFO AS SRC, ZIMAGEINFO AS IMG WHERE ITM.ZSOURCEINFO=SRC.Z_PK AND SRC.ZIMAGEINFO=IMG.Z_PK AND ITM.ZPERSISTENTID=(SELECT 0xFFFFFFFFFFFFFFFF as integer_result);
  • 16進数のPERSISTENT_IDをNSNumber相当の整数型に変換するPythonスクリプト

    ミュージックアプリ(iTunes)のライブラリ書き出しで出力したxmlファイルにあるPERSISTENT_IDは16進数に変換されていて、sqliteの中に保存されているPERSISTENT_IDと対応させるには変換することが必要。

    調べるとPERSISTENT_IDはNSNumber型で、どうもNSNumber=int64で変換すれば良いらしい

    >>> from ctypes import c_int64
    >>> c_int64(int('xxxxxxxxxxxxxxxx', 16)).value

  • iTunesライブラリを操作できそうなPythonライブラリ

    ライブラリの情報はXMLで出力すればテキストで読むこともできるが、下記のライブラリを使えば直接アクセスすることもできそう。
    https://github.com/liamks/libpytunes

  • iTunesで自動取得したアートワークを取り出したい

    やりたいこと

    iTunes(ミュージックアプリ)で「アートワークを取得」した音楽ファイルは、外部のサービスに持っていくとアートワークが設定されていないことがある。これはミュージックアプリが独自の形式でアートワークを管理しているからで、mp3のファイル自体に埋め込むようにしたい。

    外部からダウンロードした画像をアートワークに設定した場合にはmp3のタグとして設定される仕様のようなので、すでに自動取得されているアートワークはとりあえずたとえば「アルバム名.jpg」のような形で保存したい。(とりあえず判別がつけばなんでも良い)

    アートワーク情報の保存場所

    アートワークの情報は下記のパスにある
    ~/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents

    上記の中に、
    ・画像ファイル自体のフォルダ:artwork/
    がある。


    ただしartwork/配下にはjpgファイルが直接置かれているが、ファイル名がhashっぽいものになっているので直接判別はできなそう。ここの対応付の解読がポイントになりそう。

    その他、
    ・データベースっぽいもの:artworkd.sqlite
    がこのフォルダにはあるので、このあたりに画像ファイルの情報が入っていると推測する。

    その他元になりそうな情報としては、ミュージックアプリから「ファイル>ライブラリ>ライブラリを書き出し…」したxmlファイルが使えそう。
    ※どうもswiftのフレームワークでライブラリファイルを直接読むこともできそうだがいったん書き出したxmlファイルで良しとする。

    なんとなく上記の情報から取り出しはできそうな気がしてきた(続く)