iTunesからfoobar2000への再生履歴とレートの移行スクリプト完成!

3部構成で作成して何とか動くものができた。万人向けではないが。

Ruby素人なので、文法がわかっておらず、動く状態にするのに苦労したけれども、最終実行結果はつじつまがあった動作になっているのでよしとする。

1本目は作業用のSQLite3テーブル作成だけのテーブル作成スクリプトだから最初しか使わないのでもない無し。流用だし。

2本目はiTunesから対象トラックの履歴情報を抜き出してSQLite3のテーブルに書き出すスクリプト。確認は不十分だが、うまく作れていれば、今後、実行するたびに、最新状態の再生回数、レート、最後に再生した日時が更新されていき、追加したトラック分レコードが追加されていくはずである。テストデータを作ってしまったので後戻りはできない。

3本目は2本目が出力したSQLite3のテーブルに「手作業で」foobar2000のfoo_playcountが使っているトラック識別子を設定したレコードに対してインポート用XMLファイルを出力するスクリプトである。識別子「ID」が設定されていないものは無視する。これはうまく動いたが、文法調査に時間がかかった。関数作ったり、if-elseif(elsif)が動作しないのでcaseに書きなおしたりして動くようにした。

テストデータにSuperflyのアルバム「Mind Travel」の14トラックを選んで、foo_playcountからエクスポート。そのXMLファイルから「ID」を抜き出す。予想通り順番に並んでいたのでそのとおりデータベースに登録してスクリプトを走らせXMLを出力、インポートしたところレート、再生回数、最後に再生した日時が反映された。レートは厳密には付きあわせていないがそれなりにばらついて出ているからたぶん大丈夫。どうせ使っているうちに変わるデータだし。再生回数と最後に再生した日時はiTunesと付き合わせて間違いないことを確認した。

iTunesでライブラリ全体を確認したら、18700トラックほどあった。DRM付のトラックは無視する設定にfoobar2000側をしているのでそれを除いても18400トラックほどはあるだろう。確認作業を含めればアルバム単位でしか作業できない。かなりの手間。foo_playcountがエクスポートしたXMLに引数を渡して、ファイルをパース、データベースをアップデートというスクリプトをもう一本作るということも考えられるが、どうだ?アルバム名がかぶっている場合もあるし、オムニバス(コンピレーション)の存在を考えると、確実に動作させられる自身がない。

やはり、手作業が確実か。地味に行こう。

コメント