diff options
author | zakflash <zakflashvideo@gmail.com> | 2012-10-03 12:24:23 -0700 |
---|---|---|
committer | zakflash <zakflashvideo@gmail.com> | 2012-10-03 12:24:23 -0700 |
commit | 2758eecbd2a75a323847cd8d94038cdba00d71da (patch) | |
tree | ab33223a9850973b6c82e89c78f779790275960b | |
parent | 36228b9f9239fd7e7301e194207844cb9fe623ed (diff) | |
parent | 20a4b892eef3df7bc50675fb6af40f3927d41583 (diff) | |
download | get-flash-videos-2758eecbd2a75a323847cd8d94038cdba00d71da.tar.gz |
Merge pull request #76 from psycotica0/master
YouTube fixes, and other stuff from njtaylor's branch.
-rw-r--r-- | lib/FlashVideo/Site/Channel5.pm | 10 | ||||
-rw-r--r-- | lib/FlashVideo/Site/Kanal5play.pm | 2 | ||||
-rw-r--r-- | lib/FlashVideo/Site/Presstv.pm | 50 | ||||
-rw-r--r-- | lib/FlashVideo/Site/Svtplay.pm | 6 | ||||
-rw-r--r-- | lib/FlashVideo/Site/Tv3play.pm | 12 | ||||
-rw-r--r-- | lib/FlashVideo/Site/Youtube.pm | 13 |
6 files changed, 78 insertions, 15 deletions
diff --git a/lib/FlashVideo/Site/Channel5.pm b/lib/FlashVideo/Site/Channel5.pm index bed998a..643b3f6 100644 --- a/lib/FlashVideo/Site/Channel5.pm +++ b/lib/FlashVideo/Site/Channel5.pm @@ -45,6 +45,12 @@ sub find_video { } } +# from script +# <script src="http//wwwcdn.channel5.com/javascript/all.js?" +# playerID is set to 1707001746001 by default or 1707001743001 for firefox +# 138489951601 for MSIE. + $player_id ||= "1707001743001"; + debug "Extracted playerId: $player_id, sessionId: $metadata->{sessionId} videoplayer: $metadata->{videoplayer} publisherId: $metadata->{publisherId} " if $player_id or $video_id; @@ -161,9 +167,9 @@ EOF5 my $episodenumber = $packet->messages->[0]->{value}->{programmedContent}->{videoPlayer}->{mediaDTO}->{customFields}->{episodenumber}; my $show = ($page_url =~ m!/shows/([^/]+)/!i)[0]; my $episode = ($page_url =~ m!/episodes/([^/]+)!i)[0]; - my $filehead = $show . "_Series" . $seasonnumber; + my $filehead = sprintf("%s_S%02d", $show, $seasonnumber); if ( $show ne $episode ) { - $filehead = $filehead . "_Episode" . $episodenumber . "_" . $episode; + $filehead = sprintf("%s_S%02dE%02d_%s", $show, $seasonnumber, $episodenumber, $episode); } my $encode_rate = $encode_rates->{$prefs->{quality}}; if (! defined $encode_rate ) { diff --git a/lib/FlashVideo/Site/Kanal5play.pm b/lib/FlashVideo/Site/Kanal5play.pm index ce51639..2b37ea8 100644 --- a/lib/FlashVideo/Site/Kanal5play.pm +++ b/lib/FlashVideo/Site/Kanal5play.pm @@ -36,7 +36,7 @@ sub find_video { my ($playpath) = $json->{streams}[0]->{source}; my $i; - foreach $i (keys $json->{streams}) { + foreach $i (keys @{ $json->{streams} }) { my ($rate) = int($json->{streams}[$i]->{bitrate}); if($bitrates->{$prefs->{quality}} == $rate){ $playpath = $json->{streams}[$i]->{source}; diff --git a/lib/FlashVideo/Site/Presstv.pm b/lib/FlashVideo/Site/Presstv.pm new file mode 100644 index 0000000..a4aa7db --- /dev/null +++ b/lib/FlashVideo/Site/Presstv.pm @@ -0,0 +1,50 @@ +# Part of get-flash-videos. See get_flash_videos for copyright. +package FlashVideo::Site::Presstv; + +use strict; +use FlashVideo::Utils; +use URI; + +sub find_video { + my ($self, $browser, $embed_url, $prefs) = @_; + + my $page_url = $browser->uri; + my $swfVfy = ($browser->content =~ /SWFObject\('(http.[^']+)'/i)[0]; + my $rtmp = ($browser->content =~ /'streamer',\s*'(rtmp:[^']+)'/i)[0]; + my $file = ($browser->content =~ /'file',\s*'([^']+)'/i)[0]; + my $app = ($rtmp =~ m%rtmp://[^/]+/(.*)$%)[0]; + my $filename = ($file =~ m%/([^/]+)$%)[0]; + $filename =~ s/:/_/g; + + my @rtmpdump_commands; + + my $args = { + app => $app, + pageUrl => $page_url, + swfVfy => $swfVfy, + rtmp => $rtmp, + playpath => $file, + flv => "$filename.flv", + }; + + push @rtmpdump_commands, $args; + + if (@rtmpdump_commands > 1) { + return \@rtmpdump_commands; + } + else { + return $rtmpdump_commands[-1]; + } +} + +sub can_handle { + my($self, $browser, $url) = @_; + + my $host = URI->new($url)->host; + return 1 if $url && $host =~ /^presstv\.(com|ir)$/; + return 1 if $url && $host =~ /\.presstv\.(com|ir)$/; + debug "Presstv.pm no match found\n"; + return 0; +} + +1; diff --git a/lib/FlashVideo/Site/Svtplay.pm b/lib/FlashVideo/Site/Svtplay.pm index b5c682a..56e3ec1 100644 --- a/lib/FlashVideo/Site/Svtplay.pm +++ b/lib/FlashVideo/Site/Svtplay.pm @@ -6,6 +6,7 @@ use warnings; use FlashVideo::Utils; use FlashVideo::JSON; +use HTML::Entities; sub find_video { my ($self, $browser, $embed_url, $prefs) = @_; @@ -14,10 +15,10 @@ sub find_video { if ($browser->uri->as_string !~ m/video\/([0-9]*)/) { die "No video id found in url"; } - my $video_id = $1; + $browser->content =~ m/<title>(.+)<\/title>/; + my $name = decode_entities($1); my $info_url = "http://www.svtplay.se/video/$video_id?output=json"; - $browser->get($info_url); if (!$browser->success) { @@ -25,7 +26,6 @@ sub find_video { } my $video_data = from_json($browser->content); - my $name = $video_data->{context}->{title}; my $bitrate = 0; my $rtmp_url; diff --git a/lib/FlashVideo/Site/Tv3play.pm b/lib/FlashVideo/Site/Tv3play.pm index c11e060..312a9fa 100644 --- a/lib/FlashVideo/Site/Tv3play.pm +++ b/lib/FlashVideo/Site/Tv3play.pm @@ -68,13 +68,11 @@ sub find_video_viasat { }; - return{ - rtmp => $rtmp, - swfVfy => "http://flvplayer-viastream-viasat-tv.origin.vss.viasat.tv/play/swf/player110420.swf", - flv => $flv_filename - }; - - + return { + rtmp => $rtmp, + swfVfy => "http://flvplayer.viastream.viasat.tv/play/swf/player120328.swf", + flv => $flv_filename + }; } 1; diff --git a/lib/FlashVideo/Site/Youtube.pm b/lib/FlashVideo/Site/Youtube.pm index 70e4994..ce84859 100644 --- a/lib/FlashVideo/Site/Youtube.pm +++ b/lib/FlashVideo/Site/Youtube.pm @@ -23,6 +23,12 @@ my @formats = ( sub find_video { my ($self, $browser, $embed_url, $prefs) = @_; + # There are a few different kinds of URLs that end up on the same page + # So, let's canonicalize to the "real" one + if ($browser->content =~ m!<link *rel=['"]canonical['"] *href=['"]([^'"]*)!) { + $embed_url = "http://www.youtube.com$1" + } + if($embed_url !~ m!youtube\.com/watch!) { $browser->get($embed_url); if ($browser->response->header('Location') =~ m!/swf/.*video_id=([^&]+)! @@ -61,7 +67,7 @@ sub find_video { my $video_id; if ($browser->content =~ /(?:var pageVideoId =|(?:CFG_)?VIDEO_ID'?\s*:)\s*'(.+?)'/ - || $browser->content =~ /"video_id": "([^"]+)"/ + || $browser->content =~ /video_id=([^&]+)/ || $embed_url =~ /v=([^&]+)/ || $browser->content =~ /&video_id=([^&]+)&/) { $video_id = $1; @@ -178,6 +184,7 @@ sub parse_youtube_url_encoded_fmt_stream_map { my $format = ""; my $url = ""; + my $signature = ""; foreach my $pair (split /&/, $params) { my ($name, $value) = split /=/, $pair; @@ -185,10 +192,12 @@ sub parse_youtube_url_encoded_fmt_stream_map { $format = $value; } elsif ($name eq "url") { $url = uri_unescape($value); + } elsif ($name eq "sig") { + $signature = $value; } } - $map->{$format} = $url; + $map->{$format} = $url."&signature=".$signature; } return $map; |