Загрузка видео Youtube с PHP

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

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

Огромное спасибо.

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

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

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

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

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

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

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

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

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

в последний раз я работал над исправлением одного из расширений brocken chrome для загрузки видео с YouTube. Я исправил его, изменив часть скрипта. (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); } } в 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); } } в 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)