本ブログは、2010年末を以て更新を終了いたしました。ご愛読いただきありがとうございました。
2年ほど前から、USB 接続タイプの AM/FM ラジオを購入して、いろいろなラジオ番組を録音して聴いています。特に AM を聞くのは高校生の頃以来で、久しぶりに楽しんでいます。
定期的に録音するようになると、オーディオファイルを手動でデジタルオーディオプレイヤーに転送するのが面倒になってきました。タイマーで自動録音したものを、自動的に転送することはできないだろうかと考え、Podcast として登録することにしました。そのためには、Podcast として登録できるフィードを作成しなければいけません。これはブログの更新情報と同様の RSS 形式ですので、以前の記事を参考に Windows PowerShell で Podcast フィード生成スクリプトを作ることにしました。
必要なもの
参考情報(以前の記事)
まずは、Podcast として登録するオーディオファイルを用意します。ここでは、e:\radio フォルダに保存されているとします。
これらのオーディオファイルを元に、Podcast の RSS フィードを作成することにします。
まずは準備です。
[Reflection.Assembly]::LoadWithPartialName("System.ServiceModel.Web") | Out-Null $sss = "System.ServiceModel.Syndication."
$progs = @{ TitleE = "EIKAIWA" TitleJ = "ラジオ英会話" }, @{ TitleE = "CHARO" TitleJ = "チャロ" }
$mp3dir = "E:\radio"
次に RSS フィードを格納する、System.ServiceModel.Syndication.SyndicationFeed オブジェクト $feed を、番組の数だけ作成します。また、フィード全体に関する情報である、最終変更時刻や番組名などを、$feed のプロパティにセットします。
0..($progs.count-1) | foreach { $feed = new-object ($sss + "SyndicationFeed") $feed.LastUpdatedTime = [DateTimeOffset]::Now $prog = $progs[$_]["TitleJ"] $feed.Title = $prog
では、実際のオーディオファイルの情報からフィードを作成しましょう。
dir ("{0}\*{1}*" -f $mp3dir, $prog) | sort LastWriteTime -desc | ` foreach { $title = ($_.name.replace($_.extension,"")) $item = new-object ($sss + "SyndicationItem") $item.Title = $title $item.PublishDate = $_.CreationTime $item.Content = new-object ($sss + "TextSyndicationContent") $title
ここからは Podcast に特有の部分です。
$link = new-object System.ServiceModel.Syndication.SyndicationLink $link.Uri = "http://localhost/podcast/{0}" -f $_.name $link.Length = $_.length $link.MediaType = "audio/mpeg" $link.RelationshipType = "enclosure" $item.Links.Add($link) $feed.items.add($item) }
これで Podcast 用の RSS フィードがセットされたオブジェクト $feed が準備できましたので、あとはファイルに書き出すだけです。
$rssFormatter = new-object ($sss + "Rss20FeedFormatter") $feed $rssFile = "{0}\{1}.xml" -f $mp3dir, $progs[$_]["TitleE"] $rssWriter = [System.Xml.XmlWriter]::Create($rssFile) $rssFormatter.WriteTo($rssWriter); $rssWriter.close() }
生成された XML ファイルを見てみると、RSS 形式になっています。
多くの場合、この XML ファイルを直接 Podcast として登録するのではなく、http://.. といった URL で登録する必要があります。そのため、ローカルの IIS にこのフォルダを登録し、http(s) でアクセスできるようにしましょう。
これで、生成した XML ファイルに http(s) 経由でアクセスできるようになりました。ブラウザで見てみましょう。
ブログの RSS と同様に、フィードとして認識されています。オーディオファイル名が文字化けしていますが、アクセスには問題ありません。(フィードとして認識されない場合は、一旦ブラウザを立ち上げ直してみてください。)
ここまでできれば、あとはお好みのオーディオプレイヤーに Podcast として登録するだけです。
iTunes では、詳細メニューから Podcast の URL を登録することができます。
Winamp では、メディアライブラリ > Podcast ディレクトリ > サブスクリプションから追加します。(オレンジ色の枠内)
無事登録できました。さらに、この Podcast フィード作成スクリプトをタスクスケジューラーに登録し、定期的に実行すれば、自動的にフィードが更新され、オーディオプレイヤーにも同期されるためとても便利です。
このように Windows PowerShell と .NET Framework とを活用して、ほんの30行程度のスクリプトで Podcast のフィード生成スクリプトを作ることができます。しかも直接の XML の操作は一切ありません。Windows PowerShell の強力さを実感、です。
※ なお、本スクリプトでは基本的な情報しかフィードに含めていません。アイコン画像など、より多くの情報をどのようにして System.ServiceModel.Syndication クラスで扱うことができるのか試行錯誤中です。