diff --git a/core/api_data.py b/core/api_data.py index c61a479..d1cc9cb 100644 --- a/core/api_data.py +++ b/core/api_data.py @@ -3,33 +3,37 @@ import requests import json from astrbot.api import logger -def api_data(api_url, json_data=None, outdata="data"): +def api_data_post(api_url, json_data=None, outdata=None): """ 获取数据的POST请求函数 Args: api_url: API地址 json_data: POST请求的JSON数据 - outdata: 返回数据中要提取的字段,默认为"data" + outdata: 返回数据中要提取的字段 Returns: 成功时返回outdata字段的数据,失败返回None """ try: - response = requests.post( - api_url, - json=json_data, # JSON body数据 - timeout=10, - verify=False - ) - + response = requests.post(api_url, json=json_data, timeout=10, verify=False) response.raise_for_status() data = response.json() - if data.get('code') not in [200, "0"]: - logger.error(f"API返回错误: {data.get('msg', '未知错误')}") - return None + # 检查是否有code字段 + if 'code' in data: + # 有code字段时,检查是否成功 + if data.get('code') not in [200, "0", 0]: + logger.error(f"API返回错误:{data.get('code', '未知状态')} {data.get('msg', '未知错误')}") + return None + else: + # 无code字段时,检查数据是否为空 + if not data: + logger.error("API返回空数据") + return None + if outdata is None or outdata == "": + return data return data.get(outdata, {}) except requests.exceptions.RequestException as e: @@ -39,27 +43,37 @@ def api_data(api_url, json_data=None, outdata="data"): logger.error(f"JSON解析错误: {e}") return None -def fetch_jx3_data(api_url=None,outdata="data", **params): +def api_data_get(api_url,params=None,outdata=None): """ 获取数据的GET请求函数 Args: api_url: API地址 - outdata: 返回数据中要提取的字段,默认为"data" - **params: 其他查询参数 + + params: 其他查询参数 Returns: 成功时返回outdata字段的数据,失败返回None """ try: - response = requests.get(api_url, params=params, timeout=10, verify=False) + response = requests.get(api_url, params, timeout=10, verify=False) response.raise_for_status() data = response.json() - if data.get('code') != 200: - logger.error(f"API返回错误: {data.get('msg', '未知错误')}") - return None + # 检查是否有code字段 + if 'code' in data: + # 有code字段时,检查是否成功 + if data.get('code') not in [200, "0", 0]: + logger.error(f"API返回错误:{data.get('code', '未知状态')} {data.get('msg', '未知错误')}") + return None + else: + # 无code字段时,检查数据是否为空 + if not data: + logger.error("API返回空数据") + return None + if outdata is None or outdata == "": + return data return data.get(outdata, {}) except requests.exceptions.RequestException as e: diff --git a/core/jx3jiaoyihang.py b/core/jx3_data.py similarity index 88% rename from core/jx3jiaoyihang.py rename to core/jx3_data.py index 98c5573..ba5fe1d 100644 --- a/core/jx3jiaoyihang.py +++ b/core/jx3_data.py @@ -1,26 +1,8 @@ # core/jx3jiaoyihang.py -import requests -import json from astrbot.api import logger from urllib.parse import quote - -#接口函数的实现 -def fetch_jx3_data(api_url=None, **params): - # 函数实现 - try: - response = requests.get(api_url, params=params, timeout=10, verify=False) - response.raise_for_status() - data = response.json() - - return data - - except requests.exceptions.RequestException as e: - logger.error(f"请求出错: {e}") - return None - except json.JSONDecodeError as e: - logger.error(f"JSON解析错误: {e}") - return None +from .api_data import api_data_get, api_data_post def fetch_all_pages(base_url, initial_params, max_pages=None): @@ -44,7 +26,7 @@ def fetch_all_pages(base_url, initial_params, max_pages=None): params["page"] = str(current_page) # 请求数据 - data = fetch_jx3_data(base_url, **params) + data = api_data_get(base_url, params) if not data or "list" not in data: break @@ -121,7 +103,7 @@ def merge_item_data_by_itemid(price_data, item_list_data): #交易行数据查询函数 -def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="武技殊影图"): +def jx3_data_jiaoyihang(inserver="眉间雪", inname="武技殊影图"): # 第一步:获取所有物品列表数据(处理分页) custom_url = f"https://node.jx3box.com/item_merged/name/{quote(inname)}" @@ -156,7 +138,7 @@ def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="武技殊影图"): "itemIds": stringids } - price_data = fetch_jx3_data(price_url, **price_params) + price_data = api_data_get(price_url, price_params) if not price_data or "data" not in price_data: return "无交易行数据" diff --git a/main.py b/main.py index 69ac7ec..70c203d 100644 --- a/main.py +++ b/main.py @@ -5,9 +5,9 @@ from astrbot.api.star import Context, Star, register from astrbot.api import logger from astrbot.api import AstrBotConfig -from .core.jx3jiaoyihang import fetch_jx3_jiaoyihang from .core.load_template import load_template -from .core.api_data import api_data, fetch_jx3_data +from .core.jx3_data import jx3_data_jiaoyihang +from .core.api_data import api_data_get, api_data_post # 禁用 SSL 警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -38,7 +38,6 @@ class Jx3ApiPlugin(Star): # 获取消息内容 message_str = event.message_str.strip() parts = message_str.split() - # 解析消息内容 if len(parts) > 1: params["server"] = parts[1] # 第二个参数为服务器 @@ -48,14 +47,15 @@ class Jx3ApiPlugin(Star): params["num"] = int(parts[2]) # 第三个参数为日期偏移 except ValueError: params["num"] = 0 # 参数为日期偏移 + # 获取数据 - data = fetch_jx3_data(custom_url, **params) + data = api_data_get(custom_url, params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") return - # 格式化返回消息 + # 处理返回数据 try: # 构建回复消息 result_msg = f"{params['server']}-{data.get('date')}-星期{data.get('week')}\n" @@ -91,13 +91,13 @@ class Jx3ApiPlugin(Star): # 解析消息内容 # 获取数据 - data = fetch_jx3_data(custom_url, **params) + data = api_data_get(custom_url, params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") return - # 格式化返回消息 + # 处理返回数据 try: # 构建回复消息 result_msg = f"{data.get('text')}\n" @@ -124,13 +124,13 @@ class Jx3ApiPlugin(Star): # 解析消息内容 # 获取数据 - data = fetch_jx3_data(custom_url,**params) + data = api_data_get(custom_url,params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") return - # 格式化返回消息 + # 处理返回数据 try: # 构建回复消息 result_msg = f"剑网三最近技改\n" @@ -147,8 +147,8 @@ class Jx3ApiPlugin(Star): @filter.command("剑三交易行") - async def jx3_jiaoyihang(self, event: AstrMessageEvent): - """剑三交易行 服务器 物品名称""" + async def jx3_data_jiaoyihang(self, event: AstrMessageEvent): + """剑三交易行 物品名称 服务器""" # 接口参数 params = { @@ -162,14 +162,14 @@ class Jx3ApiPlugin(Star): # 解析消息内容 if len(parts) > 1: - params["server"] = parts[1] # 第二个参数为服务器 + params["name"] = parts[1] if len(parts) > 2: - params["name"] = parts[2] # 第三个参数为日期偏移 + params["server"] = parts[2] - # 获取交易行数据 + # 获取交易行数据 try: - items_data = fetch_jx3_jiaoyihang(params["server"], params["name"]) + items_data = jx3_data_jiaoyihang(params["server"], params["name"]) if not items_data or items_data == "无交易行数据": yield event.plain_result(f"在服务器【{params['server']}】未找到物品【{params['name']}】的交易行数据") @@ -192,13 +192,9 @@ class Jx3ApiPlugin(Star): "items": items_data, "server": params["server"], "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") - } + } - # 调整渲染图片的尺寸 - options = { - } - - url = await self.html_render(template_content, render_data, options) + url = await self.html_render(template_content, render_data, options={}) yield event.image_result(url) except Exception as e: @@ -215,20 +211,22 @@ class Jx3ApiPlugin(Star): params = { "serverName": "眉间雪" # 默认服务器 } + # 获取消息内容 message_str = event.message_str.strip() parts = message_str.split() # 解析消息内容 if len(parts) > 1: params["serverName"] = parts[1] # 第二个参数为服务器 + # 获取数据 - data = api_data(custom_url,params) + data = api_data_post(custom_url,params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") return - # 格式化返回消息 + # 处理返回数据 try: # 构建回复消息 yield event.image_result(data.get("picUrl")) @@ -237,6 +235,7 @@ class Jx3ApiPlugin(Star): logger.error(f"处理数据时出错: {e}") yield event.plain_result("处理接口返回信息时出错") + @filter.command("剑三金价") async def jx3_jinjia(self, event: AstrMessageEvent): """剑三金价 服务器""" @@ -246,20 +245,22 @@ class Jx3ApiPlugin(Star): params = { "serverName": "眉间雪" # 默认服务器 } + # 获取消息内容 message_str = event.message_str.strip() parts = message_str.split() # 解析消息内容 if len(parts) > 1: params["serverName"] = parts[1] # 服务器 + # 获取数据 - data = api_data(custom_url,params) + data = api_data_post(custom_url,params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") return - # 格式化返回消息 + # 处理返回数据 try: # 加载模板 try: @@ -273,12 +274,9 @@ class Jx3ApiPlugin(Star): "items": data, "server": params["serverName"], "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") - } - # 调整渲染图片的尺寸 - options = { } - url = await self.html_render(template_content, render_data, options) + url = await self.html_render(template_content, render_data, options={}) yield event.image_result(url) except Exception as e: @@ -296,6 +294,7 @@ class Jx3ApiPlugin(Star): "adventureName": "阴阳两界", # 默奇遇 "serverName": "眉间雪" # 默认服务器 } + # 获取消息内容 message_str = event.message_str.strip() parts = message_str.split() @@ -304,8 +303,9 @@ class Jx3ApiPlugin(Star): params["adventureName"] = parts[1] # 奇遇名称 if len(parts) > 2: params["serverName"] = parts[2] # 第二个参数为服务器 + # 获取数据 - data = api_data(custom_url,params) + data = api_data_post(custom_url,params,"data") if not data: yield event.plain_result("获取获取接口信息失败,请稍后再试") @@ -334,11 +334,8 @@ class Jx3ApiPlugin(Star): "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") ,"qiyuname": params["adventureName"] } - # 调整渲染图片的尺寸 - options = { - } - url = await self.html_render(template_content, render_data, options) + url = await self.html_render(template_content, render_data, options={}) yield event.image_result(url) except Exception as e: