iTunesの再生履歴を自宅サーバへ送信する

Mac用はXCodeで書いた。最初にAppleScriptを勉強して、Interface Builderで画面付けて使っていた。

設定ファイルは、Macでは統一されていて、ホームディレクトリの下のライブラリの下のPreferenceの下にplistファイルができる(アプリケーションのビルド設定で名前が決まる)のでそれを読み書きすればいい。開発者なら専用エディタがインストールされているし、開発ツールを入れていない人ならXMLファイルとして編集できる。

その後、Scripting Bridgeを使って書きなおし、同じ動作をするアプリを作って使ってきた。不満はなかった。

サイト自体は自分の再生履歴を一般公開しているが、他の人に使ってもらうには、Webサイトにユーザ登録の仕組みを作って、アプリにユーザ情報の設定を追加すれば終わりだった。

今回、その前に自分のiTunesをWindowsに引っ越す必要性がでたのでWindowsで同じことをするアプリを書かなければならなくなった。

実は、だいぶ前にWindowsでiTunesを使っていたときに作ったことがある。その時はVisual Studio Express 2008 のC#で作った。COMでiTunesにアクセスして、最低限の昨日は実現できていた。致命的なバグは、COMでiTunesにアクセスしているときにiTunesで曲のプロパティを開くと例外が発生しました、というダイアログが出ることだ。例外ハンドラを書かなければならないらしいと知った。ちなみにMacでは同じことをしてもそんなことにはならない。

そして、もう一つの問題が、設定情報の保存だった。私のアプリケーションは非常に原始的な方法をとっている。iTunesとiPodを同じ方法で履歴送信するために、「最近再生した項目」というスマートプレイリストを走査し、更新があった分のデータを送信する、という方法をとっている。これならiTunesで再生しようが、iPodで再生しようが同じ処理ができる。何日前にiPodで再生しても、スマートプレイリストに表示する期間を長くしておけばいいだけだ。ただし同じ曲を複数回再生してしまうと最後の1回しか送信できないという制限がつくが。

その最後に送信したデータの情報を保存する場所がC#のアプリケーション構成という.NETの標準機能を使って保存したときに、ビルドバージョンごとにフォルダが変わることがあり、理解できなかった。C:UserusernameAppData…のどこかなのだが、そのかなり深い階層にビルドバージョンの数字が含まれ変わってしまうのだ。真面目に勉強すればわかることなのだろうが、よくわからなかった。

で、今回、新しく作るに当たってはVisual Studio Express 2010 ExpressでVC++を選んだ。CLIをつくるので、あまりC++べったり?とか標準C++でもないし、.NETライブラリを使うのでC#に近い。さらに、上記構成ファイルが「標準では使えない」。いや、.NETだから、ライブラリ的には問題なく使えるのだが、C#のように、画面で(GUIで)app.configファイルの項目を編集して、ビルドの設定して、うんぬん、という流れにならないのだ。

そこで、下記サイトを参考に使った。
Visual C++ 2008でアプリケーション構成ファイル(app.config)を使う – Step Up!
Working with Configuration Files (app.config) in C++/CLI – CodeProject

これで、設定情報が読み出し・保存できるようになった。
しかも、この2番目の英語サイトにしたがって、更新した場合、元からあるファイルが上書き更新されていくので、実行ファイルと同じディレクトリにある設定情報に記録が残っていく。これほど分かりやすいことはない。セキュリティ的にどうか?という話は出てくるだろうが、昔のiniファイルと同じで、実行ファイルと設定ファイルがそれぞれ同じ、もしくは分かりやすい場所にある方が絶対にいいと思うのだ。

CLI/C++の文法にはだいぶ悩まされたけど、このapp.configの一件でVC++選んでよかったと思った。特にデバッグ中は設定ファイルを手で治すことが多々ある(今はもう無いけど)ので、わかり易い場所にあることが絶対条件なのだ。とりあえず、動いている。Mac版同様、ユーザ情報の設定ができないという、公開できないバージョンのままだけど。

コメント