2016/12/15 23:06 追記:
ちなみにffmpegでm3u8 -> mp3変換はできますが、実行時間が20分以上かかって待ってられなかったのでBulkDownloadが含まれてます。
あとm3u8のURLが推測難しく、いちいちブラウザ開いてplaylistをダウンロードして中身のmedia playlistのm3u8のURLを確認して〜がだるかったのでScrapingしてます。
Webラジオのm3u8をScrapingしてtsファイルをBulkDownloadしてffmpegでmp3に変換するツールをGoで書いた
が正確なタイトルですかね。
今期は、ガーリッシュナンバーが結構お気に入りです。
(ちーさまのダメ可愛さがなかなか癖になります)
(そして目玉焼きの服というセンス...圧倒的か...)
なんでこんな話から始まったかと言うと、面白いなーと思った作品のアニメのWebラジオとか結構聴くんですが、なんか専用のアプリがあって使いにくかったり、Webブラウザでしか再生できなかったりと中々不便なので結局ダウンロードすることにしてツールを作りました。
(たとえば、途中まで再生してブラウザ閉じたときに、続きから聴けない...とか)
ここから本編
今回作ったツール
1つのツールにしても良かったんですが、用途考えると別々のほうが使いやすいかなと思って3つに分けました。
はじめに
今回必要なダウンロードの流れは以下になります。
流れ
- 指定したURLのWebページのCrawl
- CrawlしたHTMLから対象のURLをScrapingして抽出
- m3u8のPlaylistのURLを元にtsファイルをBulkDownload
- tsファイルをffmpegでつなぎ合わせてaacを作成
- aacをffmpegを使ってmp3に変換
3〜5のあたり github.com/yyoshiki41/radigo こちらを参考にさせていただきました。
前提条件・事前準備
- Macでしか試してません
- 対象のWebページのURLを用意してださい
- 対象のxpathを適当に調べておく(ChromeDeveloperToolとかで)
- ffmpegをインストールしておく
- Go環境用意しておく
インストールの仕方・それぞれの役割説明
インストール
go get github.com/kyokomi/xcrawl go get github.com/kyokomi/m3u8go go get github.com/kyokomi/ffmpego
役割
- kyokomi/xcrawl : 指定したURLをcrawlして条件のxpathで抽出して出力
- kyokomi/m3u8go : m3u8のmaster playlistからmedia playlistを抽出して出力
- kyokomi/ffmpego : m3u8のURLを元にtsファイルをBulkDownloadしてffmpegを使ってmp3に変換
使い方
xcrawlのオプションで使えるconfig
スマートフォンサイトをCrawlしたいとかのときに使います。
headers: User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36
実行例
xargsでつなぐと一発で実行できて便利です。
$ xcrawl -c <configファイルのパス> \ -i '<ラジオ再生ボタンがあるWebページのURL>' \ -x '<master playlistのURLが抽出できるxpath>' \ | xargs m3u8go -i \ | xargs ffmpego -o <出力するファイル名> -i
デモ
冒頭にもリンク貼りましたが最近ハマっている、ガーリッシュナンバーの「クズらじ」で試してみます。
$ xcrawl -c config.yaml \ -i 'http://sp.animatetimes.com/radio/details.php?id=gn&a=10&m=a' \ -x '//*[@id="main-contents"]/ul[1]/li[3]/div/div[1]/div/a[1]/@href' \ | xargs m3u8go -i \ | xargs ffmpego -o kuzu3.mp3 -i
これでひとまず満足... ^q^
かなり雑に実装したので、もし自分以外に使う方がいましたら、バグとかあればお気軽に〜(対応するかはわからないが...)