#!/usr/bin/perl use strict; use warnings; use LWP; use URI; use CGI; # これは指定IDの指定FMTファイルが存在するかどうかチェックだけしている # ここで最終URLを取得していない # なぜなら IP によってトークンが変わるため、サーバで処理できない my $query = CGI->new; my $id = $query->param('id'); my $t = $query->param('t'); 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/watch?v=$id" ); my $res = $ua->request( $req ); my ($dummy, $dt) = split(/SWF_ARGS/,$res->content); my @pairs = split(/\,/,$dt); my $check = ""; my $key = ""; my $url = ""; foreach my $value ( @pairs ) { ($key, $check) = split(/:/,$value); # DEBUG: # print $key, " === ", "'", $check, "'\n"; if ($key eq ' "t"') { $check =~ s/[ |"]//g; $url = "http://www.youtube.com/get_video?video_id=$id&t=$check" . ($fmt ? "&fmt=$fmt":""); last; } } print "Content-type: text/javascript\n\n"; if ($url) { $req = HTTP::Request->new(HEAD=> $url ); $res = $ua->request($req); if ($res->content_type =~ /video|mp4|x-flv/i) { my $retUrl = "http://www.youtube.com/get_video?video_id=$id" . ($fmt ? "&fmt=$fmt":""); print $fnc . '("' . $retUrl . '");'; exit; } } print $fnc . '("");'; exit;