・NHKラジオ聴き逃しサービスのダウンロード
NHKラジオの聴き逃し配信サービスのデータをダウンロードするようなコード(get_ondemand3.py)を書いてみた. 基本 Python + ffmpeg で使えるけど,Python 用の tag アクセスモジュール mutagen も 組み込んでおけば,タイトルや出演者等をMP4のタグとして書き込むので便利.
mutagen は PIP で組み込める(python -m pip install mutagen)けど, Plamo用のパッケージもこのページに添付しておく(一番下).
# get_ondemand3.py も同じところにある.
使い方はこんな感じ.
NHKのサイトの[ラジオ]=>[聴き逃し]の一覧ページから, ダウンロードしたい番組を選択.
その番組内で,聴き逃し配信されている回が一覧表示されるので, ダウンロードしたい回にマウスを合わせて「右」クリックし, "copy link location" をクリックして, その回のURL(正確に言うとオンラインなメディアプレイヤーの引数)を入手する.
# 左クリックだとオンラインでの再生プレイヤーが起動するので注意
別に開いておいたターミナル上で [右クリック]=>[貼り付け] (あるいは中ボタンクリック)すると,
javascript:openPlayer('p=6311_01_2495539')
こんなURLが得られるので,これを引数に指定して get_ondemand3.py を起動する. なお,このURL中にはbashが解釈する特殊文字("()")が含まれているので, そのままだとbashのエラーになるため,前後をクォートする必要がある.
$ ./get_ondemand3.py 'javascript:openPlayer('p=6311_01_2495539')'
# 実は ./get_ondemand3.py p=6311_01_2495539 だけでいい.
この指定で,get_ondemand3.py は
https://www.nhk.or.jp/radioondemand/json/<6311>/bangumi_<6311>_<01>.json
みたいなURLから番組の配信情報を入手し,該当する回(2495539)のダウンロード用URLを見つけ, ffmpegを使ってHLS(HTTP Live Streaming)経由でMP4形式の音声データをダウンロードする. なお,ダウンロード用URLはHTTPS経由になるため,ffmpegにOpenSSLかGnuTLSを組み込んでおく必要がある. 手元のffmpegはGnuTLSを組み込んでいる.
$ ffmpeg --version ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.0 (GCC) configuration: --prefix=/usr --mandir=/usr/share/man --enable-gpl --enable-version3 --disable-static --enable-shared --disable-debug --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libwebp --enable-libpulse --enable-libspeex --enable-libv4l2 --enable-libxvid --enable-gnutls --disable-libfdk-aac --disable-nonfree --docdir=/usr/share/doc/ffmpeg-4.2.3
実行例はこんな感じ.
$ ./get_ondemand3.py 'javascript:openPlayer('p=6311_01_2495539')' program:6311 series:01 number:2495539 {'aa_contents_id': '[radio]vod;おしゃべりな古典教室「山姥(やまんば)」(2);r2,130;2021010875327; 2021-01-08T09:30:00+09:00_2021-01-08T09:45:00+09:00', 'aa_measurement_id': 'vod', 'aa_vinfo1': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'aa_vinfo2': 'r2,130', 'aa_vinfo3': '2021010875327', 'aa_vinfo4': '2021-01-08T09:30:00+09:00_2021-01-08T09:45:00+09:00', 'close_time': '2021-01-15T09:45:00+09:00', 'file_id': '2495539', 'file_name': 'https://nhks-vh.akamaihd.net/i/radioondemand/r/6311/s/stream_6311_1337882d26dd972c5f4f53859ba4e39e.mp4/master.m3u8', 'file_title': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'file_title_sub': '【出演】木ノ下裕一,小芝風花', 'headline': None, 'headline_sub': None, 'onair_date': '1月8日(金)午前9:30放送', 'open_time': '2021-01-08T09:45:00+09:00', 'seq': 1, 'share_url': 'https://nhk.jp/radio/?p=6311_01_2495539'} file_path:2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 file_url:https://nhks-vh.akamaihd.net/i/radioondemand/r/6311/s/stream_6311_1337882d26dd972c5f4f53859ba4e39e.mp4/master.m3u8 tags {'album': 'おしゃべりな古典教室「山姥(やまんば)」(2)', 'comment': '1月8日(金)午前9:30放送 おしゃべりな古典教室「山姥(やまんば)」(2) 【出演】木ノ下裕一,小芝風花', 'date': '2021-01-08_09-30', 'title': 'おしゃべりな古典教室「山姥(やまんば)」(2)'}
ダウンロードしたデータは,"放送日_開始時刻_番組タイトル.mp4" というファイルに保存される.
$ file 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]
一応,拾ってきたデータから,各種情報をタグに書き込むようにもしてみた.
$ mutagen-inspect 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 -- 2021-01-08_09-30_おしゃべりな古典教室「山姥(やまんば)」(2).mp4 - MPEG-4 audio (AAC LC), 900.14 seconds, 46002 bps (audio/mp4) ©alb=おしゃべりな古典教室「山姥(やまんば)」(2) ©cmt=1月8日(金)午前9:30放送 おしゃべりな古典教室「山姥(やまんば)」(2) 【出演】木ノ下裕一,小芝風花 ©day=2021-01-08_09-30 ©nam=おしゃべりな古典教室「山姥(やまんば)」(2) ©too=Lavf58.29.100
タグの情報はvlcの「メディア情報」等でも表示できる.
やってることはjsonデータの解析程度で,実処理はffmpegに丸投げしているだけのコードだけど, 結構便利だと思うし,気付いた情報はコメントで書き込んでいるので,興味ある人は試してみて.