11
This commit is contained in:
+112
-27
@@ -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", "无交易行数据")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user