2010-07-22 7 views
26

j'ai écrit un programme qui obtient URL de la vidéo sur youtube et télécharge
aujourd'hui Je l'ai fait:
1. Obtenir la vidéo "jeton" de "/ get_video_info video_id = ID?" Comme:vidéo Youtube URL de téléchargement

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc 

2. Télécharger la vidéo en lui demandant de "/ get_video video_id = ID & t = TOKEN & fmt = FORMAT_ID?" comme:

http://www.youtube.com/get_video?video_id=jN0nWjvzeNc&t=vjVQa1PpcFMgAK0HB1VRbinpVOwm29eGugPh3fBi6Dg%3D&fmt=18 

Mais cela ne fonctionne pas anym minerai!
Quelle est la nouvelle URL de téléchargement?

Merci

+0

J'ai ce problème aussi, il semble que cela n'affecte pas mobile youtube, mais je ne sais pas quelle est l'URL à télécharger à partir mobile youtube. – Leg10n

+0

Vous pourriez vouloir vérifier cette API: https://weibomiaopai.com/download-video-parser.php –

Répondre

10

Ajouter &asv=2 à la fin de l'URL.

+0

Salut, Merci beaucoup, ça fonctionne, Mais: J'ai essayé "asv = 3" (comme je l'ai récupéré de inversé code actionscript du lecteur youtube) mais ça n'a pas marché! mais vos œuvres. merci – RYN

+0

& asv = 2 a été conçu à partir du lecteur intégré. Je ne sais pas pourquoi cela fonctionne, mais cela fonctionne: D – rossy

+0

en ajoutant "asv = 3" lien de téléchargement a été généré en raison de contenu sous droits d'auteur. Si vous avez du contenu protégé par des droits d'auteur, vous devez utiliser "asv = 3". –

13

En fait, je travaille sur le projet similaire que le téléchargement du fichier vidéo à partir de YouTube. Je trouve que le get_video pourrait être bloqué par Youtube. Ainsi, au lieu d'utiliser get_video., j'utilise les informations vidéo extraites de get_video_info et je les extrait pour obtenir l'URL du fichier vidéo.

Dans get_video_info, il existe url_encoded_fmt_stream_map. Après l'avoir encodé, vous pouvez trouver l'URL et la valeur de signature de chaque vidéo avec un format différent. Donc l'url du fichier est comme [valeur d'url] + '& signature =' + [valeur sig].

En outre, je trouve le sujet suivant en utilisant la même méthode avec le mien. Espérons que cela peut vous aider.

Can't Download from youtube

Si vous êtes intéressés sur la façon de télécharger un fichier vidéo sur youtube, il y a un petit programme écrit par moi pour démontrer le processus. Vous êtes libre de l'utiliser.

https://github.com/johnny0614/YoutubeVideoDownload

+0

Votre démo sur github ne fonctionne plus ...? Je l'essayais avec YoutubeVideoDownload.py [http://www.youtube.com/watch?v=U3VdT3HEzKE](http://www.youtube.com/watch?v=U3VdT3HEzKE) mp4 – hwhm

+0

@yjohnnyzhou J'ai ajouté un mode de téléchargement interactif pour la sélection de différents types de vidéo avec une barre de progression de téléchargement de ligne unique au lieu de l'afficher avec plusieurs lignes. S'il vous plaît voir votre page github. – Searock

+0

http://www.mediacollege.com/video/internet/youtube/download.html –

9

Vous pouvez obtenir le flux directement en utilisant uniquement

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc

J'ai fait un petit script pour diffuser des vidéos sur youtube en PHP. Voyez comment le script obtient le fichier vidéo.

<?php 
@set_time_limit(0); 
$id = $_GET['id']; //The youtube video ID 
$type = $_GET['type']; //the MIME type of the video 

parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$id),$info); 
$streams = explode(',',$info['url_encoded_fmt_stream_map']); 

foreach($streams as $stream){ 
    parse_str($stream,$real_stream); 
    $stype = $real_stream['type']; 
    if(strpos($real_stream['type'],';') !== false){ 
     $tmp = explode(';',$real_stream['type']); 
     $stype = $tmp[0]; 
     unset($tmp); 
    } 
    if($stype == $type && ($real_stream['quality'] == 'large' || $real_stream['quality'] == 'medium' || $real_stream['quality'] == 'small')){ 
     header('Content-type: '.$stype); 
     header('Transfer-encoding: chunked'); 
     @readfile($real_stream['url'].'&signature='.$real_stream['sig']); //Change here to do other things such as save the file to the filesystem etc. 
     ob_flush(); 
     flush(); 
     break; 
    } 
} 
?> 

Voir la démo de travail here. J'espère que ceci peut vous aider.

+3

démo ne fonctionne pas – opengrid

+0

@opengrid C'est à propos de mon hébergeur.J'essaierai un autre hébergeur plus tard – Licson

+0

La démo fonctionne parfaitement sur mon localhost .. merci: –

2

La dernière fois que je travaillais sur la réparation d'une des extensions Chrome cassé pour télécharger la vidéo YouTube. Je l'ai corrigé en modifiant la partie 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); 
    } 
} 

Vous pouvez obtenir le lien vidéo séparé du tableau videoURL[itag].

L'extension peut être téléchargée à partir de here.

J'espère que cela aiderait quelqu'un.Cela fonctionne solution (à partir de 06-Apr-2013)

Questions connexes