From d8434417dc55115477e7718b72580c3a135e1291 Mon Sep 17 00:00:00 2001 From: JE3KMZ Date: Mon, 10 Apr 2023 02:51:16 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?= =?UTF-8?q?=E3=81=9A=E3=80=81for=20=E3=81=A7=20uri=20=E3=82=92=E7=B7=8F?= =?UTF-8?q?=E3=81=AA=E3=82=81=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E6=8F=9B=E3=81=88=E3=81=A6=E3=81=BF=E3=81=9F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes to be committed: modified: radi.sh --- radi.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/radi.sh b/radi.sh index efe86d5..4188f13 100755 --- a/radi.sh +++ b/radi.sh @@ -211,13 +211,24 @@ get_hls_uri_nhk() { get_hls_uri_radiko() { station_id=$1 radiko_login_status=$2 + authtoken=$3 areafree="0" if [ "${radiko_login_status}" = "1" ]; then areafree="1" fi - - curl --silent "https://radiko.jp/v2/station/stream_smh_multi/${station_id}.xml" | xmllint --xpath "/urls/url[@areafree='${areafree}'][1]/playlist_create_url/text()" - 2> /dev/null + urilist=$(curl --silent "https://radiko.jp/v2/station/stream_smh_multi/${station_id}.xml" | xmllint --xpath "/urls/url[@areafree='${areafree}']/playlist_create_url/text()" - 2> /dev/null) + for x in `echo $urilist` + do + ffprobe -v quiet -headers "X-Radiko-Authtoken: ${authtoken}" $x + if test $0 + then + echo $x + return 0 + fi + echo + done + return 1 } ####################################### @@ -405,7 +416,7 @@ elif [ "${type}" = "radiko" ]; then exit 1 fi - playlist_uri=$(get_hls_uri_radiko "${station_id}" "${radiko_login_status}") + playlist_uri=$(get_hls_uri_radiko "${station_id}" "${radiko_login_status}" "${radiko_authtoken}") fi if [ -z "${playlist_uri}" ]; then echo "Cannot get playlist URI" >&2 From bd139dbbf4b36b5b1bbd5ff2f09d25b3f0134f13 Mon Sep 17 00:00:00 2001 From: JE3KMZ Date: Mon, 2 Jun 2025 13:57:03 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E5=90=8C=E6=9C=9F=20d09d26be08563af9490314?= =?UTF-8?q?3469f9d4437de11312?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes to be committed: modified: README.md modified: radi.sh --- README.md | 15 +++++++++++++++ radi.sh | 15 +++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4570c28..6d1bff8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,21 @@ [NHKラジオ らじる★らじる](https://www.nhk.or.jp/radio/) / [radiko](http://radiko.jp/) / [ListenRadio](http://listenradio.jp/) / [渋谷のラジオ](https://shiburadi.com/) で現在配信中の番組を保存するシェルスクリプトです。なお配信形式と同じフォーマットで保存するため、別形式へのエンコードは行いません。 +# ※重要なお知らせ + +**2025-05-16を最後に更新停止します。** + +作者自身も長らく利用しておらずここで一旦区切りをつけることにしました。
+今までご愛顧いただき、誠にありがとうございました。 + +特にradikoライブ配信のタイムラグが大きくなっている(放送局の財布事情が厳しいためオーディオアドを導入するのはいいですがあまりにラグが酷い)割には不定期に発生する対処のモチベーションを保つことができなくなっていました。
+(余程の理由がない限りタイムフリー保存のほうが速いですし、タイムラグもライブ配信と比べて遙かに小さいです) + +またここ最近は音声配信という括りで番組のPodcast等への公開や各種プラットフォーム側でのタイムシフト機能の実装により、わざわざ実放送時間にリアルタイム保存する意義は薄れていっていることも理由の一つです。 + +オープンソースですので修正・機能追加などはforkしてぜひ公開してください。 + + ## 必要なもの - curl - libxml2 (xmllintのみ使用) diff --git a/radi.sh b/radi.sh index 4188f13..73c6774 100755 --- a/radi.sh +++ b/radi.sh @@ -217,18 +217,9 @@ get_hls_uri_radiko() { if [ "${radiko_login_status}" = "1" ]; then areafree="1" fi - urilist=$(curl --silent "https://radiko.jp/v2/station/stream_smh_multi/${station_id}.xml" | xmllint --xpath "/urls/url[@areafree='${areafree}']/playlist_create_url/text()" - 2> /dev/null) - for x in `echo $urilist` - do - ffprobe -v quiet -headers "X-Radiko-Authtoken: ${authtoken}" $x - if test $0 - then - echo $x - return 0 - fi - echo - done - return 1 + + uri=$(curl --silent "https://radiko.jp/v3/station/stream/pc_html5/${station_id}.xml" | xmllint --xpath "/urls/url[@timefree='0' and @areafree='${areafree}'][playlist_create_url[not(contains(text(),'_definst_'))]][2]/playlist_create_url/text()" - | sed 's/\&/\&/g' 2> /dev/null) + echo "${uri}?station_id=${station_id}&l=15&type=c&lsid=" } #######################################