2010-07-22 133 views
26

我寫了一個程序,獲取YouTube視頻的網址,並將其下載
截至今天我這樣做:
1.使用視頻「令牌」,從「/ get_video_info VIDEO_ID = ID?」這樣的:的Youtube視頻下載網址

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

2.下載由請求它的視頻 「?/ get_video VIDEO_ID = ID & T = TOKEN & FMT =業態編號」,如:

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

但這不起作用anym礦石!
什麼是新的下載URL?

感謝

+0

我也有這個問題,它似乎不影響移動YouTube,但我不知道什麼是從移動YouTube上下載的URL。 – Leg10n 2010-07-23 06:42:12

+0

你可能想檢查這個API:https://weibomiaopai.com/download-video-parser.php – 2017-01-30 17:22:28

回答

10

添加&asv=2到URL的末尾。

+0

嗨,非常感謝,它的工作原理,但:我試過「asv = 3」(因爲我從反轉youtube播放器的actionscript代碼),但它不起作用!但你的作品。謝謝 – RYN 2010-07-24 13:16:33

+0

&asv = 2是從嵌入播放器反向設計的。我不知道爲什麼它可以工作,但它的工作原理:D – rossy 2010-07-24 14:43:49

+0

加入「asv = 3」下載鏈接後,因受版權保護內容而生成。如果您擁有版權內容,那麼您必須使用「asv = 3」。 – 2017-05-06 04:19:59

13

其實我正在從YouTube上下載視頻文件的類似項目。我發現get_video可能被Youtube阻止。所以我沒有使用get_video,而是使用從get_video_info檢索到的視頻信息並將其解壓縮以獲取視頻文件url。

在get_video_info中,有url_encoded_fmt_stream_map。編碼完成後,您可以找到不同格式的每個視頻的url和簽名值。所以文件url就像[url value] +'& signature ='+ [sig value]。

此外,我找到以下主題,使用相同的方法與我的。希望它能幫助你。

Can't Download from youtube

如果您有興趣瞭解如何下載YouTube視頻文件,有我寫的證明過程的小程序。你可以自由使用它。

https://github.com/johnny0614/YoutubeVideoDownload

+0

你在github上的演示不再工作了?我試着用YoutubeVideoDownload.py [http://www.youtube.com/watch?v=U3VdT3HEzKE](http://www.youtube.com/watch?v=U3VdT3HEzKE)mp4 – hwhm 2013-07-30 19:44:29

+0

@yujohnnyzhou我已添加一種交互式下載模式,用於選擇不同的視頻類型以及單行下載進度條,而不是多行顯示。請參閱你的github頁面。 – Searock 2013-08-09 21:13:47

+0

http://www.mediacollege.com/video/internet/youtube/download.html – 2013-10-31 12:17:08

9

您可以通過使用僅

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

我犯了一個小腳本在PHP流YouTube視頻直接將流。看看腳本如何獲得視頻文件。

<?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; 
    } 
} 
?> 

查看工作演示here。我希望這可以幫助你。

+3

演示不起作用 – opengrid 2013-07-03 18:58:51

+0

@opengrid這是關於我的虛擬主機,我稍後再嘗試另一個虛擬主機 – Licson 2013-07-03 22:57:35

+0

演示完美地在我的本地主機上工作..謝謝: ) – 2017-05-06 05:07:22

2

上次我正在修復一個破損的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]陣列獲得獨立的視頻鏈接。

該擴展可從here下載。

我希望這可以幫助別人。這是工作解決方案(截至2013年4月6日)