# $Id: YouTube 11320 2010-04-08 14:05:07Z sparky $
# Video::YouTube - Video getter plugin for rsget.pl
#
# 2009-2010 (c) Przemysław Iskra <sparky@pld-linux.org>
#		This program is free software,
# you may distribute it under GPL v2 or newer.

name: YouTube
short: V:YouTube
web: "http://www.youtube.com/"
uri: qr{youtube\.com/watch\?v=.*}
slots: max
status: OK 2010-04-08

unify:
	s/#.*//;
	m{[\?&]v=([-_a-zA-Z0-9]+)(?:&.*?)?$};
	return "http://www.youtube.com/watch?v=$1" if $1;

pre:
	my @fmt = (
		[ 37, "mp4", "1080p" ],
		[ 22, "mp4", "720p" ],
		[ 35, "flv", "HQ" ],
		[ 18, "mp4", "LQ" ],
	);

start:
	GET( $-{_uri} );

	! m{"video_id": "(.*?)"} or m{'VIDEO_ID': '(.*?)'};
	my $id = $1;

	! m{<meta name="title" content="(.*?)">};
	my $name = de_ml( de_ml( $1 ) );
	$name =~ s{/}{_}g;

	! /"fmt_map"\s*:\s*"(.*?)"/ or m{&fmt_map=(\S+?)&};
	my %fmts = map { m{(\d+)/}; $1 => $_ } split ",", uri_unescape( $1 );

	my $fmt = $fmt[ $#fmt ];
	foreach my $f ( @fmt ) {
		if ( exists $fmts{ $f->[0] } ) {
			$fmt = $f;
			last;
		}
	}

	! /"t"\s*:\s*"(.*?)"/ or m{&t=(\S+?)&};
	my $t = $1;

	my $fname = $name . "." . $fmt->[1];
	INFO( name => $fname, fmt => $fmt->[0], quality => $fmt->[2] );

	DOWNLOAD( "http://youtube.com/get_video?video_id=$id&t=$t&fmt=$fmt->[0]",
		fname => $fname );

# vim: filetype=perl:ts=4:sw=4
