2010-09-10 2 views
16

Sto cercando un modo per scaricare i video di Youtube utilizzando PHP. Ho cercato come farlo per ore ma sfortunatamente tutti i risultati di Google che ho trovato sono vecchi di anni e non funzionano più.Download di video di Youtube con PHP

Apprezzerei se qualcuno potesse spiegare come farlo, o dare un collegamento ad un articolo aggiornato che lo spiega in dettaglio.

Grazie mille.

+0

uso questo: https://www.phpclasses.org/package/9092-PHP-Download-files-of-given-YouTube-videos.html – mghhgm

risposta

13

La prima cosa che dovresti fare è prendere uno strumento come Fiddler e visitare una pagina video di YouTube. In Fiddler, vedrai tutti i file che compongono quella pagina, incluso lo stesso FLV. Ora, sai che il video non è uno dei file CSS, né i file immagine. Puoi ignorare quelli. Cerca un file grande. Se si guarda l'URL, inizia con /videoplayback.

Ora, una volta trovato, scopri come sapeva il browser per ottenere quel file. Fai una ricerca attraverso le sessioni (Ctrl + F) e cerca "videoplayback". Verrà visualizzato un hit nella prima pagina, come http://www.youtube.com/watch?v=123asdf. Se passi attraverso quel file, vedrai un tag DIV con l'ID di "watch-player". All'interno di questo c'è un tag script per configurare il flash player, e al suo interno ci sono tutti i parametri del flash. All'interno di questi è l'URL del video.

Quindi ora sai come utilizzare i tuoi strumenti per capire come il browser è arrivato. Come si duplica questo comportamento in PHP?

Fare un file_get_contents() nella pagina che fa riferimento al video. Ignora tutto non in quel div del watch-player. Analizza il codice fino a trovare quella variabile che contiene l'URL. Da lì probabilmente dovrai rimuovere l'URL. Una volta che hai, puoi fare un file_get_contents() (o qualche altro metodo di download, a seconda di cosa stai cercando di fare) per ottenere l'URL. è così semplice Il tuo codice di analisi HTML sarà il più complesso.

Infine, tieni presente che ciò che stai per fare potrebbe essere illegale. Controlla l'EULA.

+1

Grazie per una risposta così dettagliata! –

1

Nessuno scrive manuali/manuali che diventano obsoleti ogni quattro settimane. Il più vicino che puoi ottenere è l'ispezione dei metodi di estrazione attuali in un'implementazione contemporanea. Abbastanza leggibile:

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

Se non si vuole leggere/reimplementare esso, è, ovviamente, non semplice, si può solo funzionare così com'è da PHP:

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

l'ultima volta che stavo lavorando per risolvere una delle estensioni di Chrome Brocken per scaricare il video di YouTube. L'ho risolto modificando la parte dello 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); 
    } 
} 

È possibile ottenere un collegamento video separato dall'array videoURL [itag]. Sopra logica può essere convertito in PHP facilmente

L'estensione può essere scaricato dalla posizione http://www.figmentsol.com/chrome/ytdw/

Spero che questo avrebbe aiutato qualcuno. Questa soluzione funziona (data: 2013/06/04)