ニコニコ動画ダウンローダー
404 Blog Not Found:perl - ニコニコ動画ダウンローダー新認証対応版
からの変更点は
- YAML解析ライブラリは(私がYAML::Syckをインストールしていないので)YAMLに変更
- STDINから動画IDを改行区切りで複数渡すことにした
- nmから始まるIDの動画もあるので動画IDの形式チェックはやらない
use strict; use warnings; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request; use HTTP::Headers; use CGI; use YAML; sub get_nicovideo($$){ my $ua = shift; my $video_id = shift; $ua->get("http://www.nicovideo.jp/watch/$video_id"); my $res = $ua->get("http://www.nicovideo.jp/api/getflv?v=$video_id"); my $q = CGI->new( $res->content ); my $url = $q->param('url') or die "Failed: " . $res->content; warn "$url => $video_id.flv\n"; $res = $ua->request( HTTP::Request->new( GET => $url ), "$video_id.flv" ); warn "saving comments as $video_id.xml\n"; my $header = HTTP::Headers->new; $header->header( Content_Type => 'text/xml' ); my $thread_id = $q->param('thread_id'); my $req = HTTP::Request->new( POST => $q->param('ms'), $header, qq{<thread res_from="-500" version="20061206" thread="$thread_id" />} ); $res = $ua->request( $req, "$video_id.xml" ); } my $yaml = "nicovideo.yml"; my $conf = YAML::LoadFile($yaml) or die "$yaml:$!"; my $ua = LWP::UserAgent->new( keep_alive => 1 ); $ua->cookie_jar( {} ); warn "login as $conf->{mail}\n"; $ua->post( "https://secure.nicovideo.jp/secure/login?site=niconico" => $conf); while(<STDIN>){ chomp; my $video_id = $_; get_nicovideo($ua, $video_id); }
でlistファイルに動画のIDを1行1つの形式で記述し、こんな感じのバッチファイルを作って起動。
perl nicoget.pl < list