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

时间:2015-09-08 09:36:16

标签: youtube youtube-api youtube-data-api youtube-livestreaming-api

我无法找到任何信息来检查YouTube频道是否实际上是否正在播放。 使用Twitch,您只需要频道名称,使用API​​即可检查是否有直播。

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

6 个答案:

答案 0 :(得分:26)

您可以使用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"
   }
  }
 ]
}

答案 1 :(得分: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!';

}

答案 2 :(得分:0)

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

可以请求增加配额,但这似乎蛮横地解决了问题。

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

答案 3 :(得分:0)

如果您将 streamlink 指向 https://www.youtube.com/channel/CHANNEL_ID/live 链接,它会告诉您它是否在线

$ streamlink "https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Ow/live"
[cli][info] Found matching plugin youtube for URL https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Ow/live
Available streams: 144p (worst), 240p, 360p, 480p, 720p, 1080p (best)
$ streamlink "https://www.youtube.com/c/mkbhd/live"          
[cli][info] Found matching plugin youtube for URL https://www.youtube.com/c/mkbhd/live
error: Could not find a video on this page

答案 4 :(得分:0)

考虑到搜索操作的成本,我发现 youtube API 非常严格。使用 aiohttp 和 beautifulsoup 进行网页抓取不是一种选择,因为更好的指标需要 javascript 支持。因此我转向。我找了 css 选择器

#info-text 然后搜索字符串 Started streaming 或其中包含 watching now

您也可以使用 flask 在 heroku 上运行一个小型 API。

答案 5 :(得分:0)

我也在为 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" } 发送您的请求。