2011/09/03

Rubyでファイルの自動ダウンロード

PodcastはiTunesなどに登録しておけば起動したときに随時更新してくれるのが便利である。が、BBCのNewsPodなどを見れば分かるように公開期限が短かったりすると後で昔のを聞きたいというのは叶えられない願いとなってしまう。

さて、先の震災でIBCラジオを好んで聴くようになったという事情に加え、radikoの復興支援企画などがあって前から気になっていたIBCのPodcastにも手を出し始めた。イヤー、マイッタマイッタなるものだが、知る人ぞ知る評判のPodcastのようで、なかなか面白い。

ところが、バックナンバーが公式サイト(で公開されているXMLファイル)では100件ほどしかない。それより前のは無いかと調べたところ、データ自体はIBCのサーバーにあるらしくファイル名のリストさえ入手できれば順次ダウンロードできることが判明。

このサイトで、そのリスト(一部)は手に入る。しかし何回も右クリック→Download Linked File as...などやるのは馬鹿馬鹿しい。
2011/10 このサイトは閉鎖された模様です。多分このプログラムは関係ない・・はず。多分。

で、本題。ダウンロードすべきファイルは正規表現で抽出できるはず(このブログの前半でPHPをいじって感覚はわかる)。しかも来学期にはRubyをつかう講義(選択制)があるというではないか。ここは感触をつかむためにも一括ダウンロードプログラムを書いてみようという事になった。

抽出の正規表現は

/http\:\/\/podcast\.ibc\.co\.jp\/kurenainobuta\/\S+maitta\S+\.mp3/

で良いであろう。「お富の相談室」は量が多くなるのでとりあえずパス。"kurenainobuta"の意味がいまいちわからないが気にしない。

まずはHTMLの取得プログラムだが検索すれば簡単に見つかる。
それを参考に、各行に対する処理をする。

具体的には、前の正規表現でscanをし、配列をつくる。サイズが0なら空なので無視して、そうでなければ、一行にファイルはひとつという原則に則ってダウンロードすべきファイルのリスト配列にどんどん突っ込んでいく。

最後にダウンロードしていいかをy/nで聞いてOKならダウンロード開始。自分しか使わないので、大文字のYで答えると操作終了になってしまうが、気にしない。

ダウンロードのプログラムも、画像取得プログラムを参考に作ることができる。
うーん。こういうのを作ってみるとCUIもあながち捨てたものじゃないな。

ただし、自分でも試したい人は自己責任で。別にちまちま例のサイトでダウンロードしながら聞くのもいいと思う。


--更新
そして画面上は変えるのを忘れてしまったが、v1.1として
①ダウンロード元全ページ数の自動取得・ファイル総数の取得
→***files foundの部分・(0-25)の部分
②ANSI カラーコードを意味もなく使う
③「downloading なんちゃら」と表示しながらダウンロードし、終わったら「downloadedなんちゃら」に更新
④データのフォルダ分け
なるものを作ってみた。


--さらに追記
初めの方はファイル名の書式が違う模様。
第1回 http://podcast.ibc.co.jp/maitta/index.php?itemid=23
第2回 http://podcast.ibc.co.jp/maitta/index.php?itemid=42
....
これはGoogle検索で探せば良い。iTunesのXMLファイルとしては100件の制限があるものの、Web上では無制限に見られる。

以下に即席のGoogle検索ツールをつけておくので、「イヤー、マイッタマイッタ」の第**回を聞きたい!という人はテキストボックスに数値を入れて「検索」をクリック。

「イヤー、マイッタマイッタ」第回をGoogleで
*検索窓に自動入力されますので手動で検索を実行してください。

0 件のコメント:

コメントを投稿