2011-12-28 132 views
6

我試圖得到任何的YouTube視頻這樣的視頻網址:在YouTube上使用get_video下載視頻

打開

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

然後取account_playback_token令牌值,並打開這個網址:

http://www.youtube.com/get_video?video_id=VIDEOID&t=TOKEN&fmt=18&asv=2 

這應該打開一個只有視頻的網頁或開始下載視頻。但是沒有任何反應,Safari的活動窗口顯示'找不到',所以URL有問題。我想將它集成到iPad應用程序中,並且用於獲取我在iPhone版應用程序中使用的視頻URL的JavaScript方法無法正常工作,所以我需要另一種解決方案。

YouTube一直在變,我認爲這個網址已經過時了。請幫忙:)

編輯:好像get_video方法不起作用了。如果有人能告訴我以另一種方式查找視頻網址,我真的很感激。

謝謝,我真的需要幫助。

回答

9

對不起,這是不可能的了。它們將令牌限制在獲得它的IP上。

下面是使用get_headers()函數的解決方法,該函數爲您提供了一個包含視頻鏈接的數組。我對ios一無所知,因此希望您可以自己重寫這個PHP代碼。

<?php 
if(empty($_GET['id'])) { 
    echo "No id found!"; 
} 

else { 

    function url_exists($url) { 
     if(file_get_contents($url, FALSE, NULL, 0, 0) === false) return false; 
     return true; 
    } 

    $id = $_GET['id']; 

    $page = @file_get_contents('http://www.youtube.com/get_video_info?&video_id='.$id); 

    preg_match('/token=(.*?)&thumbnail_url=/', $page, $token); 

    $token = urldecode($token[1]); 

    $get = $title->video_details; 

    $url_array = array ("http://youtube.com/get_video?video_id=".$id."&t=".$token, 
    "http://youtube.com/get_video?video_id=".$id."&t=".$token."&fmt=18"); 

    if(url_exists($url_array[1]) === true) { 
     $file = get_headers($url_array[1]); 
    } 

    elseif(url_exists($url_array[0]) === true) { 
     $file = get_headers($url_array[0]); 
    } 

    $url = trim($file[19],"Location: "); 

    echo '<a href="'.$url.'">Download video</a>'; 
} 
?> 
+0

但是,你正在使用GET_URL嗎?什麼是get_headers(),它是url還是函數的一部分?你能用文字解釋你的代碼嗎?我真的很想給你賞金,我只需要多一點幫助。謝謝 – JonasG 2011-12-31 09:40:19

+0

請幫忙!!!我需要知道這一點! – JonasG 2012-01-04 10:03:51

+0

我很想看看它,然後我完全明白了:D但爲什麼它沒有給出每個分辨率下的所有格式的鏈接(在720p中它給出mp4和x-flv,在480p中它給出了flv和x的鏈接-flv ...)有沒有辦法在所有分辨率下獲得mp4視頻的鏈接?謝謝 – JonasG 2012-01-05 18:57:32

3

我用這個和它的岩石:http://rg3.github.com/youtube-dl/

剛剛從你的瀏覽器與YouTube網址複製YouTube網址並執行此命令作爲唯一的參數。它會弄清楚如何找到最好質量的視頻併爲你下載。

1

太棒了!我需要一種方法來抓取視頻的整個播放列表

在Linux中,這是我用:

Y = http://www.youtube.com; f =「http://gdata.youtube.com/feeds/api/playlists/PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN?start-index=26」; for i in $(curl -s $ f | grep -o「url ='$ y/watch?v = [^'] '」); do d = $(echo $ i | sed「s | url \ ='$ y/watch?v =(。)&。*'| \ 1 |「); youtube-dl --restrict-filenames「$ y/watch?v = $ d」;做

你必須找到一個共同的YouTube網址喜歡的播放列表ID: https://www.youtube.com/playlist?list=PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN

此外,該技術使用GDATA API,限制25個記錄每頁。
因此,?start-index = 26參數(在我的示例中獲取第2頁)

這可以使用一些清理和額外的邏輯遍歷所有25個集合。

現金

https://stackoverflow.com/a/8761493/1069375

http://www.commandlinefu.com/commands/view/3154/download-youtube-playlist(其本身也不太工作)