Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save je3kmz/8e3d32a85d4d8ec28c57da74f9710404 to your computer and use it in GitHub Desktop.
Save je3kmz/8e3d32a85d4d8ec28c57da74f9710404 to your computer and use it in GitHub Desktop.
#/bin/sh
# プレミアム対応RADIKO録音スクリプト 簡易版 20230414
# 要 ftp/wget,multimedia/ffmpeg,textproc/jq,textproc/libxml2
# CH チャンネル名
# duration 録音時間(秒)
# MAIL プレミアムログイン用メールアドレス
# PASS パスワード
CH=ROK
duration=10
MAIL=メアド
PASS=パスワード
json="$(wget -q -O /dev/stdout --post-data=mail=$MAIL\&pass=$PASS https://radiko.jp/ap/member/webapi/member/login 2> /dev/stdout)"
if test -n "$json"
then
radiko_session="radiko_session="$(echo "${json}" | jq -r ".radiko_session")
areafree=$(echo "${json}" | jq -r ".areafree")
else
areafree="0"
fi
AUTH1="$(wget -q -S -O /dev/null --header "X-Radiko-App: pc_html5" --header "X-Radiko-App-Version: 0.0.1" --header "X-Radiko-Device: pc" --header "X-Radiko-User: dummy_user" https://radiko.jp/v2/api/auth1 2> /dev/stdout)"
authtoken=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-authtoken: / {print substr($0,23,length($0)-22)}')
keyoffset=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-keyoffset: / {print substr($0,23,length($0)-22)}')
keylength=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-keylength: / {print substr($0,23,length($0)-22)}')
RADIKO_AUTHKEY_VALUE=$(fetch -q -o- https://radiko.jp/apps/js/playerCommon.js | grep pc_html5 | awk -F\' '{print$4}')
partialkey=$(echo "${RADIKO_AUTHKEY_VALUE}" | dd bs=1 "skip=${keyoffset}" "count=${keylength}" 2> /dev/null | openssl base64)
wget -q -O /dev/null --header "X-Radiko-Device: pc" --header "X-Radiko-User: dummy_user" --header "X-Radiko-AuthToken: ${authtoken}" --header "X-Radiko-PartialKey: ${partialkey}" https://radiko.jp/v2/api/auth2\?${radiko_session}
URL=$(wget -q -O - https://radiko.jp/v2/station/stream_smh_multi/${CH}.xml | xmllint --xpath "/urls/url[@areafree=${areafree}][1]/playlist_create_url/text()" -)
ffmpeg -loglevel error -fflags +discardcorrupt -headers "X-Radiko-Authtoken: ${authtoken}" -i "${URL}" -t ${duration} -c copy -vn -bsf:a aac_adtstoasc -metadata:s language=jpn ${CH}-`env TZ=jst-09 date +%Y%m%d%H%M%S`.m4a
wget -q -O /dev/null --post-data=${radiko_session} https://radiko.jp/v4/api/member/logout
exit
#/bin/sh
# プレミアム非対応RADIKO録音スクリプト 簡易版 20230414
# 要 ftp/wget,multimedia/ffmpeg
# CH チャンネル名
# duration 録音時間(秒)
CH=ABC
duration=10
AUTH1="$(wget -q -S -O /dev/null --header "X-Radiko-App: pc_html5" --header "X-Radiko-App-Version: 0.0.1" --header "X-Radiko-Device: pc" --header "X-Radiko-User: dummy_user" https://radiko.jp/v2/api/auth1 2> /dev/stdout)"
authtoken=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-authtoken: / {print substr($0,23,length($0)-22)}')
keyoffset=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-keyoffset: / {print substr($0,23,length($0)-22)}')
keylength=$(echo "${AUTH1}" | awk 'tolower($0) ~/x-radiko-keylength: / {print substr($0,23,length($0)-22)}')
RADIKO_AUTHKEY_VALUE=$(fetch -q -o- https://radiko.jp/apps/js/playerCommon.js | grep pc_html5 | awk -F\' '{print$4}')
partialkey=$(echo "${RADIKO_AUTHKEY_VALUE}" | dd bs=1 "skip=${keyoffset}" "count=${keylength}" 2> /dev/null | openssl base64)
wget -q -O /dev/null --header "X-Radiko-Device: pc" --header "X-Radiko-User: dummy_user" --header "X-Radiko-AuthToken: ${authtoken}" --header "X-Radiko-PartialKey: ${partialkey}" https://radiko.jp/v2/api/auth2
URL=$(wget -q -O - https://radiko.jp/v2/station/stream_smh_multi/${CH}.xml | xmllint --xpath "/urls/url[@areafree=0][1]/playlist_create_url/text()" -)
ffmpeg -loglevel error -fflags +discardcorrupt -headers "X-Radiko-Authtoken: ${authtoken}" -i "${URL}" -t ${duration} -c copy -vn -bsf:a aac_adtstoasc -metadata:s language=jpn ${CH}-`env TZ=jst-09 date +%Y%m%d%H%M%S`.m4a
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment