Я работаю над небольшим проектом, который загружает видео на YouTube. Я наткнулся на потрясающий сайт:
http://vimow.com/watch?v=VID_ID_HERE
Удивительно, но каждое видео работает здесь и отлично транслируется с чистыми ссылками на видео на YouTube, но я не могу понять, как этот парень аккуратно извлекает ссылки на видео. (Это работает даже для видео VEVO и Sony, защищенных авторскими правами на YouTube)
Я гуглил и обнаружил, что на youtube установлены определенные шифры для кодирования их URL-путей и есть аналогичный скрипт для их расшифровки. Я не уверен, как это реализовать. Я просто могу создать плохой набор кода, который использует фальшивый пользовательский агент, чтобы просматривать мобильное представление YouTube и получать только ссылку HD MP4.
Как мне это реализовать? Или кто-нибудь может сказать мне, как работает этот сайт vimow?
А для тех, кто интересуется моим кодом до сих пор:
<?php
if(!empty($_GET['url'])) {
$url = "https://www.youtube.com/watch?v=".$_GET['url'];
$ch1= curl_init();
curl_setopt ($ch1, CURLOPT_URL, "$url" );
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch1,CURLOPT_VERBOSE,1);
//curl_setopt($ch1, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5');
curl_setopt ($ch1, CURLOPT_REFERER,'http://www.google.com'); //just a fake referer
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1,CURLOPT_POST,0);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 20);
$htmlContent= curl_exec($ch1);;
$source = urldecode($htmlContent);
$downloadURL = explode('url_encoded_fmt_stream_map', $source);
$downloadURL = substr($downloadURL[1], 0, 15600);
$downloadURL = explode("url=", $downloadURL);
$mp4link = str_split($downloadURL[1]);
$newmp4link = array();
for($i=0;$i<count($mp4link);$i++) {
array_push($newmp4link, $mp4link[$i]);
if($mp4link[$i] == '\\' || $mp4link[$i] == ',') {
break;
}
}
$newmp4link = join("", $newmp4link);
$newmp4link = str_replace("\\","", $newmp4link);
$newmp4link = str_replace(",","", $newmp4link);
$newmp4link = str_replace(";","", $newmp4link);
$ext = "mp4";
function generateRandomString($length) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
$rand = generateRandomString(100);
$target = "tmp/$rand.mp4";
copy($newmp4link, $target);
echo "$newmp4link";
header("Location: tmp/$rand.mp4");
?>
Я один из разработчиков на этом сайте, спасибо за вопросы. Действительно, мы использовали алгоритмы шифрования, чтобы попасть в видео на YouTube, но нам все равно пришлось транслировать большинство видео из-за жестких ограничений. Было меньше 10 000 запросов на ip, до того как я получил пустые документы.
В конце концов, потоковая передача прошла через наши массивные серверные кластеры, и нам удалось расти на их основе.
Я надеюсь, что это очищает старый вопрос и в качестве бонуса наше решение.
Вот как вы получаете ссылки на файлы видео YouTube.
http://youtube.com/get_video_info?video_id=XXX
но этот сайт делает трюк. они не потоковое из YouTube, а Google Docs. поэтому их ссылки в формате http://blah.c.docs.google.com/videoplayback вместо http://blah.c.docs.googlevideo.com/videoplayback. Я также ищу этот метод. так что, если вы можете найти его, дайте мне знать