如何使用YouTube API获取随机YouTube视频?

b0x*_*0rz 13 .net c# youtube-api youtube.net-api

我需要一种获取完全随机的YouTube视频的方法.没有限制.

如何使用YouTube API?

**编辑*确定这里要求的是我到目前为止尝试的:

1 - 在youtube开发站点浏览了api和示例.http://www.youtube.com/dev/没有运气找到正确的api或在那里做的方式.

2 - 谷歌搜索当然;)得到http://randomyoutubevideo.net/但他们只提供从他们在我和youtube之间使用的API.<这让我希望实际上可以做到这一点.

3 - 甚至检查了youtube应用程序库http://youtube-gallery.appspot.com/,看看是否有人这样做.如何.

我还要做的是在youtube讨论页面上询问.也许有人可以提供帮助.

Ste*_*172 17

作为http://www.youtuberandomvideo.com/的所有者,我只是随机生成一些字符然后搜索v =并返回所有视频ID开头的视频.

一旦我得到结果,我就随机选择不同的视频.

  • 很好:) thnx.喜欢这个网站<3 (2认同)

osa*_*ger 5

第1步:创建API密钥

  1. 创建一个谷歌帐户
  2. 访问:https//console.developers.google.com/
  3. 创建一个新项目:单击头菜单中的Create new Project并为其命名
  4. 现在激活YoutTubeData API:单击并启用它。
  5. 插入您的应用程序信息
  6. 点击“创建凭据”
  7. 踢我需要什么?
  8. 注意您的API密钥

现在,您可以访问YouTube-API。

步骤2:使用YouTube-API抓取视频

在这一步中,我们使用YouTube-API来获取随机的VideoId。使用以下代码示例,您将从YouTube搜索中获得50个随机Apis。那是最大的。您可以将它们存储在数据库中,也可以直接返回随机ID。

注意:限制为30,000个单位/秒/用户和每天1,000,000个。

代码样本


[C#-示例]

using System;
using System.Linq;
using System.Net;
using Newtonsoft.Json;

namespace YouTube
{
   class Program
   {
    private static Random random = new Random();

    public static string RandomString(int length)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return new string(Enumerable.Repeat(chars, length)
          .Select(s => s[random.Next(s.Length)]).ToArray());
    }

    static void Main(string[] args)
    {
        var count = 50;
        var API_KEY = "YOUR KEY";
        var q = RandomString(3);
        var url = "https://www.googleapis.com/youtube/v3/search?key=" + API_KEY + "&maxResults="+count+"&part=snippet&type=video&q=" +q;

        using (WebClient wc = new WebClient())
        {
            var json = wc.DownloadString(url);
            dynamic jsonObject = JsonConvert.DeserializeObject(json);
            foreach (var line in jsonObject["items"])
            {
                Console.WriteLine(line["id"]["videoId"]);
                /*store your id*/
            }
            Console.Read();
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

[PHP范例]

function crawlVideos($count = 50)
{
    $q = $this->generateRandomString(3);
    $url = "https://www.googleapis.com/youtube/v3/search?key=" . self::API_KEY . "&maxResults=$count&part=snippet&type=video&q=" . $q;
    $JSON = file_get_contents($url);
    $JSON_Data_search = json_decode($JSON);
    foreach ($JSON_Data_search->{"items"} as $result) {
        $videoId = ($result->{"id"}->{"videoId"});
        /*Insert video to your database*/
    }
}

function generateRandomString($length = 10)
{
    return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);
}
Run Code Online (Sandbox Code Playgroud)

[Python范例]

import json
import urllib.request
import string
import random

count = 50
API_KEY = 'your_key'
random = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(3))

urlData = "https://www.googleapis.com/youtube/v3/search?key={}&maxResults={}&part=snippet&type=video&q={}".format(API_KEY,count,random)
webURL = urllib.request.urlopen(urlData)
data = webURL.read()
encoding = webURL.info().get_content_charset('utf-8')
results = json.loads(data.decode(encoding))

for data in results['items']:
    videoId = (data['id']['videoId'])
    print(videoId)
    #store your ids
Run Code Online (Sandbox Code Playgroud)

第3步:生成/返回您的视频网址

现在从数据库中读取一个随机ID,例如:

SELECT 'id' 
FROM yttable
WHERE 1 ORDER BY RAND() LIMIT 1
Run Code Online (Sandbox Code Playgroud)

您的随机视频是:

https://www.youtube.com/embed/[random ID]
Run Code Online (Sandbox Code Playgroud)

玩得开心!


小智 5

我知道这有点离题,但我可以提供以下 bash 脚本。我在我的 Raspberry Pi 上使用它,效果很好。

    #!/bin/sh
    while [ true ];
    do
    searchresult=""
    while [ -z "$searchresult" ]; do
    rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-5};echo)
    echo "$rand"
    searchresult=$(googler -C -n 100 --np -x -w https://www.youtube.com "$rand")
    done
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done
Run Code Online (Sandbox Code Playgroud)

先决条件是你已经安装了googleryoutube-dl. 我最初的想法是生成随机的 11 个字符串并将它们附加到 YouTube 视频的基本 URL。但是,可能的排列数量是巨大的(26 个大写字母 + 26 个小写字母 + 10 位数字 + 连字符 + 下划线 = 64 个字符;64^11=7.38x10^19 个排列)并且如果地球上每个人都上传就会用完100 亿个视频。这就是为什么随机生成完整的 11 个字符的标识符不是一种可行的方法。我的脚本生成随机的 5 个字符的字符串(变量“rand”)并将它们作为搜索查询传递给 googler。Googler 在 YouTube 网站上搜索这些随机字符串,并且在大多数情况下会返回结果(变量“searchresult”)。如果没有结果,则使用另一个随机字符串重复搜索,依此类推,直到成功。通常需要一到三次尝试。我尝试使用不同长度的搜索字符串 - 4 可能不够独特,6 太长,可能需要多次尝试才能获得结果,我观察到如果脚本在短时间内发送了 10 个以上的搜索请求,谷歌暂时阻止我进一步搜索。

在下一步中,脚本从搜索结果中提取指向 YouTube 视频的超链接,并将它们放入变量“urls”中。然后随机选择其中一个进行播放(变量“url”)并传递给播放器 - 在我的情况下为 omxplayer,但您可以将其替换为您想要的任何播放器。Omxplayer 在 Raspberry Pi 上很好,因为它使用硬件加速并通过 hdmi 直接输出到我的电视机。如果我将“-o hdmi”更改为“-o local”,音频将通过 3.5 毫米立体声插孔发送到外部放大器。在播放过程中按“q”停止播放当前视频并自动开始下一个随机视频。它会一直持续下去,直到您按 Ctrl-C 停止脚本。

其他提示

通过一些修改,您可以获得关于给定主题的随机视频。例如,如果我们将“Deep Purple”作为附加搜索词,我们将随机获得 Deep Purple 的音乐视频:

    #!/bin/sh
    while [ true ];
    do
    searchresult=""
    while [ -z "$searchresult" ]; do
    rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-2};echo)
    echo "$rand"
    searchresult=$(googler -C -n 10 --np -x -w https://www.youtube.com "$rand" "Deep Purple")
    done
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一个示例中,我将随机因子减少到 2 个字符的字符串,因为在包含搜索词“Deep Purple ”。同样在这里,我将 googler 返回的搜索结果数量限制为 10,以保持它们的相关性。使用 100 我也会得到不太相关的结果,比如业余爱好者尝试播放 Deep Purple 歌曲的视频。

下一个脚本将随机播放过去 12 小时内上传的新视频

    #!/bin/sh
    while [ true ];
    do
    searchresult=$(googler -C -n 100 --np -t h12 -x -w https://www.youtube.com "")
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done
Run Code Online (Sandbox Code Playgroud)

您可以设置不同的时间限制。有关更多详细信息,请参阅 googler 的文档。


N_A*_*N_A 4

似乎没有办法做到这一点,但是有一些方法可以近似您正在寻找的内容。请参阅此处了解想法。

\n\n

这些页面的基本思想是使用最新的上传提要(如果您不关心上传内容的时间),或者简单地获取所有 YouTube 视频的转储并从中随机选择一个 URL。

\n\n

引用第一个链接中的 YouTube API 人员:

\n\n
\n

正如其他人提到的,我们提供任何数据转储或类似的内容。您与 YouTube 的所有交互都需要通过\n 标准 API 完成。

\n\n

我不能说我有足够的统计背景来建议您如何检索真正随机的视频样本。我确实认为尝试生成 11 个字符的 YouTube 视频 id 可能是错误的方法,尽管\xe2x80x94 有太多不存在的视频 id,您会遇到这些问题\n 我不认为 API 的最佳用途是发出在 X% 的时间内返回 HTTP 404 响应的请求。

\n\n

您可能会更幸运,只需使用 API 来搜索“随机”选取的单词或短语并对结果进行采样。如果这样做,您应该考虑为 orderby= URL 参数使用什么值。默认排序为“相关性”,这将导致我们的算法认为与您的搜索词最相关的结果位于最前面。如果您总是抓住第一个条目或类似的条目,这可能会扭曲您的 \n 结果。您还可以按“已发布”排序,这将为您提供按时间倒序排列的视频源。

\n\n

干杯,\n -Jeff Posnick,YouTube API 团队\n 作为\n 关于 randomyoutubevideo.net,该网站的“关于”页面内容如下:

\n\n

那么我们如何才能提供真正随机的 YouTube 视频链接呢?事实证明,YouTube 编程接口 (API) 提供了额外的功能,可以发现更加随机的视频。使用许多技巧,再加上对时空碎片的一点操作,我们成功地创建了一个能够产生真正随机的 YouTube 视频链接的过程。

\n\n

此页面上的随机 YouTube 函数当前使用\n 数据库的子集。随着时间的推移,我们将扩展该数据库,并根据需求,可能通过 API 免费提供该数据库。

\n
\n\n

我的理解是,他们已经从 API 中提取了大量视频列表,并创建了一个数据库,并从中随机选择。

\n