SVN: toys/rsget.pl: RSGet/Curl.pm Video/Kanal2

glen glen at pld-linux.org
Sat Nov 30 16:58:16 CET 2013


Author: glen
Date: Sat Nov 30 16:58:16 2013
New Revision: 12731

Added:
   toys/rsget.pl/Video/Kanal2
Modified:
   toys/rsget.pl/RSGet/Curl.pm
Log:
add Video::Kanal2


Modified: toys/rsget.pl/RSGet/Curl.pm
==============================================================================
--- toys/rsget.pl/RSGet/Curl.pm	(original)
+++ toys/rsget.pl/RSGet/Curl.pm	Sat Nov 30 16:58:16 2013
@@ -141,6 +141,12 @@
 	my $get_obj = shift;
 	my %opts = @_;
 
+	# XXX hack: handle RTMP parameters with space
+	# http://sourceforge.net/p/curl/bugs/1278/
+	if ($uri =~ m{(?:rtmp|rtmpt?(?:|e|s))://}o) {
+		$uri =~ s/%20(playpath=)/ $1/g;
+	}
+
 	my $curl = new WWW::Curl::Easy;
 
 	my $id = 1;

Added: toys/rsget.pl/Video/Kanal2
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Video/Kanal2	Sat Nov 30 16:58:16 2013
@@ -0,0 +1,68 @@
+# $Id: Delfi 12105 2011-02-03 09:44:17Z glen $
+# Video::Kanal2 - Video getter plugin for rsget.pl
+#
+# 2013 (c) Elan Ruusamäe <glen at pld-linux.org>
+#		This program is free software,
+# you may distribute it under GPL v2 or newer.
+
+name: Kanal2
+short: V:Kanal2
+web: "http://kanal2.ee/"
+uri: qr{kanal2.ee/vaatasaateid/.+\?videoid=\d+}
+# limit slots bacause rtmp support is very bad
+slots: 3
+status: OK 2013-11-30
+
+start:
+	GET( $-{_uri} );
+
+	! m{<div class="title"><a href=".+">(.+?)</a></div>};
+	my $title = $1;
+
+	! m{<div class="time" id="closed_time_block">(.+)</div>};
+	my $time = $1;
+	# strip <b>..</b> tags
+	$time =~ s#</?\w+>##g;
+
+	! m{videoId: '(\d+)'};
+	my $videoId = $1;
+
+	$-{file_name} = de_ml("$title - $time");
+    $-{file_name} =~ s{/}{_}g;
+	my $api_uri = "http://kanal2.ee/video/playerPlaylistApi?id=$videoId";
+
+	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 = $';
+	}
+
+	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;
+
+	my ($ext) = $uri[0] =~ /(\.[^:]+):.+?$/;
+	$-{file_name} .= $ext;
+
+	INFO(name => $-{file_name}, quality => "$uri[3]x$uri[3]\@$uri[2]");
+
+	my $url = $vod_uri . ' playpath='. $uri[0];
+	warn "URL[$url]\n";
+	DOWNLOAD($url, fname => $-{file_name});
+
+# vim: filetype=perl:ts=4:sw=4


More information about the pld-cvs-commit mailing list