This commit is contained in:
2025-09-19 19:00:28 +08:00
parent 00b0d30b6c
commit f4b872fc0e
+112 -27
View File
@@ -4,6 +4,8 @@ import json
from astrbot.api import logger from astrbot.api import logger
from urllib.parse import quote from urllib.parse import quote
#接口函数的实现
def fetch_jx3_data(api_url=None, **params): def fetch_jx3_data(api_url=None, **params):
# 函数实现 # 函数实现
try: try:
@@ -21,37 +23,116 @@ def fetch_jx3_data(api_url=None, **params):
return None return None
def fetch_all_pages(base_url, initial_params, max_pages=None):
def fetch_jx3_jiaoyihang(inserver="眉间雪", inname="守缺"): """
获取所有分页数据
# URL 编码
encoded_text = quote(inname)
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 = { params = {
"client": "std", "client": "std", # 默认客户端
"strictly": "0" , "strict": "0" , # 默认模糊搜索
"page": "1", "page": "1", # 默认第一页
"pre": "50" "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", []): data_item_list = data_item.get("list", [])
# 提取id和Name字段
filtered_item = {
"id": item.get("id"),
"Name": item.get("Name")
}
# 添加到结果列表
filtered_items.append(filtered_item)
# 提取所有ID # 提取所有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 "" 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" custom_url = f"https://next2.jx3box.com/api/item-price/list"
params = { params = {
"server": "眉间雪", # 默认服务器 "server": "眉间雪", # 默认服务器
"itemIds": "5_47129" # 默认当天 "itemIds": "5_47129" # 默认物品ID
} }
# 接受传入的参数 # 接受传入的参数
params["server"]=inserver params["server"]=inserver
params["itemIds"]=stringids 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", "无交易行数据")