以前からやろうと思っていた、Linuxサーバでのradikoの録音。
最近仕事も落ち着いてきたので、取り組んでみました。
やはり、radikoのIP地域判定の壁が厚い為、東京にあるVPSをレンタルすることにしました。
値段や設定の自由度、root権限が貰える等の利点により、ServersMan@VPSに決めました。
ServersMan@VPSは月490円から始められ、最初の2ヶ月間は無料なのも魅力でした。
OSは、自宅サーバでも使っているRed Hat Enterprise Linuxの無料版ディストリビューションのCentOS。
CentOS以外にも、Debianやubuntuも選べます。
rootパスワード変更、一般ユーザの作成、sshの公開鍵方式の設定、後でもろもろインストールするのを考えて、とりあえずWebminのインストールまで終了。
早速、radikoを録音する為に作業開始。
1.opensslをインストール。radikoを録音するためのrtmpdumpに必要な為、まず始めにインストールします。
# yum -y install openssl-devel
2.rtmpdumpをインストール。これが無いと始まりません。
# wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
# tar xvfz rtmpdump-2.3.tgz
# cd rtmpdump-2.3
# make SYS=posix
# make install
# rtmpdump -h
ヘルプが表示されればOK
# cp -p rtmpdump rtmpgw rtmpsrv rtmpsuck /usr/local/bin
/usr/local/bin 配下へrtmpdump、rtmpgw、rtmpsrv、rtmpsuckをコピー
3.swftoolsをインストール。後程説明するradiko録音用shellスクリプトで必要。
# wget http://www.swftools.org/swftools-0.9.1.tar.gz
# tar xvfz swftools-0.9.1.tar.gz
4.コンパイルに必要なgcc等インストール。
# yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel
5.コンパイルしてビルド
# cd swftools-0.9.1
# ./configure
# make
# make install
6.radiko録音用shellスクリプトで、録音ファイルをmp3に変換するので、ffmpeg をインストール。(RPMforgeリポジトリ導入してない場合は、先にRPMforgeリポジトリを導入する必要あり)
# yum --enablerepo=rpmforge install -y ffmpeg
7.shellスクリプトを作成。
YAMA'S MEMORANDUM さんで紹介されているshellスクリプトを自分の好みと自分の環境に合うようにちょこっと加工しました。
以下、rec_radiko.sh
#!/bin/sh
date=`date -d '1 minutes' '+%Y%m%d%H%M'`
playerurl=http://radiko.jp/player/swf/player_2.0.1.00.swf
playerfile=./player.swf
keyfile=./authkey.png
homedir=/home/hoge/radiko
cpdir=/var/serversman/htdocs/MyStorage/radiko
filename=${date}${1}
if [ $# -eq 2 ]; then
station=$1
DURATION=`expr $2 \* 60`
else
echo "usage : $0 station_name duration(minuites)"
exit 1
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 5 $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_1" \
--header="X-Radiko-App-Version: 2.0.1" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--post-data='\r\n' \
--no-check-certificate \
--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_1" \
--header="X-Radiko-App-Version: 2.0.1" \
--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' \
--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
#
/root/rtmpdump-2.3/rtmpdump -v \
-r "rtmpe://radiko.smartstream.ne.jp" \
--playpath "simul-stream" \
--app "${station}/_defInst_" \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live \
--stop $DURATION \
-o "/tmp/${filename}"
ffmpeg -y -i "/tmp/${filename}" -acodec libmp3lame -ab 128k "${homedir}/${filename}.mp3"
chown nobody. "${homedir}/${filename}.mp3"
chmod 744 "${homedir}/${filename}.mp3"
cp -p "${homedir}/${filename}.mp3" "${cpdir}/${filename}.mp3"
rm "/tmp/${filename}"
ここまで。
引数1で放送局を指定し、引数2で時間(分)を指定し実行します。
これでビットレート128kのmp3ファイルが完成です。
ユーザhogeのホームディレクトリ配下のradiko/にファイル保存し、そのファイルをServersMan@VPSのMyStorage/radiko/にコピーしています。
これで、出先からでもいつでもファイルを取り出すことも聴くことも出来ます。
すごく便利。
8.後は、crontabに登録し終了。
# crontab -e
59 00 * * 2 /root/rec_radiko.sh TBS 122 # 月曜 JUNK 伊集院光 深夜の馬鹿力
29 21 * * 3 /root/rec_radiko.sh QRR 32 # オードリーのシャンプーおじさん
59 00 * * 4 /root/rec_radiko.sh TBS 122 # 水曜 JUNK 山里亮太の不毛な議論
59 00 * * 5 /root/rec_radiko.sh TBS 122 # 木曜 JUNK おぎやはぎのメガネびいき
59 00 * * 0 /root/rec_radiko.sh LFR 122 # オードリーのオールナイトニッポン
こんな感じです。放送開始1分前に録音を開始し、番組終了1分後に録音が終了するように設定しています。
以上です。
この次は、sshを使用して、ServersMan@VPSから、自宅サーバへ録音したファイルをバックアップする方法を紹介する予定です。
最近仕事も落ち着いてきたので、取り組んでみました。
やはり、radikoのIP地域判定の壁が厚い為、東京にあるVPSをレンタルすることにしました。
値段や設定の自由度、root権限が貰える等の利点により、ServersMan@VPSに決めました。
ServersMan@VPSは月490円から始められ、最初の2ヶ月間は無料なのも魅力でした。
OSは、自宅サーバでも使っているRed Hat Enterprise Linuxの無料版ディストリビューションのCentOS。
CentOS以外にも、Debianやubuntuも選べます。
rootパスワード変更、一般ユーザの作成、sshの公開鍵方式の設定、後でもろもろインストールするのを考えて、とりあえずWebminのインストールまで終了。
早速、radikoを録音する為に作業開始。
1.opensslをインストール。radikoを録音するためのrtmpdumpに必要な為、まず始めにインストールします。
# yum -y install openssl-devel
2.rtmpdumpをインストール。これが無いと始まりません。
# wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
# tar xvfz rtmpdump-2.3.tgz
# cd rtmpdump-2.3
# make SYS=posix
# make install
# rtmpdump -h
ヘルプが表示されればOK
# cp -p rtmpdump rtmpgw rtmpsrv rtmpsuck /usr/local/bin
/usr/local/bin 配下へrtmpdump、rtmpgw、rtmpsrv、rtmpsuckをコピー
3.swftoolsをインストール。後程説明するradiko録音用shellスクリプトで必要。
# wget http://www.swftools.org/swftools-0.9.1.tar.gz
# tar xvfz swftools-0.9.1.tar.gz
4.コンパイルに必要なgcc等インストール。
# yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel
5.コンパイルしてビルド
# cd swftools-0.9.1
# ./configure
# make
# make install
6.radiko録音用shellスクリプトで、録音ファイルをmp3に変換するので、ffmpeg をインストール。(RPMforgeリポジトリ導入してない場合は、先にRPMforgeリポジトリを導入する必要あり)
# yum --enablerepo=rpmforge install -y ffmpeg
7.shellスクリプトを作成。
YAMA'S MEMORANDUM さんで紹介されているshellスクリプトを自分の好みと自分の環境に合うようにちょこっと加工しました。
以下、rec_radiko.sh
#!/bin/sh
date=`date -d '1 minutes' '+%Y%m%d%H%M'`
playerurl=http://radiko.jp/player/swf/player_2.0.1.00.swf
playerfile=./player.swf
keyfile=./authkey.png
homedir=/home/hoge/radiko
cpdir=/var/serversman/htdocs/MyStorage/radiko
filename=${date}${1}
if [ $# -eq 2 ]; then
station=$1
DURATION=`expr $2 \* 60`
else
echo "usage : $0 station_name duration(minuites)"
exit 1
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 5 $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_1" \
--header="X-Radiko-App-Version: 2.0.1" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--post-data='\r\n' \
--no-check-certificate \
--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_1" \
--header="X-Radiko-App-Version: 2.0.1" \
--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' \
--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
#
/root/rtmpdump-2.3/rtmpdump -v \
-r "rtmpe://radiko.smartstream.ne.jp" \
--playpath "simul-stream" \
--app "${station}/_defInst_" \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live \
--stop $DURATION \
-o "/tmp/${filename}"
ffmpeg -y -i "/tmp/${filename}" -acodec libmp3lame -ab 128k "${homedir}/${filename}.mp3"
chown nobody. "${homedir}/${filename}.mp3"
chmod 744 "${homedir}/${filename}.mp3"
cp -p "${homedir}/${filename}.mp3" "${cpdir}/${filename}.mp3"
rm "/tmp/${filename}"
ここまで。
引数1で放送局を指定し、引数2で時間(分)を指定し実行します。
これでビットレート128kのmp3ファイルが完成です。
ユーザhogeのホームディレクトリ配下のradiko/にファイル保存し、そのファイルをServersMan@VPSのMyStorage/radiko/にコピーしています。
これで、出先からでもいつでもファイルを取り出すことも聴くことも出来ます。
すごく便利。
8.後は、crontabに登録し終了。
# crontab -e
59 00 * * 2 /root/rec_radiko.sh TBS 122 # 月曜 JUNK 伊集院光 深夜の馬鹿力
29 21 * * 3 /root/rec_radiko.sh QRR 32 # オードリーのシャンプーおじさん
59 00 * * 4 /root/rec_radiko.sh TBS 122 # 水曜 JUNK 山里亮太の不毛な議論
59 00 * * 5 /root/rec_radiko.sh TBS 122 # 木曜 JUNK おぎやはぎのメガネびいき
59 00 * * 0 /root/rec_radiko.sh LFR 122 # オードリーのオールナイトニッポン
こんな感じです。放送開始1分前に録音を開始し、番組終了1分後に録音が終了するように設定しています。
以上です。
この次は、sshを使用して、ServersMan@VPSから、自宅サーバへ録音したファイルをバックアップする方法を紹介する予定です。