ラジコの録音、東京の放送を取得する一案(1

2017年9月3日

そもそも、radikoの録音はどうやっているのでしょうか。

まずはトークンを取得します。

TBSラジオの例です。

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 --tries=5 --timeout=5 \
-O auth1_fms https://radiko.jp/v2/api/auth1_fms

これでトークンがとれます。

トークン

cat auth1_fms | perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)'

パーティカルキー

# offset
cat auth1_fms_${OUTFILEPREFIX}_${CHANNEL} | perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)
/i)'
# length
cat auth1_fms_${OUTFILEPREFIX}_${CHANNEL} | perl -ne 'print $1 if(/x-radiko-keylength: (\d+)
/i)'

取得したoffsetとlengthを使って取得します。

dd if=$keyfile bs=1 skip=[offset] count=[length] 2> /dev/null | base64

例)トークン S:wdaDhu6evQheSnXIM8vbGA
パーティカルキー cHHB6YxRZrVhZMRASY1J4w==

ところが、このトークンはまだ使えません。

更に認証を通します。

取得したトークンとパーティカルキーを使います。

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: wdaDhu6evQheSnXIM8vbGA' \
'--header=X-Radiko-Partialkey: cHHB6YxRZrVhZMRASY1J4w==' \
'--post-data=\r\n' --no-check-certificate --tries=5 \
--timeout=5 -O auth2_fms https://radiko.jp/v2/api/auth2_fms

こうして取得したトークンを使えばよいです。

rtmpdump -v -r rtmpe://f-radiko.smartstream.ne.jp --playpath simul-stream.stream \
--app TBS/_definst_ -W http://radiko.jp/player/swf/player_3.0.0.01.swf \
-C S: -C S: -C S: -C S:wdaDhu6evQheSnXIM8vbGA --live \
--flv ./test.flv --stop 30

最後を少し変えれば、そのまま再生もできます。

rtmpdump -v -r rtmpe://f-radiko.smartstream.ne.jp --playpath simul-stream.stream \
--app TBS/_definst_ -W http://radiko.jp/player/swf/player_3.0.0.01.swf \
-C S: -C S: -C S: -C S:wdaDhu6evQheSnXIM8vbGA --live \
--flv - | mplayer -cache 500 -quiet -

mplayerが必要です。