卡片召唤师
精华
|
战斗力 鹅
|
回帖 0
注册时间 2006-11-29
|
我日文烂透,总之这个网页里面有NICO的外联动画还带弹幕,界面也是NICO的界面呢
具体页面在这里
大家一起研究一下啊
要是我火星了也给我解释一下方法啊
下面这个就是我看到可以转NICO的地址
http://d.hatena.ne.jp/ucpda/
***********************************************************************8
2008-03-10 ニコニコ動画(SP1)のFLVダウンローダPerl版
ニコニコ動画(SP1)対応のFLVダウンローダPerl版
ニコニコ動画/Youtube
まめ畑さんのサイトを参考に,Perlを使って動作するFLVダウンローダを書いてみました.WindowsでもActivePerlとwgetが利用できる環境なら,動作すると思います.必要最低限の処理だけで,例外対処などは行っていません.拍子抜けするほど簡単なプロセスでダウンロードできるので,その日のランキング上位を寝ている間にダウンロード,とかリスト化されたURLの一括ダウンロード,とかいろんなことが出来そう.
プロセス
1.ログインページにPOSTデータを送りcookieその1をもらう
2.cookieその1を使い、動画ページにアクセスし、動画毎に発行されるcookieその2をもらう
3.cookieその1を使い、FLVの実体情報がかかれた情報を取得する
4.cookieその2を使い、FLVの実体情報を元にFLVファイルをダウンロードする
スクリプト
#!/usr/bin/perl
# ニコニコ動画(SP1) 簡易ダウンローダ ncget.pl
# USAGE: ./ncget.pl http://www.nicovideo.jp/watch/smXXXX
## 初期設定(必須)
$email = &uenc("foo\@baa.com");
$pass = &uenc("MyPassword");
# その他設定(デフォルトのままでおk)
$SaveDir = ".";
$target = $ARGV[0];
$loginURL = "https://secure.nicovideo.jp/secure/login?site=niconico";
$UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
if( $target =~ /http:\/\/www\.nicovideo\.jp\/watch\/sm[0-9]+/ ){
$id = $target;
$id =~ s/http:\/\/www\.nicovideo\.jp\/watch\///;
$opt = "-q --user-agent='${UserAgent}' --no-check-certificate --cookies=on --keep-session-cookies";
print "ニコニコ動画にログインしています...";
`wget ${opt} --load-cookies=cookie.nctmp --save-cookies=cookie.nctmp -O /dev/null --post-data='next_url=&mail=${email}&password=${pass}' '${loginURL}'`;
print "done.\n\n";
print "動画ページのcookieを生成しています...";
`wget ${opt} --load-cookies=cookie.nctmp --save-cookies=smcookie.nctmp -O /dev/null '$target'`;
print "done.\n\n";
print "FLVファイルの実体情報を取得しています...";
`wget ${opt} --load-cookies=cookie.nctmp -O getflv.nctmp 'http://www.nicovideo.jp/api/getflv?v=${id}'`;
print "done.\n\n";
open(FH,"getflv.nctmp");
$data = <FH>;
close FH;
chomp($data);
$data = &udec($data);
($thread_id,$l,$url,$link,$ms,$user_id,$is_premium,$nickname,$time,$done) = split("&",$data);
print "--動画情報------------------------\n";
print "$thread_id\n";
print "$url\n";
print "$link\n";
print "$ms\n";
print "$user_id $is_premium $nickname\n";
print "----------------------------------\n\n";
$url =~ s/url\=//g;
$opt =~ s/\-q//g;
print "FLVファイルをダウンロードします...\n\n";
`wget ${opt} --load-cookies=smcookie.nctmp -O '${SaveDir}/${id}.flv' '$url'`;
print "ダウンロードが完了しました。\n";
`rm *.nctmp`;
}else{
print "Error : $ARGV[0]\n";
print "ニコニコ動画のURLを指定してください。\n";
}
exit;
sub uenc($) {
my $str = shift;
$str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$str =~ tr/ /+/;
return $str;
}
sub udec($) {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return $str;
}
独自にcookieを保持するので,ブラウザで見ていたログインセッションが終了されてしまう部分が難点.単にFLVをダウンロードしたいだけならSmileDownloader(Windows用)がオススメです.
また,ファイル名を動画タイトルにしようと思ったんだけど,どうも上手くいかない.原因は取得したUTF-8のページをnkf -s | grep ~で処理してる部分だと思うんだけど,再生ページのMETAタグに変なコードが混じる場合があり,そこでコケてるんだろうな.あとでもうちょっと調べてみるかな.
ちなみにシェルスクリプトでFireFoxのcookieを使って取得し,日本と台湾版に対応しているのはこちらにあるみたいです.
以下のサイトを参考させていただきました
URLエンコードとデコード http://sonic64.com/2003-08-31.html
二重認証の仕組み http://d.hatena.ne.jp/con_mame/20080205
追加:その他関連リンク
ニコニコ動画 swf、mp4、flvをダウンロードする - unnecessary words・・・Ruby版 |
|