我正在寻找一种使用PHP下载Youtube视频的方法。我已经搜索了几个小时如何做到这一点但不幸的是我发现的所有谷歌搜索结果已经存在多年了,不再适用了。
如果有人可以解释如何执行此操作,或者提供最新文章的链接,我将不胜感激。
非常感谢。
答案 0 :(得分:16)
您应该做的第一件事是获取Fiddler之类的工具并访问YouTube视频页面。在Fiddler中,您将看到构成该页面的所有文件,包括FLV本身。现在,您知道视频不是CSS文件之一,也不是图像文件。你可以忽略这些。寻找一个大文件。如果您查看网址,则以/videoplayback
开头。
现在,一旦找到它,找出浏览器知道如何获取该文件。搜索会话(Ctrl + F)并查找“videoplayback”。您会看到第一页上的热门内容,例如http://www.youtube.com/watch?v=123asdf。如果您浏览该文件,您将看到ID为“watch-player”的DIV标记。其中有一个脚本标签来设置flash播放器,其中包括所有flash参数。其中包括视频的网址。
所以现在你知道如何使用你的工具来弄清楚浏览器是如何实现它的。你如何在PHP中复制这种行为?
在引用该视频的页面上执行file_get_contents()
。忽略那些不在那个看守玩家div中的东西。解析代码,直到找到包含URL的变量。从那里你可能不得不忘记那个URL。获得后,您可以执行file_get_contents()
(或其他一些下载方法,具体取决于您要执行的操作)来获取URL。就这么简单。您的HTML解析代码将是最复杂的。
最后,请记住您将要做的事情可能是非法的。查看EULA。
答案 1 :(得分:2)
没有人会写每四周过时的手册/ howtos。您可以获得的最接近的是检查当前实现中的实际提取方法。相当可读:
http://bitbucket.org/rg3/youtube-dl/raw/2010.08.04/youtube-dl
如果您不想阅读/重新实现它,那显然不简单,您可以从PHP中按原样运行它:
system("youtube-dl '$url'");
答案 2 :(得分:1)
上次我正在修复其中一个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);
}
}
您可以从videoURL [itag]数组中获取单独的视频链接。 以上逻辑可以轻松转换为PHP
可以从位置http://www.figmentsol.com/chrome/ytdw/
下载扩展程序我希望这会对某人有所帮助。这是有效的解决方案(日期:06-04-2013)