メモ:予約録音したRadikoのデータをバッチ処理でiTunesに自動的に追加する

iTunesにはいわゆるフォルダ監視機能がついておらず、以前から不便に感じていた。なんかフォルダ監視のためのツールを、別で常駐させるのもどうも性に合わないし。ところが、いつの頃からか「iTunesに自動的に追加」というフォルダがiTunes Mediaフォルダの中にできていた。何に使うのかよく分からなかった(というか存在にもしばらく気づかなかった)のだが、このフォルダはうまく使うと便利っぽい。

「iTunesに自動的に追加」フォルダの挙動

結局のところ、このフォルダはiTunesへの取り込み口になっていて、ここに音楽データを放り込むとiTunesのライブラリにデータが吸い込まれる。iTunes起動中であれば、それこそ瞬時にライブラリに登録されるし、起動してなければ次に起動した時にライブラリに登録される。

「吸い込まれる」と書いたのは、投入したデータがライブラリに登録されると「iTunesに自動的に追加」フォルダからはデータが消えるからである。ここが、このフォルダの挙動の特徴的な部分。

予約録音したデータをiTunesに流し込む

自分は根っからのラジオ好きなもので、もう開発が止まってしまっているradikaをだましだまし使いながら、好きなラジオ番組を録音している。

iTunesへ自動追加できるフォルダがあるということが分かったところで、「デイリーでバッチ処理して、録音したデータをiTunes取り込み口のフォルダにコピーしてやればいいのでは?」ということになった。さらにその先まで考えると…

  • 予約録音する
  • 録音したデータをバッチ処理でiTunes取り込み口のフォルダにコピー→iTunesに取り込み
  • iTunes側でスマートプレイリストを設定する。たとえば「1週間以内に登録された曲」とか
  • iTunesとiPhoneの同期の際に、上記のプレイリストのみ同期するように設定する
  • Wi-Fi経由でiTunesとiPhoneが自動的に同期するように設定する
  • 直近1週間以内に録音された番組だけがiPhoneの中に入る
  • 次の日になるとスマートプレイリストの中身が自動更新されるので、iPhoneの中に入る番組も入れ替わる

という感じである。後半4つあたりは、Apple Musicとicloudミュージックライブラリを導入してると挙動が変わる気がするんだけど、Apple Musicのお試し期間を過ぎて解約しちゃったので検証できてない。とりあえずここでは、上記2番目の自動取り込みの部分を中心に書いてみる。

どうやってバッチ処理でデータをコピーするか

では、どうやって日々録音されたデータ(しかも前日に録音された番組だけ)を取り込み口のフォルダにコピーするか。多少試行錯誤してみた。

robocopyを使う方法

いろいろ調べてみて、最初に思いついたのはこれだった。以下をバッチファイルに書いて、タスクスケジューラで毎日定刻に実行させてみた。

ところがこれだと、更新日が1日以内のものも引っかかってしまう。たとえば、タグ情報をあとでいじったらそのデータも引っかかってしまって、iTunesに取り込まれる。iTunes側では特に弾かれずにそのまま取り込まれるので、タグ情報がちょっと違うだけのファイルがライブラリに2つできあがることになり、どうにも具合が悪い。データ作成日で引っ掛けられないかと思ったが、どうもそういうオプションが見つからなかった。

Powershellを使う方法

最近のWindowsには、Windows Powershellというコマンドプロンプトの高級版みたいなヤツがデフォルトで入っている。そして、Powershellの開発ツールとしてPowershell ISEというのがついていて、コレを使うとGUIベースでスクリプトを記述できるので、わかりやすい。コレを使って、

  • 録音されたデータが入っているフォルダ内のファイル一覧を取得し
  • データ作成日から1日以内だったら
  • iTunes取り込み用フォルダにコピーする

というスクリプトを書いてみた。

あとは、このスクリプトをどっか適当なところに保存し、スクリプトファイルを実行するバッチファイルを書いてタスクスケジューラに突っ込むもよし、タスクスケジューラから直接スクリプトファイルを実行させるもよし。今のところ、キチンと動いているみたい。

ちなみにPowerShellのスクリプトを自動実行させるには、先にPowerShellで権限設定をちょっといじっておかないとイカンので注意。詳しくは、以下リンク先の「実行に関する注意2―スクリプト実行ポリシーを設定すること」とかを参照のこと。