codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!/usr/bin/perl -w use strict; use warnings; use LWP::UserAgent; require HTTP::Cookies; my $argv_size = @ARGV; if ( $argv_size == 0 ) { print "usage: perl tube_mp4.pl [url] <[0|1]>\n"; print "[url] : url which has youtube url\n"; print "<[0|1]> : 0:id as filename 1:title as filename\n"; exit; } my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); $ua->cookie_jar( HTTP::Cookies->new( file => "$ENV{HOME}/.cookies.txt" ) ); $ua->default_headers->push_header( 'Accept-Language' => "no, jp, en" ); my @list = (); ## get url { my $url = $ARGV[0]; my $response = $ua->get($url); if ( !$response->is_success ) { warn $response->status_line; exit; } else { my $content = $response->content; # print $content; while ( $content =~ m/(http\:\/\/(www|jp)\.youtube\.com\/watch\?v=[0-9a-zA-Z_-]{11,12})/g ) { my $youtube_url = $1; push( @list, $youtube_url ); print $youtube_url . "\n"; } my $list_size = @list; if ( $list_size == 0 ) { warn "no youtube URL.\n"; exit; } } } ## get mp4 while (@list) { my $url = pop(@list); my $response = $ua->get($url); if ( !$response->is_success ) { warn $response->status_line; } else { my $content = $response->content; if ( $content =~ /video_id=(.+?)&.*?&t=(.+?)&/ ) { my $id = $1; my $t = $2; my $mp4_url = "http://www.youtube.com/get_video?video_id=$id&t=$t&fmt=18"; #warn "downloading mp4 from $mp4_url"; my $title = $id; ## comment out if you don't want the filename changed to same as the title if ( $argv_size == 1 || ( ( $argv_size > 2 ) && ( $ARGV[1] eq '1' ) ) ) { my $pattern = "<title>(.+)</title>"; if ( $content =~ m/$pattern/i ) { $title = $1; $title =~ s/[\\\/:\*\?\"<>\|]/-/g; } } ## save $ua->mirror( $mp4_url, "${title}.mp4" ); } else { my $msg = ''; { ## get error message my $error_pattern = "<div class=\"(errorBox|watch-highlight-racy-box)\">(.+)<\/div>"; if ( $content =~ m/$error_pattern/i ) { $msg = $1 . ':' . $2; } } $msg =~ s/\r//; $msg =~ s/\n//; $msg =~ s/\t//; $msg =~ s/\ //; warn "Error $url $msg"; } } }
Private
[
?
]
Run code