2007年08月04日 04:30 [Edit]

perl - 勝手に添削 - ニコニコ動画ダウンローダー

スライドもなんとか上がったので、リハビリもかねて久々の添削。

camel Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusukebe::Tech)
さんざん既出かもしれないけどPerlでニコニコ動画のflvファイルとコメントのxmlファイルをダウンロードするスクリプト。

まずは結果から。

#!/usr/bin/env perl
#
# $Id: nicoget.pl,v 0.1 2007/08/03 19:26:19 dankogai Exp dankogai $
# original: http://yusukebe.com/tech/archives/20070803/124356.html
#

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request;
use HTTP::Headers;
use CGI;
use YAML::Syck;

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 => 4 );
$ua->cookie_jar( {} );

warn "login as $conf->{mail}\n";
$ua->post( "http://www.nicovideo.jp/login" => $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.flv\n";
$res = $ua->request( HTTP::Request->new( GET => $url ), "$video_id.flv" );

以上でvideoのみget。以下を足すことでコメントもget。

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" );

変更点は、以下のとおり。

  • ユーザー名(mail)とパスワード(password)は、~/.nicovideo.ymlに移動。フォーマットは
    mail:     your@host.name
    password: yourpassword
    
  • UAでKeep Aliveを有効に。少しでも鯖をニコニコさせたいので。
  • cookieは、必ずloginするので非保存に。
  • queryの処理はCGIモジュールにおまかせ
  • 一瞬で終わるスクリプトではないので、進捗表示とエラー処理追加
  • ビデオIDだけではなく、フルURIを引数に指定可能に。この方が何かと楽。
  • ファイルへの保存をLWPに直接おまかせ。この方が$res->contentを使うよりメモリー節約になる。
  • コードの大幅な簡素化

Enjoy!

Dan the Nicophile Perl Monger


この記事へのトラックバックURL

この記事へのトラックバック
超!アニメロ、アニメ「最終試験くじら」を無料配信。ニコニコ動画でもBroadBand Watchアニメロに加え、ニワンゴの動画共有サービス「ニコニコ動画(RC)」の2サービス。ニコニコ動画(RC)では、会員IDを取得することでコ、
ニコニコ動画 wikipedia 今日の情報【今日のひとこと】at 2007年08月04日 11:22
Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusuke...
mechanize.rbでニコニコ動画のflvをダウンロード【polog】at 2007年08月04日 23:35
ref:404 Blog Not Found:perl - 勝手に添削 - ニコニコ動画ダウンローダー 以前、Irvine(via OLE) でダウンロードする Perl スクリプトを書いたけど、なんか FLV のダウンロードにも Cookie が必要になっているっぽいので、Firefox の Cookie を使ったり、ファイル名をタイ
[Python]ニコニコ動画ダウンローダ【odz buffer】at 2007年08月05日 00:12
Danさんに初めて勝手に添削された→ 404 Blog Not Found:perl - 勝手に添削 - ニコニコ動画ダウンローダー。 「勝手に」...
Danさんに勝手に添削されて学んだこと【Yusukebe::Tech】at 2007年08月06日 09:33
ネットで稼げる情報がたくさんありました!infotop「ニコニコ動画モバイル」が機能拡充してフルオープンAKIBA PC Hotline!ニワンゴは、ドコモとauの端末向けに提供している動画サイト「ニコニコ動画モバイル」を機能拡充し ??
ニコニコ動画【Yahoooh!NEWS】at 2007年08月15日 15:20
朝から大変です!perl - 勝手に添削 - ニコニコ動画ダウンローダースライドもなんとか上がったので、リハビリもかねて久々の添削。Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusukebe::Tech) さんざん既出かもしれないけどPerlでニコニコ動画のflvファイルと...
ニコニコ動画【キーワード徹底攻略 YouTube 無料 2ちゃんねる 攻略 楽天 mixi レシピ】at 2007年08月16日 09:18
perl - 勝手に添削 - ニコニコ動画ダウンローダースライドもなんとか上がったので、リハビリもかねて久々の添削。Perlでニコニコ動画のflvとコメントxmlをダウンロードする (Yusukebe::Tech) さんざん既出かもしれないけどPerlでニコニコ動画のflvファイルとコメントのxmlフ...
組曲『ニコニコ動画』【トレンド☆チェッカー】at 2007年08月18日 09:41
組曲「ニコニコ動画」笑)久しぶりすぎて録音の仕方とか忘れかけてました(汗)今更ながら組曲「ニコニコ動画」を歌ってみましたー。ニコニコのほうにはこんなブツを投稿する勇気は無かった(汗)というか動画がつくれないというorz音ずれ・でだし間違え・声われ等問題色々ですす...
ニコニコ動画 コマンド【トレンド☆チェッカー】at 2007年08月19日 00:14
この仕様変更の影響は、ニコニコ動画ダウンローダーにも及びます。というわけで改訂版。 パスワード変更のお知らせ【更新 20:31】 - ニコニコ動画 開発者ブログ(新着情報)以前プレミアムパスを設定していなかった、または設定したが忘れてしまった方はログイン....
perl - ニコニコ動画ダウンローダー新認証対応版【404 Blog Not Found】at 2007年08月26日 22:03
Perlやり始めて4年くらい経つんでもう初心者ってほどではないという立場から言ってみます。 「コードとかプログラミングに関することをブログに晒すってすごくいい」と思います。 最近Twitterがあるもんで、情報の発信の力をそちらに取られている感があって若干悲しいので、...
コードとかをブログで晒す意味 - dankogaiと私【ゆーすけべー日記】at 2010年07月08日 09:57