YouTube API:如何获取 liveChatId?

Posted

技术标签:

【中文标题】YouTube API:如何获取 liveChatId?【英文标题】:YouTube API: How do I get the liveChatId? 【发布时间】:2016-08-09 14:16:26 【问题描述】:

文档说:

“liveChatId 参数指定将返回其消息的聊天 ID。与广播关联的实时聊天 ID 在 liveBroadcast 资源的 sn-p.liveChatId 属性中返回。”

但是当使用 APIs Explorer 和 youtube.liveBroadcasts.list 获取 liveBroadcast 的 sn-p 时,返回的结果中没有 liveChatId 属性。

我正在使用以下 URI(省略键):

https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet&mine=true

我做错了什么?

这是响应(一些值替换为...):


 "kind": "youtube#liveBroadcastListResponse",
 "etag": "...",
 "pageInfo": 
  "totalResults": 1,
  "resultsPerPage": 5
 ,
 "items": [
  
   "kind": "youtube#liveBroadcast",
   "etag": "...",
   "id": "...",
   "snippet": 
    "publishedAt": "2016-04-18T17:04:24.000Z",
    "channelId": "...",
    "title": "...",
    "description": "...",
    "thumbnails": 
     "default": 
      "url": "...",
      "width": 120,
      "height": 90
     ,
     "medium": 
      "url": "...",
      "width": 320,
      "height": 180
     ,
     "high": 
      "url": "...",
      "width": 480,
      "height": 360
     ,
     "standard": 
      "url": "...",
      "width": 640,
      "height": 480
     ,
     "maxres": 
      "url": "...",
      "width": 1280,
      "height": 720
     
    ,
    "scheduledStartTime": "1970-01-01T00:00:00.000Z",
    "actualStartTime": "2016-04-18T17:04:24.250Z",
    "isDefaultBroadcast": false
   
  
 ]

在请求时,流上还发生了一个活跃的对话。

显然,使用“Stream now”创建的直播不包含 liveChatId,即使它们包含实时聊天。

有没有办法为“立即直播”直播获取 liveChatId?

【问题讨论】:

您能否发布从 YouTube 获得的示例回复?您确定您列出的活动已实际开始并具有有效的聊天室/ID? 用请求的信息更新了帖子。直播正在流式传输,并且聊天室在请求时处于活动状态。如果我没有流式传输,则响应中没有项目,正如预期的那样。 你说的是liveBroadcast的liveChatId还是用户的liveChatId(用于禁止或删除)? liveBroadcast 的 liveChatId,所以我可以阅读流的聊天内容。 基本上,我只需要知道从哪里获取 youtube.liveChatMessages.list 的 liveChatId,因为文档不正确。 【参考方案1】:

这是一篇相当老的帖子,但是看到我在互联网上搜索了一个答案但找不到答案,我希望有人觉得这很有帮助。

要获取属于您的直播活动的 liveChatId,您可以执行以下操作:

首先,获取videoId

response.items[0].id.videoId

然后获取 liveStreamingDetails

buildApiRequest('GET',
        '/youtube/v3/videos', 
            'id': videoID,
            'part': 'snippet,contentDetails,statistics,liveStreamingDetails'
        );

现在您可以通过以下方式从上述响应中获取 liveChatId:

response.items[0].liveStreamingDetails.activeLiveChatId

【讨论】:

【参考方案2】:

有没有办法为“立即直播”直播获取 liveChatId?

是的,你可以。我有一个自动化系统,它只使用这种设置来进行“立即流式传输”流。

据我所知,我所做的唯一不同的事情是在 API URI 中指定 broadcastType=allbroadcastType=persistent

您会注意到我的流是默认流,但并非必须如此。事实上,基本上LiveStream 端点唯一有用的方面就是.status.configurationIssues 信息。 (甚至 streamName 摄取地址都不匹配)

这就是我将两个端点关联起来的方式。也许您可以使用此模板填写一些空白。 (所有字符串随机化,thumbnails 部分已删除)

直播

URI:https://www.googleapis.com/youtube/v3/liveStreams/?part=status,sn-p&default=true

回应:

"kind": "youtube#liveStreamListResponse", "etag": "\"j1yhvAPYkjsoF8yjoVGsTlIFzCS/rqgpDvaMrWOPqUrLPxJd4XUFoKg\"", “页面信息”: “总结果”:1, “结果每页”:5 , “项目”: [ "kind": "youtube#liveStream", "etag": "\"j1yhvAPYkjsoF8yjoVGsTlIFzCS/SRutyOE9apA9K1qAdh2s9ZYE-Dp\"", "id": "e5LT2xEURi9BQzf2rLe5eB3325081929219850", “sn-p”: “发布时间”:“2016-09-05T23:21:33.000Z”, "channelId": "QIr0IE1wRTRj2SUku4eFj0mK", "title": "默认流", “描述”: ””, “isDefaultStream”:真 , “状态”: "streamStatus": "活动", “健康状况”: “状态”:“好” ]

直播:

URI:https://www.googleapis.com/youtube/v3/liveBroadcasts/?part=status,contentDetails,sn-p,id&broadcastStatus=active&broadcastType=persistent

回应:

"kind": "youtube#liveBroadcastListResponse", "etag": "\"j1yhvAPYkjsoF8yjoVGsTlIFzCS/MFvQunCBDdqlkhPMness6LN1zao\"", “页面信息”: “总结果”:1, “结果每页”:5 , “项目”: [ "kind": "youtube#liveBroadcast", "etag": "\"j1yhvAPYkjsoF8yjoVGsTlIFzCS/mK_CAQ9rrVulNXbKbeIveFnQPd8\"", "id": "eXrevq9RzVQ", “sn-p”: “发布时间”:“2017-05-07T16:58:05.000Z”, "channelId": "QIr0IE1wRTRj2SUku4eFj0mK", "title": "514306-pgju", “描述”: ””, “scheduledStartTime”:“1970-01-01T00:00:00.000Z”, "actualStartTime": "2017-05-08T01:21:45.000Z", “isDefaultBroadcast”:真, "liveChatId": "NiHXTCKPfAyCJrPgREDRnvMSL0N5LBiVUlZoLSULA9vqyoR" , “状态”: "lifeCycleStatus": "生活", "privacyStatus": "未列出", “录音状态”:“录音” , “内容详细信息”: "boundStreamId": "e5LT2xEURi9BQzf2rLe5eB3325081929219850", "boundStreamLastUpdateTimeMs": "2016-09-05T23:21:33.749Z", “监控流”: “启用监视器流”:假 , “启用嵌入”:是的, “enableDvr”:是的, “启用内容加密”:假, “startWithSlate”:假, “recordFromStart”:真, “enableClosedCaptions”:假, "closedCaptionsType": "closedCaptionsDisabled", “启用LowLatency”:假, “投影”:“矩形” ]

请注意,正如您在一定程度上注意到的那样,通过 API 处理“Stream Now”事件,不仅仅是特定于 liveChatId,还有一些配置设置会更改使用默认参数返回结果的方式,有时他们可以更改流程中涉及的顺序和步骤。我什至发现实际上有一些参数可用于未记录的LiveStream 端点,LiveBroadcast 端点也是如此。 另外还有一些bug。

【讨论】:

【参考方案3】:

YouTube 目前不支持将 API 调用与“立即直播”混合使用以及通过 API 创建事件。无法从“Stream Now”广播中获取聊天消息,只能使用完全使用 API 创建的广播。

如果您认为这是 API 缺陷,我建议您打开增强或缺陷票 here。

【讨论】:

这并不完全正确。您可以手动创建实时事件并从该流中获取聊天消息。但是您对“立即流式传输”是正确的。谢谢。 :) @C.Olimar :可以确认手动创建事件有效。谢谢:) @AvindraGoolcharan 你能提供代码提示如何做到这一点吗? @KMX 根据我的评论,我“手动”创建了该事件 - 即不涉及任何代码。只需使用 YouTube 的用户界面

以上是关于YouTube API:如何获取 liveChatId?的主要内容,如果未能解决你的问题,请参考以下文章

Youtube“实时聊天”直接网址

如何使用 Youtube API 获取 Youtube 频道横幅?

如何使用 Youtube Javascript API 获取 youtube 用户的观看历史记录?

您如何使用 YouTube 数据 API 获取过去的直播流

如何使用 YouTube Java API 通过主题标签获取随机视频

在搜索Youtube api后,如何获取Youtube视频[关闭]