youtube get_video не работает - PullRequest
2 голосов
/ 05 января 2011

Я использовал http://www.youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18, заменил

ID и ПОДПИСЬ на правильные значения.Но я не вижу никакого окна сохранения или загрузки, вместо этого

Пустое окно.

Я на платформе Macintosh с браузером Safari.Помощь оценена.

Ответы [ 4 ]

16 голосов
/ 27 февраля 2011

Самый простой способ получить информацию о видео на YouTube - это получить источник от http://youtube.com/get_video_info?video_id=XXXXXXXX

Я буду использовать PHP в качестве примера обработки этих данных. Используя PHP parse_str () , вы можете назначить все переменные строки хорошему массиву видеоинформации:

$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$id);
parse_str($content, $ytarr);

Затем вся информация сохраняется в $ ytarr . Интересующими переменными будут «fmt_list» и «fmt_map» (которые, похоже, содержат одно и то же afaik). Эта переменная содержит список доступных видеоформатов в соответствии с таблицей здесь: http://en.wikipedia.org/wiki/Youtube#Quality_and_codecs

Предполагая, что вы знаете, какой из этих форматов вы хотите загрузить, вы можете использовать переменную "fmt_url_map" (или $ ytarr ['fmt_url_map'] в этом примере) для доступа к списку ссылок желаемый формат.

Вы можете загружать видео любого формата, используя эти ссылки, но на них распространяется ограниченная пропускная способность YouTube (оптимальная скорость потоковой передачи, используемая YouTube для экономии пропускной способности), поэтому загрузка будет не такой быстрой, как вы могли бы себе представить. Это наводит меня на мысль, что эти ссылки лучше всего использовать для потоковой передачи, а не для загрузки, но я не знаю никакой альтернативы.

6 голосов
/ 19 февраля 2012

В интернете полно неработающих примеров, так что вот сценарий для всех, кому это нужно.Что-то не так с файлами FLV.Их ссылки доставляют файлы .txt, но это хорошо с webm и mp4.Мне это нужно для сайтов pr0n тоже хе-хе

<code><?php

//$debug = true;

if(empty($debug))
    $debug = false;

if(empty($_GET['id']))
    die('no id');
if(!preg_match('/^[A-Z0-9-_]+$/i', $_GET['id']))
    die('invalid character in id');
else
    $id = $_GET['id'];

if(empty($_GET['type']))
    $type = 'mp4';
else
if(!preg_match('/^[A-Z]+$/i', $_GET['type']))
    die('invalid character in type');
else
    $type = strtolower($_GET['type']);


$url = 'http://youtube.com/get_video_info?video_id=';
$key = 'url_encoded_fmt_stream_map';
$content = file_get_contents($url.$id);
parse_str($content, $result);

if($debug)
    {
    echo $url.$id.'<br/>';
    echo $key.'<br/>';
    echo $type.'<br/>';
    echo '<pre>';
    print_r($result);
    echo '
';} else {header ('Content-Type: application / octet-stream');header ('Content-Disposition: attachment; filename = "videofile.'. $ type. '"');} $ type = 'type = video /'.$ type;$ files = explode (', url =', $ result [$ key]);$ files [0] = substr ($ files [0], 4);для ($ i = 0; $ i-1;if ($ debug) {if ($ found) echo '[THIS]';echo ''. $ file. '«;} else {if ($ found) {$ file = explode ('; codecs =', $ file);@readfile ($ файл [0]);перерыв;}}}?>
4 голосов
/ 09 января 2011

YouTube изменил запрос, используемый для получения FLV-файла.Теперь это выглядит как

http://v2.lscache3.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dYSVZMTl9FSkNNOF9ORlJF&fexp=903816&fexp=903813%2C908400&algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1294610400&key=yt1&signature=9C4D194A7F85F0171771486714D3F061ED2924F6.98D10BB190123CADCA3CDF993174D47F8932895F&factor=1.25&id=10af5a6280e42a28

. Вы можете легко получить все параметры, кроме параметра oc, т.е.% 2Coc% 3AU0dYSVZMTl9FSkNNOF9ORlJF из ответа, все еще ища способ его получить.

youtube блокирует ссылку на браузер, поэтому вы не можете использовать ее на сервере.если вы посмотрите исходный код страницы YouTube, вы найдете что-то похожее на указанный выше адрес, но без параметра oc; если вы скопируете его из сетевой панели firebug или из ресурсов chrome, он загрузит фильм flv как «видеоплейбэк».

0 голосов
/ 19 августа 2014

Вы пытаетесь:

$id = "111_fGEdIvs"; //the youtube video ID
//$id = $_GET['id'];

//$format = $_GET['fmt']; //the MIME type of the video. e.g. video/mp4, video/webm, etc.
parse_str(file_get_contents("http://youtube.com/get_video_info?video_id=".$id),$info);     //decode the data
$streams = $info['url_encoded_fmt_stream_map']; //the video's location info
$streams = explode(',',$streams);
parse_str(urldecode($streams[0]),$data);  //In this example I am downloading only the first video

$url=$data['url'];
$sig=$data['signature'];
unset($data['type']);
unset($data['url']);
unset($data['sig']);
$urlPlay= str_replace('%2C', ',' ,$url.'&'.http_build_query($data).'&signature='.$sig); 

echo '<iframe class="youtube-player" type="text/html" width="640" height="385" src="'.$urlPlay.'" allowfullscreen frameborder="0" ></iframe>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...