在YouTube上使用get_video下载视频

时间:2011-12-28 22:42:26

标签: ios url download youtube

我正在尝试获取任何YouTube视频的视频网址:

打开

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方法不再起作用了。如果有人能告诉我另一种查找视频网址的方法,我真的很感激。

谢谢,我真的需要帮助。

3 个答案:

答案 0 :(得分:10)

抱歉,这是不可能的。它们将令牌限制为获得它的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>';
}
?>

答案 1 :(得分:3)

我使用它并摇滚:http://rg3.github.com/youtube-dl/

只需从浏览器中复制YouTube网址,然后以YouTube网址作为唯一参数执行此命令。它将弄清楚如何找到最优质的视频并为您下载。

答案 2 :(得分:1)

大!我需要一种方法来获取整个播放列表的视频。

在Linux中,这就是我使用的:

  

Y = http://www.youtube.com;   F =&#34; HTTP://gdata.youtube.com/feeds/api/playlists/PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN启动指数= 26&#34 ;;   for $ in $(curl -s $ f | grep -o&#34; url =&#39; $ y / watch?v = [^&#39;] &#39;&#34;) ;做d = $(回声   $ i | sed&#34; s | url \ =&#39; $ y / watch?v =(。)&amp;。*&#39; | \ 1 |&#34;); YouTube的-DL   --restrict-filenames&#34; $ y / watch?v = $ d&#34 ;;完成

您必须从常见的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(这本身并不起作用)