首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pytchat python库无法找到有效的livechat注释id YouTube API。

pytchat python库无法找到有效的livechat注释id YouTube API。
EN

Stack Overflow用户
提问于 2022-08-08 20:28:59
回答 2查看 117关注 0票数 1

我正在尝试使用pytchat库来获取关于我的慢速生活聊天的信息。我想要的两个主要信息是:消息文本(我可以可靠地获得)和注释id (显然不那么可靠)。pytchat库允许以各种不同的方式访问YouTube请求信息。所有这些似乎都给了我同样糟糕的输出。使用此代码:

代码语言:javascript
运行
复制
from pytchat import CompatibleProcessor, create
import time, sys
chat_ = create(sys.argv[1], processor = CompatibleProcessor())
while chat_.is_alive():
  try:
    data = chat_.get()
    polling = data['pollingIntervalMillis']/1000
    for c in data['items']:
      if c.get('snippet'):
        print(c['snippet']['displayMessage'] + ' || ' + c['id'])
        time.sleep(polling/len(data['items']))
  except KeyboardInterrupt:
    chat_.terminate()

我得到的每一个评论,因为它是由YouTube提供的。消息位很好。然而,C‘’id‘则是另一个故事。此元素存储的注释in通常以这种方式格式化:

代码语言:javascript
运行
复制
LCC.CjkKGkNQRHhoYUNEdVBrQ0ZWRzE1UWNkdEhZQzlREhtDT0dDMFBYMXRfa0NGWTZUd2dFZDdkZ0Uydzk%3D

这不是一个实际的评论id。我知道的也很多,因为每当我在删除请求中将这个注释id传递给YouTube API时,我会得到以下内容:

代码语言:javascript
运行
复制
{'error': {'code': 404, 'message': 'The liveChatMessage that you are trying to delete cannot be found.', 'errors': [{'message': 'The liveChatMessage that you are trying to delete cannot be found.', 'domain': 'youtube.liveChat', 'reason': 'liveChatMessageNotFound'}]}}

使用curl发出POST请求会产生一种不同风格的评论id:

代码语言:javascript
运行
复制
LCC.CjgKDQoLQlRERDlEYVFZdHMqJwoYVUMxSE1UdDVjb0VWNi1tV1BhZEJRU0l3EgtCVEREOURhUVl0cxI5ChpDUER4aGFDRHVQa0NGVkcxNVFjZHRIWUM5URIbQ09HQzBQWDF0X2tDRlk2VHdnRWQ3ZGdFMnc5

我没有尝试用这种类型的注释id删除注释,但只要看一下它,我就会认为它比pytchat提供的任何内容都更有效。

这是pytchat的预期行为吗?我没见过其他人用这种方式使用图书馆。如果是这样的话,我如何才能得到实际的评论id?(最好不提供任何授权令牌)

编辑(例如c代码片段与关联的livestream视频ids):

代码语言:javascript
运行
复制
xLsoN8z9xq:
{'kind': 'youtube#liveChatMessage', 'etag': '', 'id': 'LCC.CjoKGkNKSGVfTml5dXZrQ0Zjc1dyUVlkOUhNSnN3EhxDUFROd0txc3V2a0NGV1doMkFVZHNFY0l1ZzEw', 'snippet': {'type': 'textMessageEvent', 'liveChatId': '', 'authorChannelId': 'UCdyotM4u3QW4Nvqr-iZghyQ', 'publishedAt': '2022-08-09T18:33:27.877Z', 'hasDisplayContent': True, 'displayMessage': 'all hail for lord yacine', 'textMessageDetails': {'messageText': 'all hail for lord yacine'}}, 'authorDetails': {'channelId': 'UCdyotM4u3QW4Nvqr-iZghyQ', 'channelUrl': 'http://www.youtube.com/channel/UCdyotM4u3QW4Nvqr-iZghyQ', 'displayName': 'rahil', 'profileImageUrl': 'https://yt4.ggpht.com/ytc/AMLnZu_nFXi8dLoAOUeyiS0wcqLivdaFyTOc1yYQjbiOqg=s64-c-k-c0x00ffffff-no-rj', 'isVerified': False, 'isChatOwner': False, 'isChatSponsor': False, 'isChatModerator': False}}

mx9EqnEhg74:
{'kind': 'youtube#liveChatMessage', 'etag': '', 'id': 'LCC.CjsKGkNPdmprckt5dXZrQ0ZXS3Q1UWNkSWM4S0hnEh1DSm10azkydXV2a0NGYW9tZ3dvZDI5UUYzQS0xMw%3D%3D', 'snippet': {'type': 'textMessageEvent', 'liveChatId': '', 'authorChannelId': 'UCgkIDx-V7zMjnCrEtXaxUWQ', 'publishedAt': '2022-08-09T18:32:06.449Z', 'hasDisplayContent': True, 'displayMessage': 'yuck', 'textMessageDetails': {'messageText': 'yuck'}}, 'authorDetails': {'channelId': 'UCgkIDx-V7zMjnCrEtXaxUWQ', 'channelUrl': 'http://www.youtube.com/channel/UCgkIDx-V7zMjnCrEtXaxUWQ', 'displayName': 'grace', 'profileImageUrl': 'https://yt4.ggpht.com/nDFvN9uOZw7eP3-NQhIZZmXH-I5J30FEF629JjJ-NMpADvWLy3Q6BIkqtT-tX8drsVprLcNw=s64-c-k-c0x00ffffff-no-rj', 'isVerified': False, 'isChatOwner': False, 'isChatSponsor': False, 'isChatModerator': False}}

jfKfPfyJRdk:
{'kind': 'youtube#liveChatMessage', 'etag': '', 'id': 'LCC.CkUKGkNPcV9oWVd5dXZrQ0ZhTWlyUVlkSFJjSEVnEidDUDZYMDdxd3V2a0NGYy1JbFFJZHBxSUxRUTE2NjAwNjk4Mjk0Njk%3D', 'snippet': {'type': 'textMessageEvent', 'liveChatId': '', 'authorChannelId': 'UChOT0CZQ9ZwiwxNfkdI72tQ', 'publishedAt': '2022-08-09T18:30:31.860Z', 'hasDisplayContent': True, 'displayMessage': 'mds eu tô em um tédio absurdo KKKKKK', 'textMessageDetails': {'messageText': 'mds eu tô em um tédio absurdo KKKKKK'}}, 'authorDetails': {'channelId': 'UChOT0CZQ9ZwiwxNfkdI72tQ', 'channelUrl': 'http://www.youtube.com/channel/UChOT0CZQ9ZwiwxNfkdI72tQ', 'displayName': 'Ruth.', 'profileImageUrl': 'https://yt4.ggpht.com/ytc/AMLnZu-P2JRuFGU5ibeJiBIflPSkhUyS_0Zqz3w6CClZBg=s64-c-k-c0x00ffffff-no-rj', 'isVerified': False, 'isChatOwner': False, 'isChatSponsor': False, 'isChatModerator': False}}

还有一个编辑:我阅读了pytchat源代码,发现了这个可疑的代码片段(在__init__.py中):

代码语言:javascript
运行
复制
from base64 import a85decode as dc
_sml = dc(b"BQS?8F#ks-GB\\6`H#IhIF^eo7@rH3;H#IhIF^eor06T''Ch\\'(?XmbXF>%9<FC/iuG%G#jBOQ!ICLqcS5tQB2;gCZ)?UdXC;f$GR3)MM2<(0>O7mh!,G@+K5?SO9T@okV").decode()
_smr = dc(b"BQS?8F#ks-GB\\6`H#IhIF^eo7@rH3;H#IhIF^eor06T''Ch\\'(?XmbXF>%9<FC/iuG%G#jBOQ!iEb03+@<k(QAU-F)8U=fDGsP557S5F7CiNH7;)D3N77^*B6YU@\\?WfBr0emZX=#^").decode()

这些是指向以API键作为参数的YouTube的链接。如果您查看YouTube自己的API文档(或者到其他地方查看),您很快就会发现YouTube/v1API不再受支持。事实上,我在任何地方都找不到旧API的文档。看来我已经到了死胡同。

EN

回答 2

Stack Overflow用户

发布于 2022-08-09 20:37:50

您在问题中提供的示例数据在liveChatId属性中没有值:

snippet.liveChatId字符串 唯一标识与消息关联的实时聊天的ID。与广播关联的实时聊天ID将在snippet.liveChatId资源的属性中返回。

这样,您应该检查LiveBroadcasts:列表端点,以便返回liveChatId

通过检查这张发行追踪器的票,我在YouTube Data正式文档中使用了liveChatId;但是,我得到了这个(在本例中),实时聊天不再是活动的。

尝试使用LiveChatMessages: list的示例

结果:

代码语言:javascript
运行
复制
{
  "error": {
    "code": 403,
    "message": "The live chat is no longer live.",
    "errors": [
      {
        "message": "The live chat is no longer live.",
        "domain": "youtube.liveChat",
        "reason": "liveChatEnded"
      }
    ]
  }
}

在本例中,您可以看到,我使用liveChatId作为参数,但是,这个ID看起来与代码片段中显示的"id“非常不同.

在我看来,这就像API中的一个bug,但是,我承认我还没有尝试过LiveChatMessagesLiveBroadcast端点。

如果您认为这是一个bug,或者您需要进一步的帮助,请考虑检查问题跟踪器,看看是否有其他人发布了您的类似问题或在那里发布了该问题。

票数 1
EN

Stack Overflow用户

发布于 2022-08-10 04:48:29

这是一个备用答案,直到我能够提供一些代码片段,这将使一些事情清楚。首先,如果您想知道pytchat为什么不提供有效的实时聊天评论if,我不得不说我不确定。不过,到目前为止,我将给出我最好的猜测: YouTube使用的版本已经很老了。事实上,它可能早于删除实时聊天评论的能力(我希望的目标)。我上面引用的pytchat源代码帮助我实现了这个假设。_sml和_smr变量设置为:

代码语言:javascript
运行
复制
'https://www.youtube.com/youtubei/v1/live_chat/get_live_chat_replay?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8'

以及:

代码语言:javascript
运行
复制
'https://www.youtube.com/youtubei/v1/live_chat/get_live_chat?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8'

分别使用。在通过httpx库发出的get请求中,在整个代码中都使用这些变量。

可能存在通过这个旧API删除YouTube实时聊天注释的方法,但是我还没有找到关于它的文档。

直到后来,PixelBlurb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73283681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档