C# 如何使用YouTube API获取随机的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 API

**按要求编辑*确定此处是我迄今为止尝试的内容:

1-浏览了youtube开发网站上的api和示例。在那里找不到正确的api或方法

2-当然是谷歌搜索;)得到了,但他们只提供了一个api供我和youtube之间使用这给了我希望,这实际上是可能的

3-甚至检查了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 for
v=
没有任何有意义的效果。如果你搜索
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