如何在不使用搜索的情况下查找 youtube 频道当前是否正在直播?

The*_*r44 8 youtube live-streaming youtube-data-api

我正在一个网站上工作以加载多个 YouTube 频道直播。起初,我试图找出一种不使用 youtube api 的方法来做到这一点,但决定让步。

要查找频道是否正在直播并获取我一直在使用的直播链接:

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={CHANNEL_ID}&eventType=live&maxResults=10&type=video&key={API_KEY}
Run Code Online (Sandbox Code Playgroud)

但是,最小配额为 10000,每次搜索价值 100,因此在超出配额限制之前,我只能进行大约 100 次搜索,这根本没有帮助。我最终在大约 10 分钟内超过了配额限制。:(

有没有人知道使用尽可能少的配额点来确定频道当前是否正在直播以及直播链接是什么的更好方法?

我想每 3 分钟为每个用户重新加载一次 youtube 数据,将其保存到数据库中,并使用我自己的 api 显示信息以节省服务器资源和配额点。

希望有人能很好地解决这个问题!

如果对链接无能为力,只需确定用户是否在线而无需每次使用 100 个配额点,这将是一个很大的帮助。

Bma*_*n70 6

由于该问题仅指定不应使用 Search API 配额来确定频道是否正在流式传输,因此我想我会分享一种解决方法。与简单的 API 调用相比,它可能需要更多的工作,但它可以将 API 配额使用量减少到几乎为零:

我使用了一个简单的 PerlGET请求来检索 Youtube 频道的主页。在直播的频道页面的 HTML 中可以找到几个独特的元素:

实时观众标签的数量,例如<li>753 watching</li>。该LIVE NOW 徽章标签:<span class="yt-badge yt-badge-live" >Live now</span>

要确定某个频道当前是否正在直播,需要通过简单的匹配来查看唯一的 HTML 标记是否包含在 GET 请求结果中。类似的东西:if ($get_results =~ /$unique_html/)(Perl)。然后,可以只对实际正在流式传输的通道ID进行API调用,以获取该流的视频ID。

这样做的好处是您已经知道频道正在流式传输,而不是使用数千个配额点来查找。我的测试脚本通过在 HTML 代码中查找:(<span class="yt-badge yt-badge-live" >注意来自 Youtube 的代码中奇怪的额外空格)成功地识别了频道是否正在流式传输。

我不知道 OP 正在使用什么语言,或者我会帮助处理该语言的基本 GET 请求。我使用 Perl,并包含浏览器标题、用户代理和 cookie,看起来像正常的计算机访问。

Youtube 的robots.txt似乎不禁止抓取频道的主页,只禁止抓取频道的社区页面。

让我知道您对这种方法的优缺点的看法,如果您发现缺陷,请评论可能改进的地方而不是不喜欢的地方。谢谢,编码愉快!

2020 UPDATEyt-badge-live似乎通道是否是流已经被弃用,不再可靠地显示。相反,我现在检查此字符串的 HTML:

{"text":" watching"}

如果我得到匹配,则意味着该页面正在流式传输。(非流媒体频道不包含此字符串。)再次注意奇怪的额外空格。因为我使用的是 Perl,所以我也避开了所有的引号。


Mau*_*ave 6

以下是我的两个建议:

  • 检查我的回答,我解释了如何检查如何从正在直播的频道中检索视频。
  • 另一种选择是使用以下 URL 并以某种方式每次发出请求以检查是否有直播。

https://www.youtube.com/channel/<CHANNEL_ID>/live

CHANNEL_ID您要检查该频道是否正在直播1的频道 ID在哪里。


1 请注意,该 URL 可能不适用于所有频道(这取决于频道本身)

例如,如果您检查channel_id UC7_YxT-KID8kRbqZo7MyscQ -此频道直播的链接- https://www.youtube.com/channel/UC4nprx9Vd84-ly7N-1Ce6Og/live,此频道将显示他是否正在直播,但是,带有他的频道 ID UC4nprx9Vd84-ly7N-1Ce6Og-链接到该频道的直播- 它将显示他的主页。

  • 'user' 和 'c' 可以与其他频道不同,而 NASAtelevision 是用户名,NASA 是频道名称(并非所有频道都使用相同的名称),因此 `https://www.youtube.com/ c/NASA/live`,适用于大写和小写。尽管使用带有频道名称的“c”确实不适用于某些频道,但 id 和用户名可以。这些方法的问题是,您无法为运行多个直播流的频道选择重定向到哪个频道,但最好验证频道是否正在直播并使用 API 检索直播流的视频 ID 。 (2认同)