以前、Podcast配信されている「奇声ラッシュ」をまとめて聞きたいということで音声ファイルをダウンロードしておいてまとめて聞く方法を記しました。予めダウンロードすることで途中で手動操作をすることなく一時間近く続けて番組を聞くことができるようになりました。
同様に「ぼくらはみんなで生きている」の音声もまとめてダウンロードしてオフラインで聴けるようにしてみました。ぼくらはみんなで生きているというのはこのページに書かれているのを引用すると次のような番組です。
※このコンテンツは2007年~2010年にFREEWAVE天神FMにて公開されていたものの再配信です。
作業した環境は次のとおりです。
- OS: Windows 8.1 64ビット
- Cygwin: CYGWIN_NT-6.3 2.4.1(0.293/5/3) 2016-01-24 11:26 x86_64 Cygwin
- zsh 5.1.1 (x86_64-unknown-cygwin)
- perl 5, version 22, subversion 1 (v5.22.1) built for cygwin-thread-multi
のところに音声ファイルがリンクされています。複数のページに三つずつ分けて記されているようですが、トップページから56ページまであります。このすべてのページを見なければリンクを得られません。次のようにしてすべてのページのソースをダウンロードしました。
for n in {1..56}
do
wget -O $n.html http://lovefm.co.jp/boku_iki/blogs/podcast/page:$n
done
次に音声ファイル自体なのですが、最終回であれば次のファイルです。
http://lovefm.co.jp/files/podcast_file/NtnB6QsM6iKJWKdO06hCPwuoDR0bHBPdKuzejCgC62M4iHcgyW.mp3これをそのままダウンロードしたのではファイル名が意味不明で何の話なのかが分かりません。このMP3ファイルへのリンクの前にh3タグで各々の回の題名が書かれているのでそれをファイル名にしてダウンロードするコマンドを出力するPerlスクリプト(ファイル名は boku_iki.pl としてます)を用意しました。
#!/bin/perl -w
# ぼくらはみんなで生きているのファイルの一括ダウンロード
use warnings;
use strict;
for (my $i = 0; $i <= $#ARGV; $i++) {
open(INPUT, "< $ARGV[$i]") or die("指定ファイルエラー\n$!");
my $title = "";
my $file_url = "";
while (my $line = <INPUT>) {
$line =~ s/\x0D//g; # CRの削除
$line =~ s/\x0A//g; # LFの削除
# 不要な業は読み飛ばし
next unless ($line =~ "^<h3>" || $line =~ "このPODCASTを聴く");
if ($title eq "" && $line =~ "^<h3>") { # タイトル行
$line =~ s/<\/?h3>//g; # <h3></h3>タグの除去
$title = $line; # 題名
next;
}
if ($title ne "" && $line =~ "このPODCASTを聴く") { # MP3ファイル
$line =~ s/<p class="report_btn"><a href=\"//; # ファイル前の文字
$line =~ s/\"><img src.*$//; # ファイル後の文字
$file_url = "http://lovefm.co.jp" . $line; # URL化
}
print "wget $file_url -O \"$title.mp3\"\n";
$title = ""; # 題名を初期化
}
}
これを先ほどダウンロードしたファイルを対象に
boku_iki.pl {1..56}.html | sh
と実行するとすべてのMP3ファイルを順にダウンロードします。Perlで出力された次のようなコマンドが実行されます。
wget http://lovefm.co.jp/files/podcast_file/NtnB6QsM6iKJWKdO06hCPwuoDR0bHBPdKuzejCgC62M4iHcgyW.mp3 -O "第170回(2010年9月1日放送分)「光る昆虫」(※最終回).mp3"
ダウンロードして気づいたのですが、170回まであるのにファイル数は166しかありません。第26, 45, 48, 103回は無かったようです。