【问题标题】:How to get membership badges for YouTube live chat messages?如何获得 YouTube 实时聊天消息的会员徽章?
【发布时间】:2022-01-08 16:35:12
【问题描述】:

我一直在探索 YouTube 实时聊天 API 以呈现自定义聊天提要,并且想知道如何像 YouTube 网站本身那样在用户旁边显示会员/赞助徽章?

查看来自 API 的响应,我可以看到 YouTube 确实告诉我用户是会员/赞助商,但它不包括应该在什么级别/持续时间以及应该显示什么徽章图像:

{
  "kind": "youtube#liveChatMessage",
  "etag": "MHpDf4piJnYR2X3lP-7mwBavfWM",
  "id": "LCC.CjgKDQoLd1VwYUIzYTdkVW8qJwoYVUNEWExPVjNTMEdUd21EOFY4R1A2dzlREgt3VXBhQjNhN2RVbxI7ChpDSVRodDQzS292VUNGZVV0clFZZHNJRUwzZxIdQ1B1VHJiYV9vdlVDRllhRGdnb2RaUE1LanctMjY",
  "snippet": {
    "type": "textMessageEvent",
    "liveChatId": "Cg0KC3dVcGFCM2E3ZFVvKicKGFVDRFhMT1YzUzBHVHdtRDhWOEdQNnc5URILd1VwYUIzYTdkVW8",
    "authorChannelId": "UCYC1zf9Dznp-xpe9rwEopLQ",
    "publishedAt": "2022-01-08T16:31:12.317Z",
    "hasDisplayContent": true,
    "displayMessage": "Instead of waiting 30 seconds you had to spam facecam now you get a 5 minute timeout",
    "textMessageDetails": {
      "messageText": "Instead of waiting 30 seconds you had to spam facecam now you get a 5 minute timeout"
    }
  },
  "authorDetails": {
    "channelId": "UCYC1zf9Dznp-xpe9rwEopLQ",
    "channelUrl": "http://www.youtube.com/channel/UCYC1zf9Dznp-xpe9rwEopLQ",
    "displayName": "Cody Kerley",
    "profileImageUrl": "https://yt3.ggpht.com/ytc/AKedOLQFiwv-x6ukfTOh7pD7WlCe7Ss1AB5wH7QAF53uiQ=s88-c-k-c0x00ffffff-no-rj",
    "isVerified": false,
    "isChatOwner": false,
    "isChatSponsor": true,
    "isChatModerator": true
  }
}

但是,如果我查看此消息在 YouTube 聊天本身中的显示方式,则用户拥有与其级别/持续时间对应的正确会员徽章,特定于该频道,并且工具提示还会向您显示会员级别/持续时间/赞助:

如何从 API 中获取每条聊天消息的这些信息,以便我自己正确呈现徽章?

干杯。

【问题讨论】:

  • 我想为您提供帮助,但是即使在网络界面上我也无法复制您的图片。您能否与我们分享一个带有聊天重播的 YouTube 视频 ID? “随机”用户可以看到这些信息还是只有你?在“随机”的情况下,我可以尝试逆向工程。
  • 是的,任何查看直播实时聊天的人都可以使用此信息,包括匿名用户——我只是在 YouTube API 的任何地方都看不到它。上面包含的演示消息来自youtube.com/watch?v=wUpaB3a7dUo,这只是我选择用来测试我的代码的随机直播。
  • 只是为了确保您的请求是关于已结束的直播或正在直播的直播或两者兼而有之?
  • 希望通过一个活跃的实时聊天来解决这个问题,目前正在广播:)

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


【解决方案1】:

正如你所说,似乎没有任何官方的 YouTube Data API v3 端点为 YouTube 实时聊天消息提供会员徽章。

但是,我对 YouTube 实时聊天消息进行了逆向工程,解决方案如下:

  1. 通过执行(不要忘记使用您的 YouTube 直播视频 ID 更改 VIDEO_ID)来获取以 0ofMyAO 开头的 continuation 令牌(似乎有 2 个都可以):

    curl -s 'https://www.youtube.com/live_chat?v=VIDEO_ID' -H 'User-Agent: Firefox/95'

  2. 使用此 continuation 令牌通过执行获取有关当前 YouTube 实时聊天消息的所有信息(不要忘记将 CONTINUATION_TOKEN 更改为您在步骤 1 中获取的 continuation 令牌,注意:不要'不关心密钥不是 YouTube 数据 API v3 密钥):

    curl -s 'https://www.youtube.com/youtubei/v1/live_chat/get_live_chat?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw '{"context" :{"client":{"clientName":"WEB","clientVersion":"2.2022011"}},"continuation":"CONTINUATION_TOKEN"}'

  3. 同样,从您在第 1 步获取 continuation 令牌的那一刻起,您将获得有关当前 YouTube 实时聊天消息的所有信息。但是 continuation 令牌似乎每 5 分钟到期一次,因此请获取一个新的一个来自第 2 步的响应。或再次执行第 1 步。
    注 0:在 5 分钟窗口内,您可以执行第 2 步。实时获取消息的次数不限
    注意 1:我建议您每 4 分钟更换一次 continuation 令牌,以免错过任何消息

  4. 我让您了解包含您要查找的信息的 JSON 响应

注意:在第 1 步中,您检索在请求之前发送的最近消息,但这次是 HTML 格式而不是 JSON 格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2022-12-10
    • 2018-03-10
    • 2016-08-24
    • 2016-07-23
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多