
初出2007.08.26; 追記2011.08.13
この仕様変更の影響は、ニコニコ動画ダウンローダーにも及びます。というわけで改訂版。
パスワード変更のお知らせ【更新 20:31】 - ニコニコ動画 開発者ブログ(新着情報)以前プレミアムパスを設定していなかった、または設定したが忘れてしまった方はログインフォームの下にある【パスワードを忘れた】から新しいパスワードを設定してください。
とはいっても、変更する必要があったのはわずか一カ所、認証用のURIだけでしたが。
#!/usr/bin/env perl # # $Id: nicoget.pl,v 0.3 2011/08/13 12:12:02 dankogai Exp dankogai $ # original: http://yusukebe.com/tech/archives/20070803/124356.html # use strict; use warnings; use LWP::UserAgent; use CGI; use YAML; my $yaml = "$ENV{HOME}/.nicovideo.yml"; my $conf = YAML::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, cookie_jar => {}, ); $ua->env_proxy(); # set HTTPS_PROXY and HTTP_PROXY to make use of it warn "login as $conf->{mail}\n"; $ua->post( "https://secure.nicovideo.jp/secure/login?site=niconico" => $conf ); $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\n"; $res = $ua->request( HTTP::Request->new( GET => $url ), $video_id ); $res->is_success or die "Failed: " . $res->status_line; my $ext = $res->headers->header('Content-Type') =~ /mp4/ ? 'mp4' : 'flv'; warn "$video_id => $video_id.$ext\n"; rename $video_id => "$video_id.$ext";
よく見るとわかるのですが、認証用のURIはhttps:
ですので、LWPをSSL対応させるために、Crypt::SSLeayもインストールしておいてください。この当たりの事情はLWP付属のREADME.SSLに書いてあります。
Enjoy!
Dan the (Nico|Perl)Monger
追記[2011.08.13
- LWP 6.xからSSLに必要なモジュールが
LWP::Protocol::https
に変わりました。 - ついでにproxy対応その他を追加しました
ま、original: 表記はありますけど、一瞬オリジナルが更新したのかと思っちゃいましたよ。