[PHP]iTunesライブラリのXMLファイルから必要な項目だけをCSVにしたい

PHP

iTunesのデータをCSVにしたり、データベースに突っ込みたいと考えてみたものの、iTunesから吐き出したライブラリのXMLファイルはちょっと特殊です。
PHPを使って加工したいと考えても創意工夫が必要になってきます。

世の中には同じようなことを考えている人はいるもので、Githubに加工用スクリプトをあげてくれている人がいるのですが、エラーがでてうまくいかない。
エラーの内容を見ながら修正しても、また次に別のエラーが出たりと心が折れます。

そもそも、エラーが出る原因としてはiTunesライブラリのXMLファイルをすんなりと処理できないのが原因です。

楽曲の詳細が入っている部分を抜き出してみました。
※楽曲によって項目はバラバラです。

<key>の部分は項目だというのは分かります。
その次が値になるのですが、項目にあわせてデータ型が指定してあるんです。
テキスト ・・・ <string>hoge</string>
数値 ・・・ <integer>hoge</integer>
日付 ・・・ <date>hoge</date>

他には <true/>だの<false/>だのあります。

なので、simplexml_load_file()を使ってXMLファイルを配列にすると、値として1つのくくりで取得したいのにそれぞれのデータ型に合わせた配列ができてしまいます。
しかもXMLファイルにはiTunesで値を入れている項目しか出力されませんので○個目は必ずこの項目になるという確約がありません。

だからこそ有志の方がGithubにスクリプトをあげていてくれたりするのですがエラーがでるんです・・・だけどデータを取得したいんです。

というわけで、ちょっと力技で取得します。

XMLファイルの中身を修正してから取り込みます。
・スポット的にするならテキストエディタを使って置換
・定期的にしたいならばシェルスクリプトを作ってsedコマンドで置換

置換する文字列は

下記ならば
・string>
・interger>
・date>

value> へ

下記ならば
・<true/>
・<false/>

<value></value> へ

XMLファイルの加工が終わったらサーバへアップロードします。
例)iTunes.xml

CSVに吐き出すPHPスクリプトは

項目を変更したい場合はヘッダーと取得行の3箇所を修正します。
CSV出力ではなくてデータベースへINSERTしたい場合は適宜書き換えてください。

置換作業という手作業は入りますが、iTunes側に変更があった時にも対応しやすくなるかと思います。

CSVファイルのデータが空(””,””,””,””,””,””,””,””)になっている場合はデータ項目の置換漏れや私の環境では見つけれていない<hoge>という別な要素名がXMLファイル内にあるのが原因ですので探してください。