#!/usr/bin/perl use strict; use warnings; use LWP; use URI; use CGI; my $query = CGI->new; my $id = $query->param('id'); my $fmt = $query->param('fmt'); my $fnc = $query->param('callback'); my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET=> "http://www.youtube.com/get_video_info?video_id=$id" ); my $res = $ua->request( $req ); my @pairs = split(/&/,$res->content); my ($name, $val); my %querys; for ( @pairs ) { ($name, $val) = split(/=/, $_); $querys{ $name } = $val; } my $t = $querys{'token'}; my $uri = ""; if ($t) { my $urlText = "http://www.youtube.com/get_video?video_id=$id&t=$t" . ($fmt ? "&fmt=$fmt":""); $req = new HTTP::Request POST => $urlText; $req->content_type('application/x-www-form-urlencoded'); $req->content('match=www&errors=0'); $res = $ua->request($req); $uri = URI->new($res->header('Location')); } print "Content-type: text/javascript\n\n"; if ($uri) { $req = HTTP::Request->new(HEAD=> $uri ); $res = $ua->request($req); if ($res->content_type =~ /video|mp4|x-flv/i) { print $fnc . '("' . $uri . '");'; exit; } } print $fnc . '("");';