diary/Kojima

・NHKラジオ聴き逃しサービスのダウンロード

NHKラジオの聴き逃し配信サービスのデータをダウンロードするようなコード(get_ondemand3.py)を書いてみた. 基本 Python + ffmpeg で使えるけど,Python 用の tag アクセスモジュール mutagen も 組み込んでおけば,タイトルや出演者等をMP4のタグとして書き込むので便利.

mutagen は PIP で組み込める(python -m pip install mutagen)けど, Plamo用のパッケージもこのページに添付しておく(一番下).

# get_ondemand3.py も同じところにある.

使い方はこんな感じ.

NHKのサイトの[ラジオ]=>[聴き逃し]の一覧ページから, ダウンロードしたい番組を選択.

NHK_01.jpg

その番組内で,聴き逃し配信されている回が一覧表示されるので, ダウンロードしたい回にマウスを合わせて「右」クリックし, "copy link location" をクリックして, その回のURL(正確に言うとオンラインなメディアプレイヤーの引数)を入手する.

# 左クリックだとオンラインでの再生プレイヤーが起動するので注意

NHK_02.jpg

別に開いておいたターミナル上で [右クリック]=>[貼り付け] (あるいは中ボタンクリック)すると,

 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)
 &#169;alb=おしゃべりな古典教室「山姥(やまんば)」(2)
 &#169;cmt=1月8日(金)午前9:30放送 おしゃべりな古典教室「山姥(やまんば)」(2) 【出演】木ノ下裕一,小芝風花
 &#169;day=2021-01-08_09-30
 &#169;nam=おしゃべりな古典教室「山姥(やまんば)」(2)
 &#169;too=Lavf58.29.100

タグの情報はvlcの「メディア情報」等でも表示できる.

NHK_03.png

やってることはjsonデータの解析程度で,実処理はffmpegに丸投げしているだけのコードだけど, 結構便利だと思うし,気付いた情報はコメントで書き込んでいるので,興味ある人は試してみて.



添付ファイル: filemutagen-1.45.1-x86_64-B1.txz 8件 [詳細] fileNHK_01.jpg 25件 [詳細] fileNHK_03.png 40件 [詳細] fileget_ondemand3.py 67件 [詳細] fileNHK_02.jpg 42件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:43