【问题标题】:Using get_video on YouTube to download a video在 YouTube 上使用 get_video 下载视频
【发布时间】:2011-12-28 22:42:26
【问题描述】:

我正在尝试获取任何这样的 YouTube 视频的视频 URL:

打开

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

然后获取account_playback_token 令牌值并打开此 URL:

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

这应该会打开一个只有视频的页面或开始下载视频。但是什么也没有发生,Safari 的活动窗口显示“未找到”,因此 URL 有问题。我想将它集成到 iPad 应用程序中,并且获取我在 iPhone 版本应用程序中使用的视频 URL 的 javascript 方法不起作用,所以我需要另一个解决方案。

YouTube 一直在变化,我认为 URL 已经过时了。请帮忙:)

编辑:似乎 get_video 方法不再起作用了。如果有人能告诉我另一种查找视频 URL 的方法,我将不胜感激。

谢谢你,我真的需要帮助。

【问题讨论】:

    标签: ios url download youtube


    【解决方案1】:

    对不起,这已经不可能了。他们将令牌限制为获得它的 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>';
    }
    ?>
    

    【讨论】:

    • 但是你也在使用 get_url 吗? get_headers() 是什么,它是 url 的一部分还是一个函数?你能用文字解释你的代码吗?我真的很想给你赏金,我只是需要更多的帮助。谢谢
    • 我又看了一遍,然后我完全明白了:D 但为什么它不提供每种分辨率的所有格式的链接(在 720p 中它提供 mp4 和 x-flv,在 480p 中它提供 flv 和 x-flv 的链接 ...) 有没有办法获得所有分辨率的 mp4 视频的链接?谢谢
    • 哇,他们在标题中放了一个真实的视频位置?听起来像是一个重大缺陷......
    • objc 中的代码要多得多,因为那里的 URL 解析要困难得多,但你给了我正确的想法。赏金奖励!
    【解决方案2】:

    我用了它,它很震撼:http://rg3.github.com/youtube-dl/

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

    【讨论】:

      【解决方案3】:

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

      在 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 URL 中找到播放列表 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(它本身不太好用)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-22
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-02-17
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        相关资源
        最近更新 更多