如何检查YouTube频道是否正在直播

mpg*_*pgn 11 youtube youtube-api youtube-data-api youtube-livestreaming-api

我找不到任何信息来检查YouTube频道是否实际上是流媒体.使用Twitch,您只需要频道名称,使用API​​即可检查是否有直播.

我不想使用OAuth,通常公共API密钥就足够了.就像检查频道的视频一样,我想知道频道是否是流媒体.

not*_*bot 27

您可以通过使用search.list和指定通道ID,将类型设置为video以及将eventType设置为来执行此操作live.

例如,当我搜索:

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCXswCcAMb5bvEUIDEzXFGYg&type=video&eventType=live&key=[API_KEY]

我得到以下内容:

{
 "kind": "youtube#searchListResponse",
 "etag": "\"sGDdEsjSJ_SnACpEvVQ6MtTzkrI/gE5P_aKHWIIc6YSpRcOE57lf9oE\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"sGDdEsjSJ_SnACpEvVQ6MtTzkrI/H-6Tm7-JewZC0-CW4ALwOiq9wjs\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "W4HL6h-ZSws"
   },
   "snippet": {
    "publishedAt": "2015-09-08T11:46:23.000Z",
    "channelId": "UCXswCcAMb5bvEUIDEzXFGYg",
    "title": "Borussia Dortmund vs St. Pauli 1-0 Live Stream",
    "description": "Borussia Dortmund vs St. Pauli Live Stream Friendly Match.",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/W4HL6h-ZSws/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/W4HL6h-ZSws/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/W4HL6h-ZSws/hqdefault.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "live"
   }
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

  • 如果查看`items` resource - >`id` - >`videoId`,你可以找到ID.在我上面发布的示例中,视频流的ID是"W4HL6h-ZSws". (2认同)
  • 但是这个API实际上只在我们启动实时流后几分钟响应,它在流刚刚启动时没有显示任何数据.@not_a_bot你可以请一个替代方案. (2认同)
  • 这还会返回“实时”但实际上不是流媒体的视频,有什么办法可以过滤掉那些家伙吗? (2认同)

小智 11

搜索方法 ( https://www.googleapis.com/youtube/v3/search ) 使用起来非常昂贵。默认情况下,您拥有 10,000个配额单位 ( https://developers.google.com/youtube/v3/determine_quota_cost ) 中的100 个配额单位。这意味着您每天只能收到 100 个请求,这很糟糕。

可以请求增加配额,但这似乎是强行解决问题的方法。

真的没有其他更简单的方法了吗?

  • 这正是我在 2019 年的战斗...很难想象 YouTube 不提供廉价的 API 请求只是为了查看频道是否直播...使用 liveBroadcast API 没有帮助,因为它对我来说并不全面没有办法指定频道... (10认同)

Vit*_*hel 11

伙计们,我找到了更好的方法来做到这一点。是的,它要求您向 YouTube 页面发出 GET 请求并解析 HTML,它可以与较新的版本一起使用 + 经同意后使用 + 与验证码一起使用(最有可能,90%)

您所需要做的就是向标签发出请求https://youtube.com/channel/[CHANNELID]/live并检查其href属性<link rel="canonical" />

例如,

<link rel="canonical" href="https://www.youtube.com/channel/UC4cueEAH9Oq94E1ynBiVJhw">
Run Code Online (Sandbox Code Playgroud)

表示没有直播,而

<link rel="canonical" href="https://www.youtube.com/watch?v=SR9w_ofpqkU">
Run Code Online (Sandbox Code Playgroud)

意味着有一个流,你甚至可以通过 获取它的数据videoid

由于规范 URL 对于 SEO 非常重要,并且重定向不再适用GETHEAD请求,因此我建议使用我的方法。

这也是我使用的简单脚本:

import { parse } from 'node-html-parser'
import fetch from 'node-fetch'

const channelID = process.argv[2] // process.argv is array of arguments passed in console

const response = await fetch(`https://youtube.com/channel/${channelID}/live`)
const text = await response.text()
const html = parse(text)
const canonicalURLTag = html.querySelector('link[rel=canonical]')
const canonicalURL = canonicalURLTag.getAttribute('href')
const isStreaming = canonicalURL.includes('/watch?v=')

console.log(isStreaming)
Run Code Online (Sandbox Code Playgroud)

然后运行npm init -y && npm i node-html-parser node-fetch在工作目录中创建项目并安装依赖项

然后运行node isStreaming.js UC4cueEAH9Oq94E1ynBiVJhw,它将打印 true/false(每次执行 400-600 毫秒)

它确实需要您依赖node-html-parsernode-fetch,但您可以使用内置的 HTTP 库(这很糟糕)发出请求,并重写它以使用正则表达式。(不要使用正则表达式解析 HTML。)


小智 6

我知道这是旧的,但我用PHP来解释自己.

$API_KEY = 'your api3 key';
$ChannelID = 'the users channel id';

$channelInfo = 'https://www.googleapis.com/youtube/v3/search?part=snippet&channelId='.$ChannelID.'&type=video&eventType=live&key='.$API_KEY;

$extractInfo = file_get_contents($channelInfo);
$extractInfo = str_replace('},]',"}]",$extractInfo);
$showInfo = json_decode($extractInfo, true);

if($showInfo['pageInfo']['totalResults'] === 0){

echo 'Users channel is Offline';

}else{

echo 'Users channel is LIVE!';

}
Run Code Online (Sandbox Code Playgroud)


eth*_*th0 5

我还面临 API 限制的困扰。我发现的最可靠和最便宜的方法就是简单地HEAD向 提出请求https://www.youtube.com/channel/CHANNEL_ID/live。如果频道处于直播状态,它将自动加载流。如果没有,它将加载频道视频源。您可以简单地检查Content-Length标头大小来确定哪个。如果是直播的话,大小几乎是不直播时的 2 倍。

根据您所在的地区,您可能需要接受 cookie 同意页面。只需发送您的请求即可cookies={ "CONSENT": "YES+cb.20210420-15-p1.en-GB+FX+634" }