ダウンロードしたいよねー
さて。
語学番組のダウンロードをいろいろとやっている私としては、やはり聴き逃しサービス(ストリーミングサービス)もダウンロードしたいと思ったわけですよハイ。
ってことで上記の「聴き逃し番組を探す」サイトを確認してみると、以下の JSON ファイルが取得されていますね。
内容はこんな感じ。
{
"data_list":[
{"site_id":"0045","program_name":"NHK\u30b8\u30e3\u30fc\u30ca\u30eb","media_code":"05","corner_id":"01","corner_name":null,"thumbnail_p":"https:\/\/www.nhk.or.jp\/radioondemand\/json\/0045\/img\/program_g_100.png","thumbnail_c":null,"detail_json":"https:\/\/www.nhk.or.jp\/radioondemand\/json\/0045\/bangumi_0045_01.json","open_time":"2017-05-25T12:00:00+0900","close_time":"2017-06-01T12:00:00+0900","onair_date":"2017\u5e745\u670824\u65e5(\u6c34)\u653e\u9001","link_url":null},
{"site_id":"2914","program_name":"\u30b4\u30b8\u3060\u3063\u3061\u3083\uff01","media_code":"05","corner_id":"01","corner_name":null,"thumbnail_p":"https:\/\/www.nhk.or.jp\/radioondemand\/json\/2914\/img\/program_g_292.jpg","thumbnail_c":null,"detail_json":"https:\/\/www.nhk.or.jp\/radioondemand\/json\/2914\/bangumi_2914_01.json","open_time":"2017-05-25T12:00:00+0900","close_time":"2017-06-01T17:00:00+0900","onair_date":"2017\u5e745\u670812\u65e5(\u91d1)\u653e\u9001","link_url":null},
…
]
}
これを Ruby で読ませて JSON.parse すると次のようになります。
{"data_list"=>
[{"site_id"=>"0045",
"program_name"=>"NHKジャーナル",
"media_code"=>"05",
"corner_id"=>"01",
"corner_name"=>nil,
"thumbnail_p"=>"https://www.nhk.or.jp/radioondemand/json/0045/img/program_g_100.png",
"thumbnail_c"=>nil,
"detail_json"=>"https://www.nhk.or.jp/radioondemand/json/0045/bangumi_0045_01.json",
"open_time"=>"2017-05-25T12:00:00+0900",
"close_time"=>"2017-06-01T12:00:00+0900",
"onair_date"=>"2017年5月24日(水)放送",
"link_url"=>nil},
{"site_id"=>"2914",
"program_name"=>"ゴジだっちゃ!",
"media_code"=>"05",
"corner_id"=>"01",
"corner_name"=>nil,
"thumbnail_p"=>"https://www.nhk.or.jp/radioondemand/json/2914/img/program_g_292.jpg",
"thumbnail_c"=>nil,
"detail_json"=>"https://www.nhk.or.jp/radioondemand/json/2914/bangumi_2914_01.json",
"open_time"=>"2017-05-25T12:00:00+0900",
"close_time"=>"2017-06-01T17:00:00+0900",
"onair_date"=>"2017年5月12日(金)放送",
"link_url"=>nil},
:
]}
まあいろいろとあるわけですが、大事なのは detail_json 要素。ここに各番組のデータが含まれている JSON ファイルの URL が書いてあります。
では番組別 JSON ファイルを見てみましょう
上記の冒頭にある「NHKジャーナル」の JSON ファイル
を取得しましょう。
{
"main":{
"site_id":"0045",
"program_name":"NHKジャーナル",
"mode":0,
"media_type":"radio",
"media_code":"05",
"media_name":"NHKラジオ第1",
"site_detail":"「NHKジャーナル」は、“今日1日・時代の動きが見える”ニュース番組です。世界や日本の今日の出来事を解説を加えながらわかりやすく伝えます。また、地域のホットな話題やスポーツ、気象など、あらゆる情報が満載です。",
"navi":"news",
"navi_name":"ニュース",
"cast":null,
"thumbnail_p":"https:\/\/www.nhk.or.jp\/radioondemand\/json\/0045\/img\/program_g_100.png",
"thumbnail_c":null,"site_logo":"http:\/\/www2.nhk.or.jp\/prog\/img\/45\/45.jpg",
"week":"月火水木金",
"schedule":"毎週月曜〜金曜 午後10時〜11時10分",
"official_url":"http:\/\/www4.nhk.or.jp\/nhkjournal\/","share_url":"http:\/\/nhk.jp\/radio\/?p=0045_01",
"corner_id":"01",
"corner_name":null,
"corner_detail":null,
"noindex_flag":false,
"detail_list":[
{"headline_id":"08","headline":null,"headline_sub":null,"headline_image":null,"file_list":[{"seq":1,"file_id":"3826","file_title":"2017年5月24日(水)","file_title_sub":null,"basefile":"\/var\/www\/netradio_stg\/web\/data\/sound\/0045\/stream_0045_9ec5f956f8759c6b2d4a163161beb3c3.mp4","file_name":"https:\/\/nhks-vh.akamaihd.net\/i\/radioondemand\/r\/0045\/s\/stream_0045_9ec5f956f8759c6b2d4a163161beb3c3.mp4\/master.m3u8","open_time":"2017-05-25T12:00:00+09:00","close_time":"2017-06-01T12:00:00+09:00","aa_contents_id":"[radio]vod;NHKジャーナル;r1,130;2017052471692;2017-05-24T22:00:00+09:00_2017-05-24T23:10:00+09:00","aa_measurement_id":"vod","aa_vinfo1":"NHKジャーナル","aa_vinfo2":"r1,130","aa_vinfo3":"2017052471692","aa_vinfo4":"2017-05-24T22:00:00+09:00_2017-05-24T23:10:00+09:00","onair_date":"2017年5月24日(水)放送"}]},
{"headline_id":"02","headline":null,"headline_sub":null,"headline_image":null,"file_list":[{"seq":1,"file_id":"3514","file_title":"2017年5月23日(火)","file_title_sub":null,"basefile":"\/var\/www\/netradio_stg\/web\/data\/sound\/0045\/stream_0045_835e14e46f29566a23d71ad789a89eb7.mp4","file_name":"https:\/\/nhks-vh.akamaihd.net\/i\/radioondemand\/r\/0045\/s\/stream_0045_835e14e46f29566a23d71ad789a89eb7.mp4\/master.m3u8","open_time":"2017-05-24T12:00:00+09:00","close_time":"2017-05-31T12:00:00+09:00","aa_contents_id":"[radio]vod;NHKジャーナル;r1,130;2017052371460;2017-05-23T22:00:00+09:00_2017-05-23T23:10:00+09:00","aa_measurement_id":"vod","aa_vinfo1":"NHKジャーナル","aa_vinfo2":"r1,130","aa_vinfo3":"2017052371460","aa_vinfo4":"2017-05-23T22:00:00+09:00_2017-05-23T23:10:00+09:00","onair_date":"2017年5月23日(火)放送"}]},
{"headline_id":"07","headline":null,"headline_sub":null,"headline_image":null,"file_list":[{"seq":1,"file_id":"3794","file_title":"2017年5月22日(月)","file_title_sub":null,"basefile":"\/var\/www\/netradio_stg\/web\/data\/sound\/0045\/stream_0045_e32cdda15c72ad5e92b5b38db7b2e749.mp4","file_name":"https:\/\/nhks-vh.akamaihd.net\/i\/radioondemand\/r\/0045\/s\/stream_0045_e32cdda15c72ad5e92b5b38db7b2e749.mp4\/master.m3u8","open_time":"2017-05-23T12:00:00+09:00","close_time":"2017-05-30T12:00:00+09:00","aa_contents_id":"[radio]vod;NHKジャーナル;r1,130;2017052271231;2017-05-22T22:00:00+09:00_2017-05-22T23:10:00+09:00","aa_measurement_id":"vod","aa_vinfo1":"NHKジャーナル","aa_vinfo2":"r1,130","aa_vinfo3":"2017052271231","aa_vinfo4":"2017-05-22T22:00:00+09:00_2017-05-22T23:10:00+09:00","onair_date":"2017年5月22日(月)放送"}]}
]
}
}
これをまた Ruby で読ませて JSON.parse しましょう。
{"main"=>
{"site_id"=>"0045",
"program_name"=>"NHKジャーナル",
"mode"=>0,
"media_type"=>"radio",
"media_code"=>"05",
"media_name"=>"NHKラジオ第1",
"site_detail"=>
"「NHKジャーナル」は、“今日1日・時代の動きが見える”ニュース番組です。世界や日本の今日の出来事を解説を加えながらわか
りやすく伝えます。また、地域のホットな話題やスポーツ、気象など、あらゆる情報が満載です。",
"navi"=>"news",
"navi_name"=>"ニュース",
"cast"=>nil,
"thumbnail_p"=>"https://www.nhk.or.jp/radioondemand/json/0045/img/program_g_100.png",
"thumbnail_c"=>nil,
"site_logo"=>"http://www2.nhk.or.jp/prog/img/45/45.jpg",
"week"=>"月火水木金",
"schedule"=>"毎週月曜〜金曜 午後10時〜11時10分",
"official_url"=>"http://www4.nhk.or.jp/nhkjournal/",
"share_url"=>"http://nhk.jp/radio/?p=0045_01",
"corner_id"=>"01",
"corner_name"=>nil,
"corner_detail"=>nil,
"noindex_flag"=>false,
"detail_list"=>
[{"headline_id"=>"08",
"headline"=>nil,
"headline_sub"=>nil,
"headline_image"=>nil,
"file_list"=>
[{"seq"=>1,
"file_id"=>"3826",
"file_title"=>"2017年5月24日(水)",
"file_title_sub"=>nil,
"basefile"=>"/var/www/netradio_stg/web/data/sound/0045/stream_0045_9ec5f956f8759c6b2d4a163161beb3c3.mp4",
"file_name"=>
"https://nhks-vh.akamaihd.net/i/radioondemand/r/0045/s/stream_0045_9ec5f956f8759c6b2d4a163161beb3c3.mp4/master.m3u8",
"open_time"=>"2017-05-25T12:00:00+09:00",
"close_time"=>"2017-06-01T12:00:00+09:00",
"aa_contents_id"=>
"[radio]vod;NHKジャーナル;r1,130;2017052471692;2017-05-24T22:00:00+09:00_2017-05-24T23:10:00+09:00",
"aa_measurement_id"=>"vod",
"aa_vinfo1"=>"NHKジャーナル",
"aa_vinfo2"=>"r1,130",
"aa_vinfo3"=>"2017052471692",
"aa_vinfo4"=>"2017-05-24T22:00:00+09:00_2017-05-24T23:10:00+09:00",
"onair_date"=>"2017年5月24日(水)放送"}]},
{"headline_id"=>"02",
"headline"=>nil,
"headline_sub"=>nil,
"headline_image"=>nil,
"file_list"=>
[{"seq"=>1,
"file_id"=>"3514",
"file_title"=>"2017年5月23日(火)",
"file_title_sub"=>nil,
"basefile"=>"/var/www/netradio_stg/web/data/sound/0045/stream_0045_835e14e46f29566a23d71ad789a89eb7.mp4",
"file_name"=>
"https://nhks-vh.akamaihd.net/i/radioondemand/r/0045/s/stream_0045_835e14e46f29566a23d71ad789a89eb7.mp4/master.m3u8",
"open_time"=>"2017-05-24T12:00:00+09:00",
"close_time"=>"2017-05-31T12:00:00+09:00",
"aa_contents_id"=>
"[radio]vod;NHKジャーナル;r1,130;2017052371460;2017-05-23T22:00:00+09:00_2017-05-23T23:10:00+09:00",
"aa_measurement_id"=>"vod",
"aa_vinfo1"=>"NHKジャーナル",
"aa_vinfo2"=>"r1,130",
"aa_vinfo3"=>"2017052371460",
"aa_vinfo4"=>"2017-05-23T22:00:00+09:00_2017-05-23T23:10:00+09:00",
"onair_date"=>"2017年5月23日(火)放送"}]},
{"headline_id"=>"07",
"headline"=>nil,
"headline_sub"=>nil,
"headline_image"=>nil,
"file_list"=>
[{"seq"=>1,
"file_id"=>"3794",
"file_title"=>"2017年5月22日(月)",
"file_title_sub"=>nil,
"basefile"=>"/var/www/netradio_stg/web/data/sound/0045/stream_0045_e32cdda15c72ad5e92b5b38db7b2e749.mp4",
"file_name"=>
"https://nhks-vh.akamaihd.net/i/radioondemand/r/0045/s/stream_0045_e32cdda15c72ad5e92b5b38db7b2e749.mp4/master.m3u8",
"open_time"=>"2017-05-23T12:00:00+09:00",
"close_time"=>"2017-05-30T12:00:00+09:00",
"aa_contents_id"=>
"[radio]vod;NHKジャーナル;r1,130;2017052271231;2017-05-22T22:00:00+09:00_2017-05-22T23:10:00+09:00",
"aa_measurement_id"=>"vod",
"aa_vinfo1"=>"NHKジャーナル",
"aa_vinfo2"=>"r1,130",
"aa_vinfo3"=>"2017052271231",
"aa_vinfo4"=>"2017-05-22T22:00:00+09:00_2017-05-22T23:10:00+09:00",
"onair_date"=>"2017年5月22日(月)放送"}]}]}}
ということで出てきました、m3u8 ファイルの URL*4。file_name要素に出てきます。
昨日(5/24)のNHKジャーナルの音声ファイルのURLは、onair_date 要素の「2017年5月24日(水)放送」の含まれているハッシュの file_name 要素
であると分かりました。配信開始時刻は open_time 要素にある 2017-05-25T12:00:00+09:00 、配信終了時刻は
close_time 要素の 2017-06-01T12:00:00+09:00 ですね。
あとはよしなにしてくださいw((ffmpeg -i https://nhks-vh.akamaihd.net/i/radioondemand/r/0045/s/stream_0045_9ec5f956f8759c6b2d4a163161beb3c3.mp4/master.m3u8 nhk_journal20170524.mp3
なお、macOS では ffmpeg のオプションとして -write_xing 0
を付けると時間表示が正しくなります。参考:#2697 (MP3 output duration incorrect in OS X) – FFmpeg))。