まずは、https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/corners/new_arrivals
にアクセスすると、
こんな感じでマスターインデックスのようなものがブラウザ(この場合はEdge)に表示される。中身はJSONなので、jqで扱えます。
たとえば、
#!/bin/bash
curl -s https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/corners/new_arrivals | jq '.corners[].title'/
を起動すると、
“Living in Japan”
“NHKのど自慢”
“伊集院光の百年ラヂオ”
“子ども科学電話相談”
“名演奏ライブラリー”
“山下健二郎のトーク・ライク・フィッシング”
“宗教の時間”
“現代の音楽”
“ビバ!合唱”
“視覚障害ナビ・ラジオ”
“こころをよむ”
“ラジオ体操”
長いので以下省略するが、番組タイトルが得られる。このうち録音したい番組名があれば、最初のJSONでその番組名に対応するセクションを抜き出す。今は例えば”ラジオ英会話”をターゲットにしたいので、
{
"id": 450,
"title": "ラジオ英会話",
"radio_broadcast": "R2,FM",
"corner_name": "",
"onair_date": "2024年10月25日(金)放送",
"thumbnail_url": "https://www.nhk.jp/static/assets/images/radioseries/rs/PMMJ59J6N2/PMMJ59J6N2-eyecatch_0a9b280b1337204967a767f917de6c8a.jpg",
"series_site_id": "PMMJ59J6N2",
"corner_site_id": "01"
},
を検分するが、ここで次のステップに行くために必要な情報は、”series_site_id”と”corner_site_id”であり、それぞれの値をメモしておく。(これたぶん不変?)で、
へアクセスすると、
{ "id": 42, "title": "ラジオ英会話", "radio_broadcast": "R2,FM", "schedule": "放送:(R2)月曜~金曜 午前6:45~7:00 再放送:(R2)月曜~金曜 午後0:25~0:40、午後9:45~10:00、日曜 午後4:30~5:45(月曜~金曜の再放送)、(NHK-FM)月曜~金曜 午後11:30~11:45", "corner_name": "", "thumbnail_url": "https://www.nhk.jp/static/assets/images/radioseries/rs/PMMJ59J6N2/PMMJ59J6N2-eyecatch_0a9b280b1337204967a767f917de6c8a.jpg", "series_description": "高校生から社会人までを対象とした英会話レッスン。日常生活で使う英会話が意識せずに口から出てくる事を目指します。会話の土台である文法と語彙のイメージを身につけながら実用的な英会話力の養成につなげます。日常会話はもちろん受験やビジネスにも最適!\r\n", "series_url": "https://www.nhk.jp/p/rs/PMMJ59J6N2/", "share_text_title": "ラジオ英会話", "share_text_url": "https://www.nhk.or.jp/radioondemand/share/42_450.html", "share_text_description": "#radiru", "episodes": [ { "id": 4084078, "program_title": "ラジオ英会話 ハートでつかめ!英語の極意(136)", "onair_date": "10月21日(月)午前6:45放送", "closed_at": "2024年10月28日(月)午前7:00配信終了", "stream_url": "https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_f4ae31d3e8475fe1d580d6ebe05b35ec/index.m3u8", "aa_contents_id": "[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意(136);r2,130;2024102168307;2024-10-21T06:45:00+09:00_2024-10-21T07:00:03+09:00", "program_sub_title": "【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ" }, { "id": 4085438, "program_title": "ラジオ英会話 ハートでつかめ!英語の極意(137)", "onair_date": "10月22日(火)午前6:45放送", "closed_at": "2024年10月29日(火)午前7:00配信終了", "stream_url": "https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_2af9b80964fb4ba38350a264bd949f18/index.m3u8", "aa_contents_id": "[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意(137);r2,130;2024102268547;2024-10-22T06:45:00+09:00_2024-10-22T07:00:03+09:00", "program_sub_title": "【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ" }, { "id": 4086077, "program_title": "ラジオ英会話 ハートでつかめ!英語の極意(138)", "onair_date": "10月23日(水)午前6:45放送", "closed_at": "2024年10月30日(水)午前7:00配信終了", "stream_url": "https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_e455ce781cd5cb289b4c25da7f7c0b37/index.m3u8", "aa_contents_id": "[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意(138);r2,130;2024102368791;2024-10-23T06:45:00+09:00_2024-10-23T07:00:03+09:00", "program_sub_title": "【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ" }, { "id": 4086632, "program_title": "ラジオ英会話 ハートでつかめ!英語の極意(139)", "onair_date": "10月24日(木)午前6:45放送", "closed_at": "2024年10月31日(木)午前7:00配信終了", "stream_url": "https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_5320a443261e28fce8d1a3f72e278983/index.m3u8", "aa_contents_id": "[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意(139);r2,130;2024102469040;2024-10-24T06:45:00+09:00_2024-10-24T07:00:03+09:00", "program_sub_title": "【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ" }, { "id": 4087213, "program_title": "ラジオ英会話 ハートでつかめ!英語の極意(140)", "onair_date": "10月25日(金)午前6:45放送", "closed_at": "2024年11月1日(金)午前7:00配信終了", "stream_url": "https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_041617a562a5ce0393b3db2b74972f1f/index.m3u8", "aa_contents_id": "[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意(140);r2,130;2024102569295;2024-10-25T06:45:00+09:00_2024-10-25T07:00:03+09:00", "program_sub_title": "【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ" } ],
これが現在得られるストリームのurlで、最新の5個が表示される。urlのみ抜き出すスクリプトは、
curl -s "https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=PMMJ59J6N2&corner_site_id=01" | jq '.episodes[].stream_url'
で、出力は、
"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_c04c91b14f70e2f3a743ac48f1935d5f/index.m3u8"
"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_12876768066a9c322c85856228f5f2bf/index.m3u8"
"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_7ade6029b35a882f266d4c1149011060/index.m3u8"
"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_d4829c154352b89e18970c455a712c2b/index.m3u8"
"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_b9525b03de18b56eaa39ba61e85dec52/index.m3u8"
となるので、最新の一個は最下行で、これを抜き出すにはsedの力を借りて、
| sed -n 5p
を足せばよい。5行目だわね。従って、最終形はバッファリングもして、
#!/bin/bash
DATE=`date '+%Y%m%d_%H%M'`
OUTDIR="/mnt/nas/english"
first=$(curl -s "https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=PMMJ59J6N2&corner_site_id=01")
results=$(echo $first | jq '.episodes[].stream_url' | sed -n 5p)
title=$(echo $first | jq '.episodes[].program_title' | sed -n 5p)
temp="${results%\"}"
temp="${temp#\"}"
#echo ${results}
temp2="${title%\"}"
temp2="${temp2#\"}"
echo $temp2
ffmpeg -y -http_seekable 0 -i ${temp} -vn -bsf aac_adtstoasc -acodec copy -metadata title=${temp2} "${OUTDIR}/${temp2}.m4a"
ffmpegへ渡すパラメーターでmetadataとかも加えている。Debian側から/mnt/nas/englishというディレクトリがnas上に見えていることが必要です。
nao@debian-g:~/nhk$ ls -alt /mnt/nas/english
合計 5220
-rw-r--r-- 1 nao nao 5338251 11月 3 13:44 ラジオ英会話 ハートでつかめ!英語の極意(140).m4a
drwxr-xr-x 2 nao nao 0 10月 28 11:04 ..
drwxr-xr-x 2 nao nao 0 10月 28 08:41 .
というファイルができあがります。これを何らかのplayer programで再生すればおけです。私はWindows側からMedia PlayerとかVLC Media Playerを使うことが多いです。
毎日最新版をこのスクリプトを使って録音しておくのであれば、せっかくLinuxを使っているので、定番のcronを使うのが良いでしょうかね。”ラジオ英会話”の場合は、月曜から金曜まで毎日午前7時過ぎくらいには最新録音(その日の分)がurlに反映されるので、スクリプトのファイル名がnhk/getwtt2.shならば、
11 7 * * 1-5 nhk/getwtt2.sh 1> /dev/null 2> /dev/null
とでもしておけば、自動実行されます。1> /dev/null云々は”饒舌”なffmpegさんの出力を捨てるための部分です。crontab -eから上記コマンド行を入力してください。
別記事でGit for Windowsの方のBash for Gitを紹介していますが、そこでもBashは使えますので、Windowsサイドでcurl,jq,ffmpegが使えれば、ほぼ同じスクリプトがWindowsマシン上で動きます。
例えば、c:\englishというようなディレクトリを用意しておけば、
#!/bin/bash
DATE=`date '+%Y%m%d_%H%M'`
OUTDIR="c:/english"
first=$(curl -s "https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=PMMJ59J6N2&corner_site_id=01")
results=$(echo $first | jq '.episodes[].stream_url' | sed -n 5p)
title=$(echo $first | jq '.episodes[].program_title' | sed -n 5p)
temp="${results%\"}"
temp="${temp#\"}"
#echo ${results}
temp2="${title%\"}"
temp2="${temp2#\"}"
echo $temp2
c:/ffmpeg/bin/ffmpeg -y -http_seekable 0 -i ${temp} -vn -bsf aac_adtstoasc -acodec copy -metadata title=${temp2} "${OUTDIR}/${temp2}.m4a"
で録音できます。ただしWindowsサイドではcronに相当するものが標準でないのと、マシンが立ち上がってないと動かないので、私はLinux側で使っていました。が、アプリを使うことが多いです。以上の話は、”ラジオ英会話”固定でしたが、任意のラジオプログラム名でらじるらじる内をサーチしたければ、拙作のユーティリティでできます。
コメント