what_me ([info]what_me) wrote,

Youtube downloader

Понадобилось, вдруг, скачать несколько роликов с ютуба, оказалось нечем. Мой старый не работает, Злобинский тоже не работает, youtube-dl из убунтовского репозитория тоже не работает. Пришлось делать новый.

#!/usr/bin/perl --
#
# ytd.pl -- youtube downloader

use strict;
use warnings;
use LWP::UserAgent;
use URI::Escape;

die "Usage: ytd.pl VideoURL\n" unless @ARGV;

my $videourl = shift;
my $ua = LWP::UserAgent->new;
my $response = $ua->get($videourl);
my ($outflv) = $response->content =~ m{<meta name="title" content="([^"]+)">};

die "Can't find video title\n" unless $outflv;

while( -e "$outflv.flv" ) {
  $outflv = $outflv =~ /_(\d+)$/ ? "${`}_" . ($1+1) :  "${outflv}_1";
}

my $link = [ map { map {split '\|'} split ',', uri_unescape($_) } $response->content =~ m{fmt_url_map=([^&]+)} ]->[1];
die "Can't find video link\n" unless $link;

$| = 1;

print "Saving video to $outflv.flv...\n";

my ($received_size, $i) = (0, 0);
open my $fh, '>' , "$outflv.flv" or die $!;
binmode $fh;
$ua->get($link, ':content_cb' => sub { my ($data, $response) = @_;
                                       $received_size += length $data;
                                       print {$fh} $data;
                                       printf "\r" . [qw(- \\ | /)]->[++$i % 4] . ' %d%%         ',
                                         100 * $received_size / ($response->header('Content-Length') || 1);
                                     });
print "\nDone.\n";

Tags: perl

  • Post a new comment

    Error

    Your reply will be screened

  • 6 comments

[info]rassie.org

December 30 2010, 21:55:44 UTC 1 year ago

http://search.cpan.org/~monsieur/App-get_flash_videos/

[info]what_me

December 30 2010, 22:28:12 UTC 1 year ago

Спасибо, может пригодиться

[info]alexchorny

January 5 2011, 15:50:19 UTC 1 year ago

Тоже недавно использовал - работает нормально и поддерживает не только youtube

[info]fas_tm

January 9 2011, 14:16:58 UTC 1 year ago

Перловщики вечно себе выдумывают трудности :)
Просто добавьте "ss" перед адресом ссылки и скачивайте.
Например если ролик:
http://www.youtube.com/watch?v=AkPT2TOqSjI
надо сделать
www.ssyoutube.com/watch?v=AkPT2TOqSjI

[info]what_me

January 9 2011, 16:59:51 UTC 1 year ago

/мы ж были на ты, хоть на брундершафт и не пили/

Спасибо, просто в течении 10 минут ссылка на этот сайт мне попасться не успела.

[info]fas_tm

January 9 2011, 17:30:13 UTC 1 year ago

Ок :)
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…