長年レンタルしていた ServersMan のレンタルサーバを解約した。
cronによるラジコの自動録音のShellが置いてあったので、自宅のサーバに移動。
今後も関東のラジオ局を録音したいので、この機会にラジコプレミアムに入会。
エリアフリーでShellで録音ができるように、以下のようにShellを修正。
保存場所は、Windowsクライアントからアクセス出来るように、Sambaのディレクトリの中に保存するように設定。
そのうち、外出先からでも気軽に聞けるように、Webで連携しようかな?
今迄、MediaTombやSubSonicを使ってみたけど、イマイチしっくりこなかったので、単純にApacheを使って、Webのページでファイルを表示させるだけで良いのかな?
まぁ、それはそのうちに。
#!/bin/sh
#
# args check
#
marginTime=2
if [ $# -eq 3 ]; then
station=$1
DURATION=`expr $2 \* 60 \+ ${marginTime} \* 60`
programName=$3
else
echo "usage : $0 station_name duration(minuites) program_name"
exit 1
fi
#
# set var
#
cookiefile=/tmp/cookie.txt
id=ラジコで取得したID
pass=ラジコで設定したパスワード
date=`date '+%Y%m%d'`
playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf
playerfile=./player.swf
keyfile=./authkey.png
filedir=/home/samba/radio
filename=${date}_${station}_${programName}
#
# radiko premium
#
if [ $id ]; then
wget -q --save-cookie=$cookiefile \
--keep-session-cookies \
--post-data="mail=$id&pass=$pass" \
https://radiko.jp/ap/member/login/login
if [ ! -f $cookiefile ]; then
echo "failed login"
exit 1
fi
fi
#
# get player
#
if [ ! -f $playerfile ]; then
wget -q -O $playerfile $playerurl
if [ $? -ne 0 ]; then
echo "failed get player"
exit 1
fi
fi
#
# get keydata (need swftool)
#
if [ ! -f $keyfile ]; then
swfextract -b 12 $playerfile -o $keyfile
if [ ! -f $keyfile ]; then
echo "failed get keydata"
exit 1
fi
fi
if [ -f auth1_fms ]; then
rm -f auth1_fms
fi
#
# access auth1_fms
#
wget -q \
--header="pragma: no-cache" \
--header="X-Radiko-App: pc_ts" \
--header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--post-data='\r\n' \
--no-check-certificate \
--load-cookies $cookiefile \
--save-headers \
https://radiko.jp/v2/api/auth1_fms
if [ $? -ne 0 ]; then
echo "failed auth1 process"
exit 1
fi
#
# get partial key
#
authtoken=`perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)' auth1_fms`
offset=`perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)' auth1_fms`
length=`perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)' auth1_fms`
partialkey=`dd if=$keyfile bs=1 skip=${offset} count=${length} 2> /dev/null | base64`
echo "authtoken: ${authtoken} \noffset: ${offset} length: ${length} \npartialkey:
$partialkey"
rm -f auth1_fms
if [ -f auth2_fms ]; then
rm -f auth2_fms
fi
#
# access auth2_fms
#
wget -q \
--header="pragma: no-cache" \
--header="X-Radiko-App: pc_ts" \
--header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--header="X-Radiko-Authtoken: ${authtoken}" \
--header="X-Radiko-Partialkey: ${partialkey}" \
--post-data='\r\n' \
--load-cookies $cookiefile \
--no-check-certificate \
https://radiko.jp/v2/api/auth2_fms
if [ $? -ne 0 -o ! -f auth2_fms ]; then
echo "failed auth2 process"
exit 1
fi
echo "authentication success"
areaid=`perl -ne 'print $1 if(/^([^,]+),/i)' auth2_fms`
echo "areaid: $areaid"
rm -f auth2_fms
#
# rtmpdump
#
retrycount=0
while :
do
/root/rtmpdump-2.3/rtmpdump -v \
-r "rtmpe://f-radiko.smartstream.ne.jp" \
--playpath "simul-stream.stream" \
--app "${station}/_definst_" \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live \
--stop $DURATION \
-o "/tmp/${filename}"
if [ $? -ne 1 -o `wc -c "/tmp/${filename}" | awk '{print $1}'` -ge 10240 ]; then
break
elif [ ${retrycount} -ge 5 ]; then
echo "failed rtmpdump"
echo "retrycount = ${retrycount}"
exit 1
else
retrycount=`expr ${retrycount} + 1`
fi
done
#
# ffmpeg
#
if [ ! -f "/tmp/${filename}" ]; then
echo "No such file (/tmp/${filename})"
exit 1
fi
ffmpeg -y -i "/tmp/${filename}" -acodec libmp3lame -ab 96k "${filedir}/${filename}.mp3"
if [ $? -ne 0 ]; then
echo "failed ffmpeg process"
exit 1
fi
if [ ! -f "${filedir}/${filename}.mp3" ]; then
echo "No such file (${filedir}/${filename}.mp3)"
exit 1
fi
chown nobody. "${filedir}/${filename}.mp3"
chmod 744 "${filedir}/${filename}.mp3"
rm "/tmp/${filename}"
以上。
これで、TBSのJUNKも録音出来た。
cronによるラジコの自動録音のShellが置いてあったので、自宅のサーバに移動。
今後も関東のラジオ局を録音したいので、この機会にラジコプレミアムに入会。
エリアフリーでShellで録音ができるように、以下のようにShellを修正。
保存場所は、Windowsクライアントからアクセス出来るように、Sambaのディレクトリの中に保存するように設定。
そのうち、外出先からでも気軽に聞けるように、Webで連携しようかな?
今迄、MediaTombやSubSonicを使ってみたけど、イマイチしっくりこなかったので、単純にApacheを使って、Webのページでファイルを表示させるだけで良いのかな?
まぁ、それはそのうちに。
#!/bin/sh
#
# args check
#
marginTime=2
if [ $# -eq 3 ]; then
station=$1
DURATION=`expr $2 \* 60 \+ ${marginTime} \* 60`
programName=$3
else
echo "usage : $0 station_name duration(minuites) program_name"
exit 1
fi
#
# set var
#
cookiefile=/tmp/cookie.txt
id=ラジコで取得したID
pass=ラジコで設定したパスワード
date=`date '+%Y%m%d'`
playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf
playerfile=./player.swf
keyfile=./authkey.png
filedir=/home/samba/radio
filename=${date}_${station}_${programName}
#
# radiko premium
#
if [ $id ]; then
wget -q --save-cookie=$cookiefile \
--keep-session-cookies \
--post-data="mail=$id&pass=$pass" \
https://radiko.jp/ap/member/login/login
if [ ! -f $cookiefile ]; then
echo "failed login"
exit 1
fi
fi
#
# get player
#
if [ ! -f $playerfile ]; then
wget -q -O $playerfile $playerurl
if [ $? -ne 0 ]; then
echo "failed get player"
exit 1
fi
fi
#
# get keydata (need swftool)
#
if [ ! -f $keyfile ]; then
swfextract -b 12 $playerfile -o $keyfile
if [ ! -f $keyfile ]; then
echo "failed get keydata"
exit 1
fi
fi
if [ -f auth1_fms ]; then
rm -f auth1_fms
fi
#
# access auth1_fms
#
wget -q \
--header="pragma: no-cache" \
--header="X-Radiko-App: pc_ts" \
--header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--post-data='\r\n' \
--no-check-certificate \
--load-cookies $cookiefile \
--save-headers \
https://radiko.jp/v2/api/auth1_fms
if [ $? -ne 0 ]; then
echo "failed auth1 process"
exit 1
fi
#
# get partial key
#
authtoken=`perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)' auth1_fms`
offset=`perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)' auth1_fms`
length=`perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)' auth1_fms`
partialkey=`dd if=$keyfile bs=1 skip=${offset} count=${length} 2> /dev/null | base64`
echo "authtoken: ${authtoken} \noffset: ${offset} length: ${length} \npartialkey:
$partialkey"
rm -f auth1_fms
if [ -f auth2_fms ]; then
rm -f auth2_fms
fi
#
# access auth2_fms
#
wget -q \
--header="pragma: no-cache" \
--header="X-Radiko-App: pc_ts" \
--header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--header="X-Radiko-Authtoken: ${authtoken}" \
--header="X-Radiko-Partialkey: ${partialkey}" \
--post-data='\r\n' \
--load-cookies $cookiefile \
--no-check-certificate \
https://radiko.jp/v2/api/auth2_fms
if [ $? -ne 0 -o ! -f auth2_fms ]; then
echo "failed auth2 process"
exit 1
fi
echo "authentication success"
areaid=`perl -ne 'print $1 if(/^([^,]+),/i)' auth2_fms`
echo "areaid: $areaid"
rm -f auth2_fms
#
# rtmpdump
#
retrycount=0
while :
do
/root/rtmpdump-2.3/rtmpdump -v \
-r "rtmpe://f-radiko.smartstream.ne.jp" \
--playpath "simul-stream.stream" \
--app "${station}/_definst_" \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live \
--stop $DURATION \
-o "/tmp/${filename}"
if [ $? -ne 1 -o `wc -c "/tmp/${filename}" | awk '{print $1}'` -ge 10240 ]; then
break
elif [ ${retrycount} -ge 5 ]; then
echo "failed rtmpdump"
echo "retrycount = ${retrycount}"
exit 1
else
retrycount=`expr ${retrycount} + 1`
fi
done
#
# ffmpeg
#
if [ ! -f "/tmp/${filename}" ]; then
echo "No such file (/tmp/${filename})"
exit 1
fi
ffmpeg -y -i "/tmp/${filename}" -acodec libmp3lame -ab 96k "${filedir}/${filename}.mp3"
if [ $? -ne 0 ]; then
echo "failed ffmpeg process"
exit 1
fi
if [ ! -f "${filedir}/${filename}.mp3" ]; then
echo "No such file (${filedir}/${filename}.mp3)"
exit 1
fi
chown nobody. "${filedir}/${filename}.mp3"
chmod 744 "${filedir}/${filename}.mp3"
rm "/tmp/${filename}"
以上。
これで、TBSのJUNKも録音出来た。