iTunes での楽曲情報を BigQuery に流し込むスクリプトを Go で書いた

  • 14
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

書いてみました!

About

iTunes が保持している楽曲情報には、主に下記のようなものが含まれるのですが、

  • 曲名・アルバム名・アーティスト名 etc.
  • 再生回数・スキップ回数 etc.
  • ファイルサイズ・ファイルロケーション etc.

これらを BigQuery に蓄積するとおもしろいかなぁと思い、

  • iTunes が出力している楽曲情報ファイル iTunes Music Library.xml をパース・csvに出力
  • 出力した csv ファイルを Google Cloud Storage にアップロード
  • アップロードしたファイルを Google BigQuery にロード

...といったことを行うスクリプトを、いま流行りの Go で書いてみました。
ちょっとイキって、 Goramoph なんて名前を付けてしまいました。

利用するまでにちょっとした準備が必要なので、こちらにまとめます。(GitHub の README にも書いたのですが、無理して英語で書いてしまったのでわかりにくくなってしまったもので...)

ソースコード

準備

Google Cloud SDK をダウンロード・インストール・認証する

Goramoph 用の Google Cloud プロジェクトを作成する

  • https://console.developers.google.com/ にアクセスし、サインインしてください
  • Create Project ボタンを押し、プロジェクトを作成します
    • プロジェクト名は任意の文字列を指定して下さい
    • プロジェクトIDには、ユニークな文字列を指定して下さい (ex. a-know-goramoph )
  • Google Cloud Storage, Google BigQuery を使用するため、課金設定が必要です。
  • gcloud コマンドを用いて、作成したプロジェクトを設定します
    • $ gcloud config set project <project-id>
    • ex. $ gcloud config set project a-know-goramoph

Goramoph を clone する

  • $ git clone git@github.com:a-know/goramoph.git
    • go get したものでも問題ないかどうかは確認できていません、すみません
  • これで準備完了です

使用方法

  • 基本的には $ go run goramoph.go /path/to/iTunes Music Library.xml を実行すればOKです
    • 通常、iTunes Music Library.xml は "ミュージック" などのフォルダ内の iTunes 関連フォルダにて管理されています
$ go run goramoph.go ~/Downloads/iTunes\ Music\ Library.xml

Starting goramoph.
xml parsing...done
exporting csv...done
getting Google Cloud Project name...project_name: a-know-goramoph_test
checking bucket...bucket has not created yet, now creating...bucket create success
uploading csv...done
checking dataset...dataset has not created yet, now creating...dataset create success
checking table...this playdata has not load yet, now loading...load to table success
remove csv file on Cloud Storage...done

completed.
  • iTunes Music Library.xml の最終更新日を元に csvファイル・BigQuery テーブルの作成を行います
    • なので、Guard とかと組み合わせると幸せになれるかもしれません :)

スクリーンショット

  • 例えば SELECT Artist, Count(PlayCount) as count FROM [a_know_goramoph_ds.20141108135449] GROUP BY Artist order by count desc というような SQL を BigQuery に投げることで、"アーティスト毎の再生回数" が取得できたりします

スクリーンショット 2014-11-26 23.27.09.png

↑こんなかんじです

  • 複数のテーブルを跨った SQL を投げたりすれば、"期間における再生回数順で楽曲をリストアップ" とかもできると思います

Goramoph の挙動

  1. iTunes Music Library.xml をパースします。
  2. パースした結果を csv ファイルとして、./csv に出力します。
    • csv ファイル名は、iTunes Music Library.xml の最終更新日を利用します。
  3. csvファイルを Google Cloud Storage にアップロードします。
    • バケット名は <project-id>-csv です
  4. csvファイルの内容を Google BigQuery の データセット・テーブルにロードします。
    • データセット名は <project-id>_ds です
    • テーブル名は <last-modify-date> です
  5. Google Cloud Storage にアップロードしたファイルを削除します
    • ローカルのファイルは削除せずそのままです

注意点など

  • Google Cloud Storage, Google BigQuery との連携は、gcloud を外部コマンド呼び出しすることで実現しています
    • ゆくゆくは外部コマンドに頼らない形にしていければと思っています
  • Google Cloud Storage, Google BigQuery は課金設定が必要なサービスです
    • 課金については、ご利用の前に十分にご確認下さい。
    • Goramoph を利用したことによる課金額に関しては一切関知致しませんので、ご了承下さい。

今後の予定

  • 以前作成した下記のようなソフトウェア・サービスがあるのですが、いつかは Goramoph をそれらに繋げたいな〜っと思っています。