2010-08-01 5 views
0

Je me demandais s'il y avait un moyen, après tous les changements sur YouTube au cours des derniers mois, d'écrire un script qui permet de télécharger des vidéos? Je suis conscient du fait que les méthodes qui ont fonctionné il y a un an ne sont plus pertinentes.Téléchargement de vidéos depuis YouTube avec PHP - encore possible?

+2

Remarque: Cela constitue une violation des conditions d'utilisation de YouTube. –

Répondre

3

Oui, il y a encore un moyen. Je ne vais pas écrire tout le script pour vous, mais je vais au moins vous écrire la fonction qui fournit le lien de téléchargement de YouTube.

D'accord, vous aurez besoin de CURL installé pour cela.

/* Developed by User - WebEntrepreneur @ StackOverlow.com */ 

function ___get_youtube_video($youtube_url) 
{ 
    if(eregi('youtube.com', $youtube_url)) 
    { 
     preg_match('/http:\/\/(.+)youtube.com\/watch(.+)?v=(.+)/', $youtube_url, $youtube_id_regex); 
     $youtube_id = ($youtube_id_regex[3]) ? $youtube_id_regex[3] : ''; 

     if(!$youtube_id) 
     { 
      return INVALID_YOUTUBE_ID; 
     } 

     if(eregi('\&', $youtube_id)) 
     { 
      $youtube_id_m = explode('&', $youtube_id); 
      foreach($youtube_id_m as $slices) 
      { 
       $youtube_id = $slices; 
       break; 
      } 
     } 

    } else { 
     $youtube_id = ($youtube_url); 
    } 

    $ping = ___get_curl("http://www.youtube.com/watch?v={$youtube_id}&feature=youtu.be"); 

    if(!$ping) 
    { 
     return YOUTUBE_UNAVAILABLE; 
    } 

    $ping_scan = nl2br($ping); 
    $ping_scan = explode('<br />', $ping_scan); 

    if(eregi('= null', $ping_scan[36]) or !$ping_scan[36]) 
    { 
     return YOUTUBE_TOO_MANY_REQUESTS; 
    } 

    $ping_scan = str_replace("\n", "", $ping_scan[36]); 
    $ping_scan = str_replace("    img.src = '", "", $ping_scan); 
    $out[1] = str_replace("';", "", $ping_scan); 

    $sub_ping = ___get_curl("http://gdata.youtube.com/feeds/api/videos/{$youtube_id}"); 

    preg_match('/<title type=\'text\'>(.+)<\/title>/', $sub_ping, $inout); 

    $inout = $inout[1]; 

    if(!$out[1]) 
    { 
     return VERSION_EXPIRED; 
    } 

    $out[1] = str_replace("generate_204", "videoplayback", $out[1]); 
    $out[1] = str_replace("\\/", "/", $out[1]); 
    $out[1] = rawurldecode($out[1]); 

    if($inout) 
    { 
     $out[1] .= "&file=".urlencode($inout).".mp4"; 
     $filename = urlencode($inout).".mp4"; 
    } 

    header("Content-Disposition: attachment; filename=\"".$filename."\""); 
    flush(); 
    return ___get_curl($out[1]); 
} 

function ___get_curl($url) 
{ 

    if(!function_exists("curl_setopt")) 
    { 
     return CURL_NOT_INSTALLED; 
    } 

    $ch=curl_init(); 
    curl_setopt($ch,CURLOPT_USERAGENT, "YouTube Video Downloader"); 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); 
    curl_setopt($ch,CURLOPT_HEADER,0); 
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); 
    curl_setopt($ch,CURLOPT_TIMEOUT,100000); 

    $curl_output=curl_exec($ch); 
    $curlstatus=curl_getinfo($ch); 
    curl_close($ch); 

    return $curl_output; 

} 

Maintenant, permettez-moi de parler du code. Après environ 30 minutes de recherche, j'ai réussi à pirater leur algorithme mais il a des limites très strictes qu'ils ont fixées maintenant. Comme chaque demande faite pour un téléchargement de vidéo est uniquement liée à l'IP, vous devez la diffuser hors de votre bande passante, ce que fait le script ci-dessus. Cependant, des sites comme keepvid.com utilisent Java pour récupérer l'URL de téléchargement et la diffuser vers l'utilisateur. J'ai aussi installé ma propre carte d'identification YouTube, très pratique pour ce genre d'outils. Veuillez reconnaitre que comme indiqué, YouTube change toujours leurs algorithmes et l'utilisation de cet outil est à vos risques et périls. Je ne suis pas tenu responsable des dommages causés à YouTube.

Espérons que cela vous donne une bonne limite, que vous y avez passé du temps.

+0

Merci l'homme. C'est juste ce que je cherchais – Alex1987

+0

Ok, j'ai essayé ce code et il télécharge le fichier html. Voici comment j'ai utilisé votre script: echo ___ get_youtube_video ("http://www.youtube.com/watch?v=dDwKPGUIVME"); et il téléchargements Alizee + - + Moi + Lolita.mp4.html – Alex1987

+0

Il pourrait être votre serveur, en essayant de le déboguer et de voir ce qui se passe. –

Questions connexes