Подтвердить что ты не робот

Загрузка видео Youtube с помощью PHP

Я ищу способ загрузки видео Youtube с помощью PHP. Я искал, как это сделать в течение нескольких часов, но, к сожалению, все результаты Google, которые я нахожу, являются старыми годами и больше не работают.

Я был бы признателен, если бы кто-нибудь мог объяснить, как это сделать, или дать ссылку на обновленную статью, которая объясняет это подробно.

Большое спасибо.

4b9b3361

Ответ 1

Первое, что вам нужно сделать, это получить инструмент, например Fiddler и перейти на страницу видео YouTube. В Fiddler вы увидите все файлы, составляющие эту страницу, включая FLV. Теперь вы знаете, что видео не является одним из файлов CSS, и это не файлы изображений. Вы можете игнорировать их. Ищите большой файл. Если вы посмотрите на URL-адрес, он начинается с /videoplayback.

Теперь, как только вы его нашли, выясните, как браузер знал, чтобы получить этот файл. Проделайте поиск через сеансы (Ctrl + F) и найдите "видеозапись". На первой странице вы увидите хит, например http://www.youtube.com/watch?v=123asdf. Если вы выкопаете этот файл, вы увидите тег DIV с идентификатором "watch-player". Внутри этого есть тэг script для настройки флеш-плеера, и внутри него находятся все параметры вспышки. В пределах этого есть URL-адрес видео.

Итак, теперь вы знаете, как использовать свои инструменты, чтобы выяснить, как браузер попал к нему. Как вы дублируете это поведение в PHP?

Сделайте file_get_contents() на странице, которая ссылается на видео. Игнорируйте все, что не было в этом часовом игроке. Проанализируйте код до тех пор, пока не найдете эту переменную, содержащую URL-адрес. Оттуда вам, вероятно, придется отменить этот URL. Если у вас есть это, вы можете сделать file_get_contents() (или какой-либо другой способ загрузки, в зависимости от того, что вы пытаетесь сделать), чтобы получить URL-адрес. это так просто. Ваш код разбора HTML будет самым сложным.

Наконец, имейте в виду, что вы собираетесь делать это может быть незаконным. Проверьте лицензионное соглашение.

Ответ 2

Никто не пишет руководства /howtos, которые устаревают каждые четыре недели. Самое близкое, что вы можете получить, - это проверка реальных методов извлечения в современной реализации. Достаточно читаемо:

http://bitbucket.org/rg3/youtube-dl/raw/2010.08.04/youtube-dl

Если вы не хотите читать/переопределять его, это, очевидно, не просто, вы можете просто запустить его как есть из PHP:

  system("youtube-dl '$url'");

Ответ 3

В последний раз я работал над исправлением одного из расширений brocken chrome для загрузки видео с YouTube. Я исправил его, изменив часть script. (Javascript)

var links = new String();
var downlink = new String();
var has22 = new Boolean();
has22 = false;
var Marked=false;

var FMT_DATA = fmt_url_map;//This is html text that you have to grab. In case of extension it was readily available through:document.getElementsByTagName('script');

var StrSplitter1='%2C', StrSplitter2='%26', StrSplitter3='%3D'; 
if (FMT_DATA.indexOf(',')>-1) { //Found ,
    StrSplitter1=','; 
    StrSplitter2=(FMT_DATA.indexOf('&')>-1)?'&':'\\u0026'; 
    StrSplitter3='='; 
}

var videoURL=new Array(); 
var FMT_DATA_PACKET=new Array();
var FMT_DATA_PACKET=FMT_DATA.split(StrSplitter1); 

for (var i=0;i<FMT_DATA_PACKET.length;i++){
    var FMT_DATA_FRAME=FMT_DATA_PACKET[i].split(StrSplitter2); 
    var FMT_DATA_DUEO=new Array(); 

    for (var j=0;j<FMT_DATA_FRAME.length;j++){
        var pair=FMT_DATA_FRAME[j].split(StrSplitter3); 
        if (pair.length==2) { 
            FMT_DATA_DUEO[pair[0]]=pair[1]; 
        } 
    } 

    var url=(FMT_DATA_DUEO['url'])?FMT_DATA_DUEO['url']:null; 

    if (url==null) continue; 
        url=unescape(unescape(url)).replace(/\\\//g,'/').replace(/\\u0026/g,'&'); 
        var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
        var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
    if (itag==null) continue; 
        var signature=(FMT_DATA_DUEO['sig'])?FMT_DATA_DUEO['sig']:null; 
        if (signature!=null) { 
        url=url+"&signature="+signature; 
    } 
    if (url.toLowerCase().indexOf('http')==0) { // validate URL 

        if (itag == '5') {
            links += '<a href="' + url + '&title=' + username + title + quality240 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v240p">FLV (240p)</span></a>';
        }
        if (itag == '18') {
            links += '<a href="' + url + '&title=' + username + title + quality360 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v360p">MP4 (360p)</span></a>';
        }
        if (itag == '35') {
            links += '<a href="' + url + '&title=' + username + title + quality480 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v480p">FLV (480p)</span></a>';
        }
        if (itag == '22') {
            links += '<a href="' + url + '&title=' + username + title + quality720 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v720p">MP4 HD (720p)</span></a>';
        }
        if (itag == '37') {
            links += ' <a href="' + url + '&title=' + username + title + quality1080 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v1080p">MP4 HD (1080p)</span></a>';
        }
        if (itag == '38') {
            links += '<a href="' + url + '&title=' + username + title + quality4k + '"style="text-decoration:none"><span class="yt-uix-button-menu-item"  id="v4k">MP4 HD (4K)</span></a>';
        }

        FavVideo();
        videoURL[itag]=url; 
        console.log(itag);
    } 
} 

Вы можете получить отдельную видеосвязь из массива videoURL [itag]. Выше логики можно легко преобразовать в PHP.

Расширение можно загрузить из местоположения http://www.figmentsol.com/chrome/ytdw/

Надеюсь, это поможет кому-то. Это рабочее решение (дата: 06-04-2013)