Suxiaoxi 发表于 2024-5-26 04:49

有没有Python大佬,API返回数据问题

我的主程序 ro.py 会将收到的消息进行拆解,将”/ 战绩 “后的值作为 “Player_id” 传递给 zj.py,也会将 zj.py 收到的返回进行判断来发送对应的消息
我的需求是,当 zj.py 返回的值为 1 时发送 “API 接口已上限,请稍等 1-2 分钟后查询”,当返回值为 2 时发送 “未找到该玩家信息,请核对玩家 ID 后重试”
但现在遇到个问题,为什么我即使是输入错误的 ID,但是返回的值还是 1?一直显示“API 接口已上限,请稍等 1-2 分钟后查询”
ro.py
class MyClient(botpy.Client):
    async def on_group_at_message_create(self, message: GroupMessage):
      content = message.content.strip()
      if content.startswith("/战绩 "):
            player_id = content.split(" ")
            print("Detected /战绩 message with player_id:", player_id)
            # await message._api.post_group_message(
            #   group_openid=message.group_openid,
            #   msg_type=0,
            #   msg_id=message.id,
            #   content="正在帮你查询中,请稍等~")
            result = subprocess.run(, capture_output=True, text=True, encoding='utf-8')
            if result.returncode == 2:
                messageResult = await message._api.post_group_message(
                  group_openid=message.group_openid,
                  msg_type=0,
                  msg_id=message.id,
                  content="API接口已上限,请稍等1-2分钟后查询")
                _log.info(messageResult)
            elif result.returncode == 1:
                messageResult = await message._api.post_group_message(
                  group_openid=message.group_openid,
                  msg_type=0,
                  msg_id=message.id,
                  content="未找到该玩家信息,请核对玩家ID后重试")
                _log.info(messageResult)
            else:
                file_url = f"http://bot.6638.cf:443/{player_id}_stats.png"
                uploadMedia = await self.api.post_group_file(
                  group_openid=message.group_openid,
                  file_type=1,
                  url=file_url
                )
                await self.api.post_group_message(
                  group_openid=message.group_openid,
                  msg_type=7,# 7表示富媒体类型
                  msg_id=message.id,
                  media=uploadMedia,
                  content=' ',
                )
                time.sleep(10)
                file_path = os.path.join(os.getcwd(), f"{player_id}_stats.png")
                if os.path.exists(file_path):
                  os.remove(file_path)

zj.py
def get_player_data(player_id):
    url = f"https://api.pubg.com/shards/steam/players?filter={player_id}"
    response = requests.get(url, headers=headers)
    if not response.text.strip():
      return 1
    elif "No Players Found Matching Criteria" in response.text:
      return 2
    data = response.json()
    ban_type = data['data']['attributes']['banType'] if 'data' in data and data['data'] else None
    return data, ban_type

fire9 发表于 2024-5-26 07:20

可能是请求频繁了      

tuoluo348 发表于 2024-5-26 07:21

你可以尝试打印出响应的文本,看看在输入错误的 ID 时,API 返回了什么。
现在目测是输入错误id时api返回的内容有问题
根据返回的内容再写result.returncode部分的判断

hjboy11 发表于 2024-5-26 08:27

response = requests.get(url, headers=headers)
    if not response.text.strip():
这段可能要改,错误id时也满足第二句的条件,要把response.text输出来看看,正确和错误值应该是不一样的

你好,再见 发表于 2024-5-26 14:08

接口上限应当判断HTTP状态码为429才对

捷豹网络丶贱仔 发表于 2024-6-5 04:08

BTFKM 发表于 2024-6-5 14:16

你自己写反了吧?

            if result.returncode == 2:
                messageResult = await message._api.post_group_message(
                  group_openid=message.group_openid,
                  msg_type=0,
                  msg_id=message.id,
                  content="API接口已上限,请稍等1-2分钟后查询")
                _log.info(messageResult)
            elif result.returncode == 1:
                messageResult = await message._api.post_group_message(
                  group_openid=message.group_openid,
                  msg_type=0,
                  msg_id=message.id,
                  content="未找到该玩家信息,请核对玩家ID后重试")
                _log.info(messageResult)
页: [1]
查看完整版本: 有没有Python大佬,API返回数据问题