我一直在使用 YouTube 实时聊天 API 来渲染 YouTube 实时流聊天,但我对如何处理表情感到困惑。
用于实时聊天消息的 YouTube API 似乎只以纯文本形式返回消息,而不是有关表情的元数据。这本身很好,因为纯文本中的表情有标准语法,但我正在努力解决如何将它们转换为图像的问题。
如果我查看从 YouTube API 获得的响应,除了纯文本消息中的内容之外,我看不到任何有关表情的信息:
{
"kind": "youtube#liveChatMessage",
"etag": "UaRmhczzavJeCA9S1_s8J_4MHD0",
"id": "LCC.CjgKDQoLd1VwYUIzYTdkVW8qJwoYVUNEWExPVjNTMEdUd21EOFY4R1A2dzlREgt3VXBhQjNhN2RVbxJFChpDT25vOHN6SW92VUNGZUFJMWdBZE85b1BfZxInQ1BhdG12UEhvdlVDRlhzNFRBb2RVSE1BeVExNjQxNjU5MDY5OTU3",
"snippet": {
"type": "textMessageEvent",
"liveChatId": "Cg0KC3dVcGFCM2E3ZFVvKicKGFVDRFhMT1YzUzBHVHdtRDhWOEdQNnc5URILd1VwYUIzYTdkVW8",
"authorChannelId": "UC_MMOdc84fer50_SIPiPX1Q",
"publishedAt": "2022-01-08T16:24:28.363Z",
"hasDisplayContent": true,
"displayMessage": ":yougotthis::elbowcough:",
"textMessageDetails": {
"messageText": ":yougotthis::elbowcough:"
}
},
"authorDetails": {
"channelId": "UC_MMOdc84fer50_SIPiPX1Q",
"channelUrl": "http://www.youtube.com/channel/UC_MMOdc84fer50_SIPiPX1Q",
"displayName": "Blake Nolan",
"profileImageUrl": "https://yt3.ggpht.com/ytc/AKedOLSVNcUaOuoH49GXdG1Zlam0uBMJYJXUI5h_pHtMr-rOVr5hDnjzspewBUVqgKyw=s88-c-k-c0x00ffffff-no-rj",
"isVerified": false,
"isChatOwner": false,
"isChatSponsor": false,
"isChatModerator": false
}
}
但是如果我看看这条消息在 YouTube 聊天中的显示方式,就会呈现表情:
我自己执行此查找和转换以便可以从聊天消息中呈现表情,我缺少什么?
干杯。
通过运行步骤 1,您将在请求之前收到以 HTML 格式发送的实时消息,其中的表情符号格式为 :emote:,但随后会收到表情符号图像的 URL。
通过运行所有步骤,您将获得以 JSON 格式实时发送的实时消息,同样,您将获得带有 :emote: 格式的表情的实时聊天消息,但随后会收到表情图像的 URL。
我让你了解 HTML 和 JSON 格式。
注意:我还发现,在对 0 到 8 之间的
https://www.gstatic.com/youtube/img/emojis/emojis-svg-N.json
和 N
进行反向工程时,它们会返回一堆链接到其图像 URL 的表情代码,但是像您所说的一些表情并不在这些文件中不知道为什么。
2024年呼唤,
我正在尝试执行相同的操作,以在流元素的自定义 twitch + youtube 聊天小部件中获取表情,因此我尝试在聊天的网络请求中查找表情...... 我找到了它们,但是...
整个内容仅包含在聊天返回的 HTML 中的脚本标记内,并保存到
window["ytInitialData"]
对象中,并且可以通过 window["ytInitialData"].contents.liveChatRenderer.emojis
访问。该对象包含表情选择器中显示的所有表情的数组(包括频道唯一的表情)
因此,只要您找到一种方法来获取正确的频道聊天,对其进行解析,并获取具有
window["ytInitialData"]
的脚本内容,您应该能够执行您需要的操作(我还没有达到这一点,我会在我这样做之后更新这个,主要是把它留在这里,以防有人有一个聪明的方法来做到这一点或者比我更快)。