diff --git a/core/jx3_data.py b/core/jx3_data.py index c98c2dd..b1e0bf2 100644 --- a/core/jx3_data.py +++ b/core/jx3_data.py @@ -1,6 +1,7 @@ # core/jx3jiaoyihang.py from astrbot.api import logger from urllib.parse import quote +from datetime import datetime from .api_data import api_data_get, api_data_post from .sql_data import sql_data_searchdata,sql_data_select @@ -196,36 +197,82 @@ def jx3_data_wujia(inname="秃盒"): list: 合并后的数据,包含价格和名称信息 """ datas = { - "code": 0, # 默奇遇 - "msg": "未获取数据" # 默认服务器 + "code": 0, + "msg": "未获取数据", + "data": {} } #获取所查询物品的id和官方名称 idname = sql_data_select(inname) + datas["code"] = 1 + datas["msg"] = "获取外观名称ID完成" + datas["data"]["showName"] = idname.get("showName","未知物品") + datas["data"]["searchId"] = idname.get("searchId","未知ID") + datas["data"]["Name"] = inname + + #查询爱剑三获取外观数据 + aj3_url = "https://www.aijx3.cn/api2/aijx3-wj/goods/getGoodsDetail" + aj3_params = { + "goodsName":datas["data"]["showName"], + } - # 查询万宝楼公示数据 - custom_url = "https://www.aijx3.cn/api2/aijx3-wblwg/record/queryByCondition" - initial_params = { + dataaj3 = api_data_post(aj3_url, aj3_params,"data") + datas["data"]["goodsDesc"] = dataaj3.get("goodsDesc","无描述") + datas["data"]["publishTime"] = dataaj3.get("publishTime","无数据") + datas["data"]["priceNum"] = dataaj3.get("priceNum",0) + datas["data"]["imgs"] = dataaj3.get("imgs",[])[0] + datas["data"]["goodsId"] = dataaj3.get("goodsId","无数据") + datas["code"] = 2 + datas["msg"] = "获取外观数据完成" + + # 查询万宝楼数据 + wbl_url = "https://www.aijx3.cn/api2/aijx3-wblwg/record/queryByCondition" + wbl_params = { "tradeStatus": "3", "accoSeq": "", "orderMode": 1, # 按时间降序 "orderBy":"price_num", - "searchId":[idname["searchId"]], + "searchId":[idname['searchId']], "current":1, "size":10 } - datawblgs = api_data_post(custom_url, initial_params,"data") - - if not datawblgs: - datas["code"] = 0 - datas["msg"] = "数据为空" - return - - goodsId = datawblgs.get("records", "").get("goodsId", "") + #第一次查询万宝楼数据,获取公示数据 + datas["data"]["wblgs"] = [] + datawblgs = api_data_post(wbl_url, wbl_params,"data") + #处理万宝楼公示数据 + for record in datawblgs.get("records",[]): + # 转换时间戳为可读格式 + dt = datetime.fromtimestamp(record.get("replyTime",0)/1000) + record_info = { + "priceNum": record.get("priceNum",0), + "belongQf2": record.get("belongQf2","无数据"), + "replyTime": dt.strftime("%Y-%m-%d %H:%M:%S"), + "discountRate": record.get("discountRate",0.0), + } + datas["data"]["wblgs"].append(record_info) - datas["data"] = goodsId - datas["code"] = 200 - datas["msg"] = "处理完成" + #数据更新 + datas["code"] = 3 + datas["msg"] = "获取万宝楼公示数据完成" + #第二次查询万宝楼数据,获取在售数据 + wbl_params["tradeStatus"] = "5" + datas["data"]["wblzs"] = [] + datawblzs = api_data_post(wbl_url, wbl_params,"data") + #处理万宝楼在售数据 + for record in datawblzs.get("records",[]): + # 转换时间戳为可读格式 + dt = datetime.fromtimestamp(record.get("replyTime",0)/1000) + record_info = { + "priceNum": record.get("priceNum",0), + "belongQf2": record.get("belongQf2","无数据"), + "replyTime": dt.strftime("%Y-%m-%d %H:%M:%S"), + "discountRate": record.get("discountRate",0.0), + } + datas["data"]["wblzs"].append(record_info) + + #数据更新 + datas["code"] = 4 + datas["msg"] = "获取万宝楼在售数据完成" return datas \ No newline at end of file diff --git a/core/sql_data.py b/core/sql_data.py index 1e53437..694a298 100644 --- a/core/sql_data.py +++ b/core/sql_data.py @@ -135,4 +135,4 @@ def sql_data_select(search_string): finally: connection.close() - return results \ No newline at end of file + return results[0] \ No newline at end of file diff --git a/main.py b/main.py index 50096b8..e8bdd08 100644 --- a/main.py +++ b/main.py @@ -370,9 +370,19 @@ class Jx3ApiPlugin(Star): if len(parts) > 1: inname = parts[1] # 外观名称 - try: - test = jx3_data_wujia(inname) - yield event.plain_result(f"{test}") + try: + # 加载模板 + try: + template_content = load_template("wujia.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + yield event.plain_result("系统错误:模板文件不存在") + return + + render_data = jx3_data_wujia(inname) + + url = await self.html_render(template_content, render_data, options={}) + yield event.image_result(url) except Exception as e: logger.error(f"处理数据时出错: {e}") diff --git a/templates/wujia.html b/templates/wujia.html new file mode 100644 index 0000000..a04adbc --- /dev/null +++ b/templates/wujia.html @@ -0,0 +1,220 @@ + + + + + + {{ data.showName }} - 剑网3万宝楼 + + + + + +
+ +
+
+

商品基本信息

+
+
+
+ +
+ {{ data.showName }} +
+ +
+

{{ data.showName }}({{data.Name}})

+

{{ data.goodsDesc }}

+ +
+
+ 发布时间: {{ data.publishTime.split('T')[0] if data.publishTime else '未知' }} +
+
+ 参考价格: {{ data.priceNum }} 元 +
+
+
+
+
+
+ + +
+ +
+
+

万宝楼公示

+
+
+
+ + + + + + + + + + + {% for item in data.wblgs %} + + + + + + + {% endfor %} + +
上架时间服务器价格折扣率
{{ item.replyTime }}{{ item.belongQf2 }}{{ item.priceNum }}元 + + {{ item.discountRate }}% + +
+
+
+
+ + +
+
+

万宝楼在售

+
+
+
+ + + + + + + + + + + {% for item in data.wblzs %} + + + + + + + {% endfor %} + +
上架时间服务器价格折扣率
{{ item.replyTime }}{{ item.belongQf2 }}{{ item.priceNum }}元 + + {{ item.discountRate }}% + +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/templates/wujiatest.html b/templates/wujiatest.html new file mode 100644 index 0000000..9652cd7 --- /dev/null +++ b/templates/wujiatest.html @@ -0,0 +1,222 @@ + + + + + + {{ data.showName }} - 剑网3万宝楼 + + + + + +
+
+
+
+ +
+
+ + + {{ msg }} + + + 数据更新时间: {{ now.strftime('%Y-%m-%d %H:%M:%S') if now else '未知' }} + +
+
+
+
+ +
+ +
+
+

商品基本信息

+
+
+
+
+ {{ data.showName }} +
+
+

{{ data.showName }}

+

商品ID: {{ data.goodsId }} | 搜索ID: {{ data.searchId }}

+

{{ data.goodsDesc }}

+ +
+
+ 发布时间: {{ data.publishTime.split('T')[0] if data.publishTime else '未知' }} +
+
+ 参考价格: {{ data.priceNum }} 元 +
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+
当前在售摘要
+ {% set min_price = data.wblgs|min(attribute='priceNum') %} + {% set max_price = data.wblgs|max(attribute='priceNum') %} + {% set avg_price = (data.wblgs|sum(attribute='priceNum') / data.wblgs|length)|round(1) %} + +
+ 在售商品数量: + {{ data.wblgs|length }}件 +
+
+ 最低价格: + {{ min_price.priceNum if min_price else 0 }}元 ({{ min_price.belongQf2 if min_price else '未知' }}) +
+
+ 最高价格: + {{ max_price.priceNum if max_price else 0 }}元 ({{ max_price.belongQf2 if max_price else '未知' }}) +
+
+ 平均价格: + {{ avg_price }}元 +
+
+
+
历史在售摘要
+ {% set min_price_hist = data.wblzs|min(attribute='priceNum') %} + {% set max_price_hist = data.wblzs|max(attribute='priceNum') %} + {% set avg_price_hist = (data.wblzs|sum(attribute='priceNum') / data.wblzs|length)|round(1) %} + +
+ 历史记录数量: + {{ data.wblzs|length }}条 +
+
+ 最低价格: + {{ min_price_hist.priceNum if min_price_hist else 0 }}元 +
+
+ 最高价格: + {{ max_price_hist.priceNum if max_price_hist else 0 }}元 +
+
+ 平均价格: + {{ avg_price_hist }}元 +
+
+
+
+
+ + +
+
+

当前在售商品 ({{ data.wblgs|length }}件)

+
+ {% set min_price = data.wblgs|min(attribute='priceNum') %} + {% set max_price = data.wblgs|max(attribute='priceNum') %} + 最低: {{ min_price.priceNum if min_price else 0 }}元 + 最高: {{ max_price.priceNum if max_price else 0 }}元 +
+
+
+
+ + + + + + + + + + + + {% for item in data.wblgs %} + + + + + + + + {% endfor %} + +
价格服务器折扣率更新时间操作
{{ item.priceNum }}元{{ item.belongQf2 }} + + {{ item.discountRate }}% + + {{ item.replyTime }}
+
+
+
+ + +
+
+

历史在售记录 ({{ data.wblzs|length }}条)

+
+ {% set min_price_hist = data.wblzs|min(attribute='priceNum') %} + {% set max_price_hist = data.wblzs|max(attribute='priceNum') %} + 最低: {{ min_price_hist.priceNum if min_price_hist else 0 }}元 + 最高: {{ max_price_hist.priceNum if max_price_hist else 0 }}元 +
+
+
+
+ + + + + + + + + + + {% for item in data.wblzs %} + + + + + + + {% endfor %} + +
价格服务器折扣率更新时间
{{ item.priceNum }}元{{ item.belongQf2 }} + + {{ item.discountRate }}% + + {{ item.replyTime }}
+
+
+
+
+ + + + + + \ No newline at end of file