From f4b872fc0e46afacd9c8388459a8fababa363df9 Mon Sep 17 00:00:00 2001 From: qsc20001102 Date: Fri, 19 Sep 2025 19:00:28 +0800 Subject: [PATCH] 11 --- core/jx3jiaoyihang.py | 139 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 112 insertions(+), 27 deletions(-) diff --git a/core/jx3jiaoyihang.py b/core/jx3jiaoyihang.py index 4c98b4d..c735705 100644 --- a/core/jx3jiaoyihang.py +++ b/core/jx3jiaoyihang.py @@ -4,6 +4,8 @@ import json from astrbot.api import logger from urllib.parse import quote + +#接口函数的实现 def fetch_jx3_data(api_url=None, **params): # 函数实现 try: @@ -21,37 +23,116 @@ def fetch_jx3_data(api_url=None, **params): return None - -def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="守缺"): - - # URL 编码 - encoded_text = quote(inname) +def fetch_all_pages(base_url, initial_params, max_pages=None): + """ + 获取所有分页数据 - custom_url = f"https://node.jx3box.com/item_merged/name/{encoded_text}" + Args: + base_url: API基础URL + initial_params: 初始请求参数 + max_pages: 最大页数限制(可选) + + Returns: + list: 所有页面的数据列表 + """ + all_data = [] + current_page = 1 + + while True: + # 设置当前页码 + params = initial_params.copy() + params["page"] = str(current_page) + + # 请求数据 + data = fetch_jx3_data(base_url, **params) + + if not data or "list" not in data: + break + + # 添加当前页数据到总列表 + all_data.extend(data["list"]) + + # 检查是否还有更多页面 + total_pages = data.get("pages", 1) + if current_page >= total_pages: + break + + # 检查是否达到最大页数限制 + if max_pages and current_page >= max_pages: + break + + current_page += 1 + + return all_data + + +def merge_item_data_by_itemid(price_items, item_list): + """ + 根据ItemId和id字段将物品名称信息合并到价格数据中 + + Args: + price_data: 第一组数据,包含价格信息的字典 + item_list_data: 第二组数据,包含物品列表信息的字典 + + Returns: + dict: 合并后的数据,包含价格和名称信息 + """ + + + # 创建一个字典用于快速查找物品名称,使用id作为键 + item_name_map = {} + for item in item_list: + item_id = item.get("id") + item_name = item.get("Name") + if item_id and item_name: + item_name_map[item_id] = item_name + + # 创建一个新的结果字典 + merged_data = {"code": price_items.get("code", 0), "msg": price_items.get("msg", ""), "data": {}} + + # 遍历价格数据,添加名称信息 + for item_id, price_info in price_items.items(): + # 复制价格信息 + merged_item = price_info.copy() + + # 使用ItemId字段查找对应的名称 + item_id_to_match = merged_item.get("ItemId") + if item_id_to_match and item_id_to_match in item_name_map: + merged_item["Name"] = item_name_map[item_id_to_match] + else: + merged_item["Name"] = "未知物品" + + # 添加到结果中 + merged_data["data"][item_id] = merged_item + + return merged_data + + +#交易行数据查询函数 +def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="武技殊影图"): + + # URL 编码 + custom_url = f"https://node.jx3box.com/item_merged/name/{quote(inname)}" params = { - "client": "std", - "strictly": "0" , - "page": "1", - "pre": "50" + "client": "std", # 默认客户端 + "strict": "0" , # 默认模糊搜索 + "page": "1", # 默认第一页 + "per": "50" # 默认每页50条 } - data = fetch_jx3_data(custom_url,**params) + #请求接口获取物品ID + data_item = fetch_jx3_data(custom_url,**params) - # 创建一个空列表来存储结果 - filtered_items = [] + # 检查是否获取到数据 + if not data_item or "list" not in data_item: + logger.error(f"未找到物品: {inname}") + return "无交易行数据" - # 遍历列表中的每个项目 - for item in data.get("list", []): - # 提取id和Name字段 - filtered_item = { - "id": item.get("id"), - "Name": item.get("Name") - } - # 添加到结果列表 - filtered_items.append(filtered_item) + # 创建一个空列表来存储结果 + data_item_list = data_item.get("list", []) # 提取所有ID - ids = [item.get("id") for item in filtered_items] + ids = [item.get("id") for item in data_item_list] # 返回格式化结果 stringids = ",".join(ids) if ids else "" @@ -59,16 +140,20 @@ def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="守缺"): custom_url = f"https://next2.jx3box.com/api/item-price/list" params = { "server": "眉间雪", # 默认服务器 - "itemIds": "5_47129" # 默认当天 + "itemIds": "5_47129" # 默认物品ID } # 接受传入的参数 params["server"]=inserver params["itemIds"]=stringids - data = fetch_jx3_data(custom_url,**params) + #请求接口获取物品交易行数据 + data_price = fetch_jx3_data(custom_url,**params) - logger.error(f"搜索到物品: \n{filtered_items}\n{params}") + merged_data = merge_item_data_by_itemid(data_price.get("data", []), data_item_list) - return data.get("data", "无交易行数据") + # 打印日志 + logger.info(f"搜索到物品: \n{inname}\n{merged_data}\n{params}") + + return merged_data.get("data", "无交易行数据")