Windowsでradikoを録音

★用意するもの
perl以外は同じフォルダに入れちゃって下さい。

○wget
http://users.ugent.be/~bpuype/wget/ でいいと思う。
もしプロクシを使う場合は、同じフォルダに wget.ini を作成し、
http_proxy = 127.0.0.1:8080
https_proxy = 127.0.0.1:8080
な感じで記述

○rtmpdump
rtmpdump.exe libeay32.dll の2つ。ぐぐれば見つかる。

○perl
本家 activestate からダウンロード&インストールしてください。

○スクリプト(radiko_rec.pl)

use POSIX 'strftime';
use Compress::Zlib;
use MIME::Base64;
$outfilename = $ARGV[0].strftime("_%Y%m%d.flv", localtime);
$rectime = $ARGV[1]*60;
$ch = $ARGV[2];
$swf = "http://radiko.jp/player/swf/player_2.0.1.00.swf";
$player = "player.swf";
print "start\n";
system("wget -q -O $player $swf");
if (!-e $player) {print "get player fail."; exit;}
system('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.txt https://radiko.jp/v2/api/auth1_fms');
if (-z "auth1.txt") {print "auth1 fail."; exit;}
open(IN, "auth1.txt");
$auth1 = join("", <IN>);
close(IN);
$authtoken = $1 if ($auth1 =~ /x-radiko-authtoken: ([\w-]+)/i) ;
$offset    = $1 if ($auth1 =~ /x-radiko-keyoffset: (\d+)/i) ;
$length    = $1 if ($auth1 =~ /x-radiko-keylength: (\d+)/i) ;
open(IN, $player);
binmode(IN);
sysread(IN, $buffer, 8);
sysread(IN, $buffer, 327985-8);
close(IN);
$buffer = uncompress($buffer) ;
$key = encode_base64(substr($buffer, 0x13370+$offset, $length), "");
print "authtoken: $authtoken \noffset: $offset length: $length \npartialkey: $key\n";
system('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: '.$key.'" --post-data=\'\\r\\n\' --no-check-certificate --tries=5 --timeout=5 -O auth2.txt https://radiko.jp/v2/api/auth2_fms');
if (-z "auth2.txt") {print "auth2 fail."; exit;}
print "authentication success\n";
system('rtmpdump -v -r "rtmpe://radiko.smartstream.ne.jp" --playpath "simul-stream" --app "'.$ch.'/_defInst_" -W '.$swf.' -C S:"" -C S:"" -C S:"" -C S:'.$authtoken.' --live --flv '.$outfilename.' --stop '.$rectime);

★使い方
radiko_rec.pl 保存名 時間(分) 放送局
例:radiko_rec.pl news 30 FMT
保存名の後に日付と拡張子(_YYYYMMDD.flv)が付きます。
7とXPと2000で動く、と思う。

ちょっとズルをすればperlは本体とdllの2コだけでいい。でもそれは著作権上グレーらしいので公開できない。
ウチで試したときactiveperlのインストールで@INCがうまく設定されなかった。perl.exeをPATHが通ってるからとパス省略しちゃだめなんだな。謎。あ、最初から関連づけに任せればよかったのか。

カテゴリーperl

“Windowsでradikoを録音” への1件の返信

  1. 有益な情報ありがとうございます
    そちらのスクリプトを移植し、windows用コンソールアプリにしてみました これでperlが不要になります

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です