2011-12-28 135 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(其本身也不太工作)