radikoのタイムフリーを保存する方法

Mac

先日、MacBookのOSをクリーンインストールした際、それまでradikoのタイムフリーの保存に使っていたradikoroの最新版がタイムフリーの保存機能を削除していたことに気づきました。

ループバック機能を使えば、再生しながら保存することは可能なのだがそれだと番組の放送時間と同じだけ時間がかかってしまいます。

他にいいソフトが無いか探してみたのですが、いまいちだったので結局自分でスクリプトを組ことにしました。

スクリプトを組むにあたって、radikoの保存手順を調べてみました。

環境

OS: Mac OS High Sierra
必要なソフト:swftools、ffmpeg (Homebrewより導入)

事前準備

myplayer-release.swfのダウンロード

認証のための事前準備としてswfファイルをダウンロードする

$ curl -O http://radiko.jp/apps/js/flash/myplayer-release.swf

swfファイルから画像ファイルを取り出す

認証にキーとなる画像ファイルをswfextractで取り出す

$ swfextract myplayer-release.swf -b 12 -o authkey.png
$ ls authkey.png
authkey.png

実行

認証1

認証1のURLにアクセスし、HTTPのレスポンスヘッダーから以下の3つの値を取得する

・X-Radiko-AuthToken
・X-Radiko-KeyLength
・X-Radiko-KeyOffset

$ curl 'https://radiko.jp/v2/api/auth1_fms' \
> -XPOST \
> -H 'Content-Type: application/x-www-form-urlencoded' \
> -H 'Referer: http://radiko.jp/' \
> -H 'Pragma: no-cache' \
> -H 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15' \
> -H 'X-Radiko-Device: pc' \
> -H 'X-Radiko-App-Version: 4.0.0' \
> -H 'X-Radiko-User: test-stream' \
> -H 'X-Radiko-App: pc_ts' \
> --data $'\r\n'
X-Radiko-AppType=pc
X-Radiko-AppType2=pc
X-Radiko-AuthToken=AJReLqXV-Oo4ymYpgRlhow
X-Radiko-AuthWait=0
X-Radiko-Delay=15
X-Radiko-KeyLength=16
X-Radiko-KeyOffset=121394

please send a part of key

事前準備でダウンロードしたキーとなる画像ファイルから、X-Radiko-KeyOffsetがオフセット、X-Radiko-KeyLengthが長さとなるデータを抽出する。

UNIXのddコマンドを使って抽出する。なお、抽出したデータはBase64で文字列に変換する。

$ dd if=authkey.png ibs=1 skip=121394 count=16 | base64
16+0 records in
0+1 records out
16 bytes transferred in 0.000669 secs (23916 bytes/sec)
kwMYHYGpTwcgn8OlMjBjyQ==

「kwMYHYGpTwcgn8OlMjBjyQ==」が認証2で使うParticalkeyとなる

認証2

認証2のURLに対して、AuthTokenとParticalkeyをPOSTする

curl 'https://radiko.jp/v2/api/auth2_fms' \
-XPOST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Referer: http://radiko.jp/' \
-H 'Pragma: no-cache' \
-H 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15' \
-H 'X-Radiko-Device: pc' \
-H 'X-Radiko-Authtoken: AJReLqXV-Oo4ymYpgRlhow' \
-H 'X-Radiko-App-Version: 4.0.0' \
-H 'X-Radiko-User: test-stream' \
-H 'X-Radiko-Partialkey: kwMYHYGpTwcgn8OlMjBjyQ==' \
-H 'X-Radiko-App: pc_ts'

JP13,東京都,tokyo Japan

応答として地域の情報が帰ってくると認証は成功。

音声の保存

プレイリスト取得用のURL(https://radiko.jp/v2/api/ts/playlist.m3u8)に対して、クエリとして放送局IDと開始、終了時間を指定してするとプレイリストを取得できます。

なお、lというクエリには15を指定するらしいのですが、意味は不明です。

放送局IDについてはググると出てくると思います。

これをffmpegの引数として渡すことで、音声の保存が可能。

ffmpeg \
> -content_type 'application/x-www-form-urlencoded' \
> -headers 'Referer: http://radiko.jp/' \
> -headers 'Pragma: no-cache' \
> -headers 'X-Radiko-AuthToken: AJReLqXV-Oo4ymYpgRlhow' \
-user_agent 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15' \
> -i 'https://radiko.jp/v2/api/ts/playlist.m3u8?station_id=LFR&l=15&ft=20180518010000&to=20180518030000' \
> -vn -acodec copy -bsf aac_adtstoasc out.m4a

iTunes等で聴けるように、ffmpegのオプションでm4a形式で保存するようにしています。

まとめ

以上の手順によってradikoのタイムフリーを短時間で保存することが出来ます。

なお、最初にログイン処理を挟めばエリアフリーも対応可能です。

エリアフリーの場合はこちら。

radikoのエリアフリーを保存する方法
以前、radikoのタイムフリーを保存する方法を書きましたが、今回はエリアフリー対応版です。基本的な手順は同じですが、異なるのは最初にログイン処理を行ってCookieをローカルに保存し、以降はそのCookieを送信する点です。環...

コメント

タイトルとURLをコピーしました