C# 如何使用YouTube API获取随机的YouTube视频?
我需要一种方法来获得一个完全随机的YouTube视频。没有限制 我如何使用YouTube API **按要求编辑*确定此处是我迄今为止尝试的内容: 1-浏览了youtube开发网站上的api和示例。在那里找不到正确的api或方法 2-当然是谷歌搜索;)得到了,但他们只提供了一个api供我和youtube之间使用这给了我希望,这实际上是可能的 3-甚至检查了youtube应用程序库,看看是否有人在做这件事。以及如何C# 如何使用YouTube API获取随机的YouTube视频?,c#,.net,youtube-api,youtube.net-api,C#,.net,Youtube Api,Youtube.net Api,我需要一种方法来获得一个完全随机的YouTube视频。没有限制 我如何使用YouTube API **按要求编辑*确定此处是我迄今为止尝试的内容: 1-浏览了youtube开发网站上的api和示例。在那里找不到正确的api或方法 2-当然是谷歌搜索;)得到了,但他们只提供了一个api供我和youtube之间使用这给了我希望,这实际上是可能的 3-甚至检查了youtube应用程序库,看看是否有人在做这件事。以及如何 我还将在youtube讨论页面上提问。也许那里有人能帮上忙。似乎没有办法做到这一点
我还将在youtube讨论页面上提问。也许那里有人能帮上忙。似乎没有办法做到这一点,但是有一些方法可以大致了解您正在寻找的内容。看看有什么想法 这些页面的基本思想是使用最新的上传提要(如果你不在乎什么时候上传的话),或者简单地转储所有youtube视频,然后从中随机选择一个URL 在第一个链接中引用youtube API: 正如其他人提到的,我们进行任何数据转储或类似操作 可用。你与YouTube的所有互动都需要通过 标准API 我不能说我在统计学方面有足够的背景来帮助你 建议如何检索真正随机的视频样本。我愿意 想一想,通过尝试生成11个字符 YouTube视频ID可能是错误的方法,尽管有 只是你会碰到太多不存在的视频ID 我不认为API的最佳用途是发出将 在X%的时间内返回HTTP 404响应 使用API搜索单词或短语可能会更幸运 “随机”挑选的短语,并对 结果。如果你这样做了,你应该考虑使用什么价值 orderby=URL参数。默认顺序为“相关性”,即 将导致我们的算法所认为的最佳结果 是与您的搜索词最相关的。这可能会扭曲你的想法 如果您总是抓取第一个条目或类似内容,则返回结果。你也可以 按“已发布”排序,这将为您提供反向的时间顺序提要 视频 干杯, -Jeff Posnick,YouTube API团队 作为 关于randomyoutubevideo.net,该网站的“关于”页面必须这样说: 那么,我们如何才能提供到YouTube视频的真正随机链接呢?它变成 YouTube编程接口(API)提供了额外的 允许发现更多视频的功能 随机的使用一些技巧,结合一些操作 在时空frabric中,我们成功地创建了一个 Yields是YouTube视频的真正随机链接 此页面上的随机YouTube函数当前使用 数据库。随着时间的推移,我们将扩展此数据库,并根据 需求,可通过API免费提供
我理解这意味着他们一直在从API中提取大量视频列表,并制作一个DB,从中随机选择 获取随机视频ID的最佳方法是生成自己的数据库。使用谷歌Youtube API的视频搜索请求。只需生成一个类似“v=SEARCH\u STRING”的搜索查询,并将得到的视频ID插入数据库。searchstring应该是随机生成的字符串。 我发现,一个字符串的长度应该是4个字符,这样就可以从一个请求中获取大多数视频,而不必重复很多结果 如果数据库准备好了,您可以从中随机获得一行
我自己做的,在几个小时内获得了超过200万的入场券。只有数据库的大小没有真正的限制。脏爬虫是一种选择吗? 因为我使用了一个简单的随机youtube视频链接生成器。这只是为了积累大量的视频,不是为了制作。
这似乎(非常)类似于他所描述的“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
import re,urllib
从随机导入randint
def random_str(str_大小):
res=“”
对于X范围内的i(str_尺寸):
x=randint(0,25)
c=chr(ord('a')+x)
res+=c
返回res
def查找表(文本,位置):
开始=文本。查找(“watch?v=”,pos)
如果(startpseudo random…)
1.随机生成搜索查询(此处3个字母长)
2.从视频链接的下半部分随机选择一些链接(动机是为了避免商业广告)
注意:代码很凌乱-它应该只是该技术的一个基本示例,而不是正确的代码设计和/或优雅的python代码。AFAIK:search forv=
没有任何有意义的效果。如果你搜索v=LadyGaga
,你会找到LadyGaga视频。YouTube的搜索算法通过描述、标题等进行搜索。如果一个视频的描述中链接了另一个视频(又名a?v=…
),则更有可能提出此搜索请求。另见
谷歌的Youtube数据API还没有实现随机选取。我所做的是质疑
https://www.googleapis.com/youtube/v3/search?part=id&maxResults=50&type=video&q=QUERYSTRING&key=KEY
,其中QUERYSTRING
是视频ID语法中的随机5个字符字符串。如果结果集包含1到50个视频,其中至少有一个id包含字符串,则会找到一个随机视频。这种方法通常需要1-5次尝试
需要最后一次检查。示例:一个随机字符串是ydoat
。使用上述url查询此内容只会导致一个id为VEBt0Hxp5Q8的视频,该视频不适合。视频可能在其描述的某个地方包含字符串。如果我通过https://www.youtube.com/results?q=ydoat
,未找到任何结果。正在搜索v%3dyoat
(v=ydoat
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();
}
}
}
}
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);
}
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
SELECT 'id'
FROM yttable
WHERE 1 ORDER BY RAND() LIMIT 1
https://www.youtube.com/embed/[random ID]
#!/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
#!/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
#!/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