404 Blog Not Found:perl - ニコニコ動画ダウンローダー新認証対応版
上記のスクリプトをコピペしても動かなくなっていたので、調査して対応しました。
といっても、原因を完全に突き止めたわけではないので、応急処置的な部分があります。
use strict; use warnings; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request; use HTTP::Request::Common; use HTTP::Headers; use CGI; use YAML::Syck; use Furl; my $yaml = "$ENV{HOME}/.nicovideo.yml"; my $conf = YAML::Syck::LoadFile($yaml) or die "$yaml:$!"; $ARGV[0] =~ /(sm\d+)$/ or die "$0 [video_id|uri]"; my $video_id = $1; my $ua = LWP::UserAgent->new( keep_alive => 1); $ua->cookie_jar( {} ); warn "login as $conf->{mail}\n"; my $cookies = login($conf); $ua->cookie_jar($cookies); $ua->get("http://www.nicovideo.jp/watch/$video_id"); my $res = $ua->get("http://flapi.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" ); sub login { my ($config) = @_; my $f = Furl->new(max_redirects => 0); my $req = POST 'https://secure.nicovideo.jp/secure/login?site=niconico', $config; my $res = $f->request($req)->as_http_response; $res->request($req); my $cookies = HTTP::Cookies->new(); $cookies->extract_cookies($res); return $cookies; }
変更点は、以下の2点。