2014-09-22 24 views
0

我正在製作一個下載YouTube視頻的小項目。我遇到了一個驚人的網站:如何抓住Youtube下載鏈接解密Youtube使用的密碼?

http://vimow.com/watch?v=VID_ID_HERE

令人驚奇的是,每一個視頻在這裏工作,然後用乾淨的YouTube視頻鏈接完美流,但我不能找出這傢伙是如何提取視頻鏈接乾淨。 (這適用於VEVO和索尼版權所有的YouTube視頻)

我搜索了一下,發現youtube已經安裝了某些密碼來編碼它們的URL路徑,並且有一個類似的腳本來解密它。我不知道如何實現。我只是能夠創建一個糟糕的代碼集,它使用假用戶代理瀏覽到YouTube的移動視圖,並獲得只有高清MP4鏈接。

如何實施?或者任何人都可以告訴我該vimow網站是如何工作的?

而對於那些有興趣在我的代碼至今:

<?php 

if(!empty($_GET['url'])) { 
    $url = "https://www.youtube.com/watch?v=".$_GET['url']; 

$ch1= curl_init(); 
curl_setopt ($ch1, CURLOPT_URL, "$url"); 
curl_setopt($ch1, CURLOPT_HEADER, 0); 
curl_setopt($ch1,CURLOPT_VERBOSE,1); 
//curl_setopt($ch1, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5'); 
curl_setopt ($ch1, CURLOPT_REFERER,'http://www.google.com'); //just a fake referer 
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch1,CURLOPT_POST,0); 
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 20); 

$htmlContent= curl_exec($ch1);; 
$source = urldecode($htmlContent); 

$downloadURL = explode('url_encoded_fmt_stream_map', $source); 
$downloadURL = substr($downloadURL[1], 0, 15600); 

    $downloadURL = explode("url=", $downloadURL); 

    $mp4link = str_split($downloadURL[1]); 

    $newmp4link = array(); 

    for($i=0;$i<count($mp4link);$i++) { 
    array_push($newmp4link, $mp4link[$i]); 
    if($mp4link[$i] == '\\' || $mp4link[$i] == ',') { 
     break; 
    } 
    } 

    $newmp4link = join("", $newmp4link); 

    $newmp4link = str_replace("\\","", $newmp4link); 
    $newmp4link = str_replace(",","", $newmp4link); 
    $newmp4link = str_replace(";","", $newmp4link); 

    $ext = "mp4"; 

function generateRandomString($length) { 
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++) { 
     $randomString .= $characters[rand(0, strlen($characters) - 1)]; 
    } 
    return $randomString; 
} 
$rand = generateRandomString(100); 
$target = "tmp/$rand.mp4"; 
copy($newmp4link, $target); 
echo "$newmp4link"; 
header("Location: tmp/$rand.mp4"); 

?> 

回答

0

這是你如何讓YouTube視頻文件的鏈接。

http://youtube.com/get_video_info?video_id=XXX 

但這個網站正在做一個詭計。他們不是從youtube流式傳輸,而是Google文檔。所以他們的鏈接格式爲http://blah.c.docs.google.com/videoplayback而不是http://blah.c.docs.googlevideo.com/videoplayback。我也在尋找這種方法。所以,如果你能找到它讓我知道

+0

這不是一個竅門,只需將網址中的c.docs.google.com替換爲googlevideo.com即可。我在https://github.com/jeckman/YouTube-Downloader上使用這個技巧Youtube-Downloader – wali 2015-07-27 05:31:29

1

我在該網站的開發人員,感謝問問題之一。事實上,我們使用密碼算法進入YouTube視頻,但由於硬性限制,我們仍然需要流式傳輸大部分視頻。在從文檔獲取空白之前,每個IP只有不到10k個請求。最後,流式傳輸通過我們龐大的服務器集羣,並基於它們成功實現增長。

我希望這清除了舊的問題,並作爲我們的解決方案的獎金。