syuichi-tsuji
4/19/2011 - 4:52 PM

ニコニコ動画で配信されているアニメをダウンロードする

ニコニコ動画で配信されているアニメをダウンロードする

use strict;
use warnings;
use File::Basename;
use File::Spec;
use LWP::UserAgent;
use URI;
use WWW::NicoVideo::Download;
use Web::Scraper;
use XML::Simple;

my $client = WWW::NicoVideo::Download->new(
    email => '',
    password => '',
);

my @url = (
    'http://ch.nicovideo.jp/channel/ch60001', # シュタインズ・ゲート
    'http://ch.nicovideo.jp/channel/ch60005', # 日常
    'http://ch.nicovideo.jp/channel/ch60008', # 花咲くいろは
    'http://ch.nicovideo.jp/channel/ch60009', # そふてにっ
    'http://ch.nicovideo.jp/channel/ch60010', # アスタロッテのおもちゃ!
    'http://ch.nicovideo.jp/channel/ch60011', # Dororonえん魔くん メ~ラめら
    'http://ch.nicovideo.jp/channel/ch60012', # 変ゼミ
    'http://ch.nicovideo.jp/channel/ch60014', # よんでますよ、アザゼルさん。
    'http://ch.nicovideo.jp/channel/ch60015', # Aチャンネル
);

my $ua = LWP::UserAgent->new();
for my $url (@url) {
    my $video = scraper {
        process '.g-video-title .g-video-link', title => 'TEXT', url => '@href';
    }->scrape(URI->new($url));

    my ($video_id) = $video->{url} =~ m!/watch/(\w+)!;
    my $res = $ua->get("http://ext.nicovideo.jp/api/getthumbinfo/$video_id");
    my $ext = XMLin($res->content)->{thumb}{movie_type};
    my $file = File::Spec->catfile(dirname(__FILE__), "$video->{title}.$ext");
    next if -e $file;

    warn "download $file\n";
    open my $fh, '>', $file or die $!;
    $client->download($video_id, sub {
        my ($data, $res, $proto) = @_;
        print {$fh} $data;
    });
}