2010-09-10 191 views
16

我正在尋找一種方式來下載使用PHP的Youtube視頻。我已經搜索了幾個小時如何做到這一點,但不幸的是,我發現所有Google搜索結果都已過時,並且不再適用。用PHP下載Youtube視頻

如果有人能解釋如何做到這一點,或者給出一個最新文章的鏈接來詳細解釋它,我將不勝感激。

非常感謝。

+0

使用此:https://www.phpclasses.org/package/9092-PHP-Download-files-of-given-YouTube-videos.html – mghhgm 2017-10-05 14:29:09

回答

13

第一你應該做的事情是獲得一個工具,如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()。忽略那些不在那個手錶玩家區的東西。通過代碼解析,直到找到包含該URL的變量。從那裏你可能不得不使用該URL。一旦你有了它,你可以做一個file_get_contents()(或其他一些下載方法,取決於你想要做什麼)來獲取URL。這很簡單。您的HTML解析代碼將是最複雜的。

最後,請記住你即將做的事可能是非法的。檢查EULA。

+1

謝謝對於這樣一個詳細的答案! – 2012-06-15 20:02:19

1

沒有人寫手冊/ howtos每四周就會過時。您可以得到的最接近的是在當代實施中檢查實際提取方法。相當的可讀性:

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

如果你不想通讀/重新實現它,這顯然不是簡單的,你可以只運行它,是從PHP:

system("youtube-dl '$url'"); 
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)