Python+Graphql:KeyError:执行时收到“数据” 定义“数据”有问题的块

问题描述

收到错误

我帮助开发人员维护一个简单的 Python 脚本,该脚本从 unsee.cc 中抓取图像。我帮助纠正了 URL 并删除了一些有问题的小代码。在过去的两天里,我在运行脚本时收到了一个错误,我对此感到非常困惑并且缺乏解决问题的必要知识。我收到的错误如下:

Traceback (most recent call last):
  File "/unsee-dl/main.py",line 104,in <module>
    main()
  File "/unsee-dl/main.py",line 14,in main
    asyncio.get_event_loop().run_until_complete(run_downloader())
  File "/usr/lib/python3.8/asyncio/base_events.py",line 616,in run_until_complete
    return future.result()
  File "/unsee-dl/main.py",line 98,in run_downloader
    await download_beta(album_ids_beta_version,args.out_dir,args.group_album)
  File "/unsee-dl/main.py",line 33,in download_beta
    await client.anonymous_login()
  File "/unsee-dl/unsee_dl/unsee_beta.py",line 62,in anonymous_login
    tokens = content["data"]["getToken"]
KeyError: 'data

违规代码

产生错误的有问题的代码块与以匿名用户身份登录会话有关,如下所示:

定义“数据”

keyerror 引用了变量“data”,它是从服务器拉取的 websocket 设置。它在导入的单独文件中定义,如下所示:

async def download_album(self,album_id):
        unsee_name = names.get_random()
        ws_params = "?album={}&name={}".format(album_id,unsee_name)
        ssl_context = ssl.create_default_context()

        # Settings WS
        async with self.session.ws_connect(
            _UNSEE_WEBSOCKET_URL.format("settings") + ws_params,ssl=ssl_context
        ) as ws_settings:
            await ws_settings.send_str("{}")
            data = await ws_settings.receive()

            settings = json.loads(data.data,encoding="utf-8")

            logging.info("[ws_settings] {}".format(settings))

        images_info = []

有问题的块

实际有问题的块涉及以匿名用户身份创建新会话。产生错误的代码块如下:

async def anonymous_login(self):
        """
        Login with an anonymous token
        """
        gql_body = {
            "operationName": "getToken","variables": {},"query": """
query getToken($identity: ID,$code: ID,$refreshToken: ID,$name: String) {
  getToken(identity: $identity,code: $code,refreshToken: $refreshToken,name: $name) {
    ...AuthPayloadFragment
    __typename
  }
}

fragment AuthPayloadFragment on AuthPayload {
  token
  refreshToken
  __typename
}
""",}
        async with self.session.post(_GRAPHQL_URL,json=gql_body) as response:
            content = await response.json()
            #!tokens = content["data"]["getToken"]
            tokens = content["data"]["getToken"]
            self.token = tokens["token"]

评论

所以你有它。在审查中,来自服务器的响应似乎与脚本预期的不同,从而使“数据”未定义并阻止脚本正确执行。我如何才能发现更改以便适当地查询 Web 套接字服务器并提供数据定义?


这是我专门为解决此问题而创建的一个看不见的会话,它将在接下来的 24 小时内开放。 Test session

包含我正在处理的项目的完整官方存储库。 Unsee_dl.py


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...