SVN: toys/rsget.pl/Video/Kanal2

glen glen at pld-linux.org
Sat Nov 30 19:21:07 CET 2013


Author: glen
Date: Sat Nov 30 19:21:07 2013
New Revision: 12732

Modified:
   toys/rsget.pl/Video/Kanal2
Log:
kanal2/kanal11: handle static file downloads


Modified: toys/rsget.pl/Video/Kanal2
==============================================================================
--- toys/rsget.pl/Video/Kanal2	(original)
+++ toys/rsget.pl/Video/Kanal2	Sat Nov 30 19:21:07 2013
@@ -8,7 +8,7 @@
 name: Kanal2
 short: V:Kanal2
 web: "http://kanal2.ee/"
-uri: qr{kanal2.ee/vaatasaateid/.+\?videoid=\d+}
+uri: qr{kanal(?:2|11).ee/vaatasaateid/.+\?videoid=\d+}
 # limit slots bacause rtmp support is very bad
 slots: 3
 status: OK 2013-11-30
@@ -16,7 +16,7 @@
 start:
 	GET( $-{_uri} );
 
-	! m{<div class="title"><a href=".+">(.+?)</a></div>};
+	! m{<title>(.+?) - Vaata saateid - .+</title>} or m{<div class="title"><a href=".+">(.+?)</a></div>};
 	my $title = $1;
 
 	! m{<div class="time" id="closed_time_block">(.+)</div>};
@@ -29,40 +29,54 @@
 
 	$-{file_name} = de_ml("$title - $time");
     $-{file_name} =~ s{/}{_}g;
-	my $api_uri = "http://kanal2.ee/video/playerPlaylistApi?id=$videoId";
+	my ($domain) = $-{_uri} =~ m{^(https?://[^/]+)};
+	$-{api_uri} = "$domain/video/playerPlaylistApi?id=$videoId";
 
-	GET( $api_uri, keep_referer => 1 );
+	GET($-{api_uri}, keep_referer => 1 );
 
-	# <streamItems host="rtmp://...">
-	#   <streamItem streamName="....mp4:..." bitrate="700" width="640" height="360" />
-	#   <streamItem streamName="....mp4:..." bitrate="500" width="480" height="270" />
-	# </streamItems >
-	! m{<streamItems host="([^"]+)">(.+)</streamItems\s*>}ms;
-	my $vod_uri = $1;
-	my $items = $2;
-	my @list;
-	while (my($name, $bitrate, $width, $height) = $items =~ m{<streamItem streamName="([^"]+)" bitrate="(\d+)" width="(\d+)" height="(\d+)" />}) {
-		push(@list, [$name, $bitrate, $width, $height]);
-		$items = $';
-	}
+	if (m{<videoUrl><!\[CDATA\[(.+?)\]\]></videoUrl>}) {
+		# <videoUrl><![CDATA[http://....mp4]]></videoUrl>
 
-	ERROR( "no streams found" ) unless @list;
+		$-{file_uri} = $1;
+		my ($ext) = $-{file_uri} =~ /(\.[^.]+)$/;
+		$-{file_name} .= $ext;
+
+		# Don't use INFO(), it resets parsing
+		#INFO(name => $-{file_name});
+
+	} else {
+		# <streamItems host="rtmp://...">
+		#   <streamItem streamName="....mp4:..." bitrate="700" width="640" height="360" />
+		#   <streamItem streamName="....mp4:..." bitrate="500" width="480" height="270" />
+		# </streamItems >
+		! m{<streamItems host="([^"]+)">(.+)</streamItems\s*>}ms;
+		my $vod_uri = $1;
+		my $items = $2;
+		my @list;
+		while (my($name, $bitrate, $width, $height) = $items =~ m{<streamItem streamName="([^"]+)" bitrate="(\d+)" width="(\d+)" height="(\d+)" />}) {
+			push(@list, [$name, $bitrate, $width, $height]);
+			$items = $';
+		}
+
+		ERROR( "no streams found" ) unless @list;
+
+		# find best uri by bitrate
+		my @uri = (undef, 0, 0, 0);
+		foreach my $item (reverse @list) {
+			next unless $item->[2] > $uri[2];
+			@uri = @$item;
+		}
+		ERROR( "could not find best uri" ) unless @uri;
 
-	# find best uri by bitrate
-	my @uri = (undef, 0, 0, 0);
-	foreach my $item (reverse @list) {
-		next unless $item->[2] > $uri[2];
-		@uri = @$item;
-	}
-	ERROR( "could not find best uri" ) unless @uri;
+		my ($ext) = $uri[0] =~ /(\.[^:]+):.+?$/;
+		$-{file_name} .= $ext;
 
-	my ($ext) = $uri[0] =~ /(\.[^:]+):.+?$/;
-	$-{file_name} .= $ext;
+		my $url = $vod_uri . ' playpath='. $uri[0];
+		$-{file_uri} = $url;
 
-	INFO(name => $-{file_name}, quality => "$uri[3]x$uri[3]\@$uri[2]");
+		INFO(name => $-{file_name}, quality => "$uri[2]x$uri[3]\@$uri[1]");
+	}
 
-	my $url = $vod_uri . ' playpath='. $uri[0];
-	warn "URL[$url]\n";
-	DOWNLOAD($url, fname => $-{file_name});
+	DOWNLOAD($-{file_uri}, fname => $-{file_name});
 
 # vim: filetype=perl:ts=4:sw=4


More information about the pld-cvs-commit mailing list