お勉強兼ねてpart1~3+αでスクリプト作ったので配布します
書き方が汚いのは許してください…
(追記 2018/11/04)
このままだとATDSなAACが出来上がっちゃって、プレイヤーによっては再生できないので、
ffmpegのオプションに”-bsf:a aac_adtstoasc”を追加しました
【使い方】
./radiko.sh '[番組URL]'
[番組URL]部分は、radikoの番組表のリンクです
http://radiko.jp/#!/ts/TBS/2019010109000000 形式のURLです。
実行すると、放送局ID(TBSとかLFRとか)_放送開始時刻(yyyymmddhhss).aacでダウンロードされます。
※プレミアム会員の方は、mail/passを指定しておくと、エリアフリーでダウンロードできます。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/bin/sh
mail=
""
pass=
""
app=
"pc_html5"
version=
"0.0.1"
user=
"dummy_user"
device=
"pc"
key=
"bcd151073c03b352e1ef2fd66c32209da9ca0afa"
if
[ $
# -ne 1 ] ; then
echo
"Usage: ./radiko.sh 'URL'"
exit
1
fi
if
[ ${mail} ] && [ ${pass} ] ;
then
code=`curl -s -c cookie.txt -o
/dev/null
-w
'%{http_code}'
-d
"mail=${mail}"
-d
"pass=${pass}"
https:
//radiko
.jp
/ap/member/login/login
`
if
[ ${code} -
ne
"302"
] ;
then
echo
"Invalid E-mail or Password"
rm
-f cookie.txt
exit
1
fi
fi
param=(`curl -s -b cookie.txt -H
"X-Radiko-App: ${app}"
-H
"X-Radiko-App-Version: ${version}"
-H
"X-Radiko-User: ${user}"
-H
"X-Radiko-Device: ${device}"
-I -L https:
//r
adiko.jp
/v2/api/auth1
|
egrep
-i
'X-Radiko-AuthToken:|X-Radiko-KeyLength:|X-Radiko-KeyOffset:'
|
sed
-e
's/^.*: \([0-9a-zA-Z]\)/\1/ig'
`)
authtoken=`
echo
-n ${param[0]} |
sed
-e
"s/[\r\n]\+//g"
`
keylength=`
echo
-n ${param[1]} |
sed
-e
"s/[\r\n]\+//g"
`
keyoffset=`
echo
-n ${param[2]} |
sed
-e
"s/[\r\n]\+//g"
`
partialkey=`
echo
-n ${key:${keyoffset}:${keylength}} |
base64
`
code=`curl -s -b cookie.txt -o
/dev/null
-w
'%{http_code}'
-H
"X-Radiko-AuthToken: ${authtoken}"
-H
"X-Radiko-PartialKey: ${partialkey}"
-H
"X-Radiko-Device: ${device}"
-H
"X-Radiko-User: ${user}"
-s -L https:
//radiko
.jp
/v2/api/auth2
`
echo
"AuthToken : ${authtoken}"
echo
"KeyLehgth : ${keylength}"
echo
"KeyOffset : ${keyoffset}"
echo
"PartialKey: ${partialkey}"
echo
"HTTP code : ${code}"
if
[ ${code} -
ne
"200"
] ;
then
echo
'Invalid AutoToken'
exit
fi
station=`
echo
$1 |
sed
-e
's/http:\/\/radiko.jp\/#!\/ts\/\(.\+\)\/.*/\1/ig'
`
date
=`
echo
$1 |
sed
-e
's/http:\/\/radiko.jp\/#!\/ts\/\(.\+\)\/\([0-9]\{8\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\2/ig'
`
hour=`
echo
$1 |
sed
-e
's/http:\/\/radiko.jp\/#!\/ts\/\(.\+\)\/\([0-9]\{8\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\3/ig'
|
sed
-e
's/^0//g'
`
ft=`
echo
$1 |
sed
-e
's/http:\/\/radiko.jp\/#!\/ts\/\(.\+\)\/\([0-9]\{14\}\)/\2/ig'
`
if
[ ${hour} -lt 5 ] ;
then
date
=`
date
--
date
"${date} 1 days ago"
+%Y%m%d`
fi
to=`curl -s
"http://radiko.jp/v3/program/station/date/${date}/${station}.xml"
|
egrep
-i
"ft=\"${ft}"
|
sed
-e
's/.*to="\([0-9]\{14\}\).*/\1/ig'
`
url=
"https://radiko.jp/v2/api/ts/playlist.m3u8?station_id=${station}&l=15&ft=${ft}&to=${to}"
echo
"Station : ${station}"
echo
"From : ${ft}"
echo
"To : ${to}"
echo
"URL : ${url}"
ffmpeg -headers
"X-Radiko-AuthToken: ${authtoken}"
-y -i
"${url}"
-bsf:a aac_adtstoasc -acodec copy
"${station}_${ft}.m4a"
curl -s -b cookie.txt -o
/dev/null
https:
//radiko
.jp
/ap/member/webapi/member/logout
rm
-f cookie.txt
exit
0