如何使用YouTube API获取随机YouTubevideo?

我需要一种获取完全随机的YouTubevideo的方法。 没有限制。

如何使用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讨论页面上询问。 也许有人可以提供帮助。

似乎没有办法做到这一点,但有一些方法来估计你正在寻找的东西。 请看这里的想法。

这些页面的基本思想是使用最新的上传源(如果您不关心何时上传内容)或只是转储所有YouTubevideo并随机选择这些video中的URL。

在第一个链接中引用youtube API的人:

正如其他人所提到的,我们可以提供任何数据转储等。 您与YouTube的所有互动都需要通过标准API完成。

我不能说我有足够的统计背景来建议你如何检索真正随机的video样本。 我确实认为通过尝试生成11个字符的YouTubevideoID来实现它可能是错误的方法,但是有太多不存在的videoID,你会碰到它,我认为不是最好的使用API​​是为了在X%的时间内发出将返回HTTP 404响应的请求。

使用API​​搜索“随机”选取的单词或短语并对结果进行抽样,您可能会有更好的运气。 如果这样做,您应该考虑使用orderby = URL参数的值。 默认排序是“相关性”,这将导致最佳结果是我们的算法认为与您的搜索字词最相关的结果。 如果您总是抓住第一个条目或类似条件,这可能会扭曲您的结果。 您也可以通过“已发布”订购,这将为您提供反向按时间顺序排列的video。

干杯,-Jeff Posnick,YouTube API团队关于randomyoutubevideo.net,这就是该网站的“关于”页面所说的:

那么我们如何才能提供真正随机的YouTubevideo链接? 事实certificate,YouTube编程界面(API)提供了额外的function,可以发现更随机的video。 使用了许多技巧,结合对时空碎片的一点操作,我们设法创建了一个流程,可以真实地随机链接到YouTubevideo。

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

我理解这意味着他们一直在从API中提取大量video,并制作他们随机选择的数据库。

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

一旦我得到结果,我就随机选择不同的video。

第1步:创建API密钥

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

现在您可以访问YouTube-API。

第2步:使用YouTube-API抓取video

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

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

Codesamples


[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(); } } } } 

[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); } 

[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 

第3步:生成/返回您的videourl

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

 SELECT 'id' FROM yttable WHERE 1 ORDER BY RAND() LIMIT 1 

你的随机video是:

 https://www.youtube.com/embed/[random ID] 

玩得开心!

获取随机videoID的最佳方法是生成自己的数据库。 使用Google的Youtube-API的VideoSearch-Request。 只需生成类似“v = SEARCH_STRING”的搜索查询,然后将您获得的video插入数据库。 searchstring应该是一个随机生成的字符串。 我发现,字符串的长度应为4个字符,以便从请求中获取大多数video而无需重复多次结果。

如果您的数据库已准备好,您可以随机获取一行。

我已经在自己的网站(random-video.net)上完成了这项工作,并在几个小时内完成了200多万次。 没有实际限制 – 只是数据库的大小。

脏爬虫是一个选择吗? 因为我使用了一个简单的随机youtube vid链接生成器。 这只是为了积累大量的video,而不是用于制作。
它似乎(非常)类似于他描述的“youtuberandomvideo.com”方法。

 import re, urllib from random import randint def random_str(str_size): res = "" for i in xrange(str_size): x = randint(0,25) c = chr(ord('a')+x) res += c return res def find_watch(text,pos): start = text.find("watch?v=",pos) if (start<0): return None,None end = text.find(" ",start) if (end<0): return None,None if (end-start > 200): #silly heuristics, probably not a must return None,None return text[start:end-1], start def find_instance_links(): base_url = 'https://www.youtube.com/results?search_query=' url = base_url+random_str(3) #print url r = urllib.urlopen(url).read() links = {} pos = 0 while True: link,pos = find_watch(r,pos) if link == None or pos == None: break pos += 1 #print link if (";" in link): continue links[link] = 1 items_list = links.items() list_size = len(items_list) selected = randint(list_size/2,list_size-1) return items_list[selected][0] for i in xrange(1000): link = find_instance_links() print link 

你可以看到它相当简单,可能很容易破解,但IIRC我设法迅速获得了数以千计的随机video链接,这就是我所需要的,而且它只有几行代码……

代码的一些解释:(随机 – >伪随机…)
1.随机生成搜索查询(此处长3个字母)
2.从video链接的下半部分随机选择一些链接(动机是避免商业广告)

注意:代码很乱 – 它应该只作为技术的基本示例,而不是正确的代码设计和/或优雅的python代码。

AFAIK:搜索v=没有任何有意义的影响。 如果你搜索v=LadyGaga ,你会发现Lady Gaga的video。 YouTube的搜索算法通过描述,标题等进行查看 – 如果video在其描述中链接了另一个video(也称为?v=.. ),则更有可能提出此搜索请求。 另请参阅https://developers.google.com/youtube/v3/docs/search/list 。

谷歌的Youtube Data API中还没有随机选择。 我做的是查询

 https://www.googleapis.com/youtube/v3/search?part=id&maxResults=50&type=video&q=QUERYSTRING&key=KEY 

QUERYSTRING是videoID语法中的随机5字符字符串。 如果结果集包含1到50个video,其中至少有一个id包含该字符串,则会找到随机video。 此方法通常需要1-5次尝试。

需要进行最后一次检查。 示例:随机字符串是ydoat 。 使用上面的url查询此结果只会导致一个ID为VEBt0Hxp5Q8但不适合的video。 video可能在某处包含其描述中的字符串。 如果我通过https://www.youtube.com/results?q=ydoat搜索ydoat ,则找不到任何结果。 搜索v%3Dydoatv=ydoat )会得到相同的结果。

在行动中查看它@ http://cor-forum.de/randomtube/

编辑。 php中的源代码: https : //github.com/phil294/-Php-Randomtube-random-YouTube-video-generator-

像安东一样,我发现4个随机字符最合适。

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

  #!/bin/sh while [ true ]; do searchresult="" while [ -z "$searchresult" ]; do rand=$(< /dev/urandom tr -dc _A-Zaz-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 

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

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

其他提示

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

  #!/bin/sh while [ true ]; do searchresult="" while [ -z "$searchresult" ]; do rand=$(< /dev/urandom tr -dc _A-Zaz-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 

请注意,在最后一个示例中,我将随机因子减少为2个字符的字符串,因为在包含搜索词“Deep Purple”的所有YouTubevideo的相对较小的子集中,很难找到5个字符的字符串匹配项”。 此外,我还将googler返回的搜索结果数量限制为10以保持相关性。 有100个我也会得到不太相关的结果,如业余爱好者试图播放Deep Purple的歌曲。

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

  #!/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 

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

获取包含数百或数千个单词的单词列表。 然后从中随机选择2个单词并将其用作查询。 如果您想要对其随机性进行一定的控制,这也很有用。 例如,您可以拥有英语单词列表或德语单词列表。 或者有一个较小的策划列表,其中的单词仅与您感兴趣的主题相关。

我使用YouTube Data API v3编写了一个Python脚本。 一般来说,它是根据一个小的关键字技巧找到随机video。 例如,当您拍摄video时,您的手机会将其保存为“IMG 20180815”,因此搜索这些默认文件名(IMG XXXX-XX-XX) ,获取随机选择的搜索结果之一的ID,然后您拥有随机和看不见的video。

https://github.com/n1rv4n4/random-youtube-video-generator

示例项目网站: https //www.randomyoutubevideo.com