Загрузка видео Youtube с помощью PHP
Я ищу способ загрузки видео Youtube с помощью PHP. Я искал, как это сделать в течение нескольких часов, но, к сожалению, все результаты Google, которые я нахожу, являются старыми годами и больше не работают.
Я был бы признателен, если бы кто-нибудь мог объяснить, как это сделать, или дать ссылку на обновленную статью, которая объясняет это подробно.
Большое спасибо.
Ответы
Ответ 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)