★用意するもの
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が通ってるからとパス省略しちゃだめなんだな。謎。あ、最初から関連づけに任せればよかったのか。