This commit is contained in:
qsc
2025-09-26 00:40:06 +08:00
parent 8f0dfee13d
commit cd49f2b0d0
2 changed files with 190 additions and 187 deletions
+95 -61
View File
@@ -185,7 +185,6 @@ def jx3_data_jiaoyihang(inserver="眉间雪", inname="武技殊影图"):
return result_items return result_items
#物价查询
def jx3_data_wujia(inname="秃盒"): def jx3_data_wujia(inname="秃盒"):
""" """
获取剑三外观物品价格数据 获取剑三外观物品价格数据
@@ -194,89 +193,124 @@ def jx3_data_wujia(inname="秃盒"):
inname: 物品名称 inname: 物品名称
Returns: Returns:
list: 合并后的数据,包含价格和名称信息 dict: 包含价格和名称信息的字典
""" """
# 初始化返回数据结构
datas = { datas = {
"code": 0, "code": 0,
"msg": "未获取数据", "msg": "未获取数据",
"data": {} "data": {}
} }
#获取所查询物品的id和官方名称
try:
# 1. 获取物品ID和名称
idname = sql_data_select(inname) idname = sql_data_select(inname)
if not idname: if not idname:
datas["code"] = 201 datas.update({"code": 201, "msg": "未找到该外观信息"})
datas["msg"] = "未找到该外观信息" return datas
return
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" datas.update({
aj3_params = { "code": 1,
"goodsName":datas["data"]["showName"], "msg": "获取外观名称ID完成",
"data": {
"showName": idname.get("showName", "未知物品"),
"searchId": idname.get("searchId", "未知ID"),
"Name": inname
} }
})
# 2. 查询爱剑三获取外观数据
aj3_data = get_aj3_goods_data(datas["data"]["showName"])
if aj3_data:
datas["data"].update(aj3_data)
datas.update({"code": 2, "msg": "获取外观数据完成"})
# 3. 查询万宝楼数据(公示和在售)
wbl_data = get_wbl_data(idname['searchId'])
if wbl_data:
datas["data"].update(wbl_data)
datas.update({"code": 200, "msg": "获取万宝楼数据完成"})
except Exception as e:
logger.error(f"物价查询出错: {e}")
datas.update({"code": 500, "msg": f"查询过程中出错: {e}"})
return datas
def get_aj3_goods_data(goods_name):
"""获取爱剑三商品数据"""
try:
aj3_url = "https://www.aijx3.cn/api2/aijx3-wj/goods/getGoodsDetail"
aj3_params = {"goodsName": goods_name}
dataaj3 = api_data_post(aj3_url, aj3_params, "data") dataaj3 = api_data_post(aj3_url, aj3_params, "data")
datas["data"]["goodsDesc"] = dataaj3.get("goodsDesc","无描述") if not dataaj3:
datas["data"]["publishTime"] = dataaj3.get("publishTime","无数据") return None
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"] = "获取外观数据完成"
# 查询万宝楼数据 imgs = dataaj3.get("imgs", [])
return {
"goodsDesc": dataaj3.get("goodsDesc", "无描述"),
"publishTime": dataaj3.get("publishTime", "无数据"),
"priceNum": dataaj3.get("priceNum", 0),
"imgs": imgs[0] if imgs else "",
"goodsId": dataaj3.get("goodsId", "无数据")
}
except Exception as e:
logger.error(f"获取爱剑三数据出错: {e}")
return None
def get_wbl_data(search_id):
"""获取万宝楼数据(公示和在售)"""
try:
wbl_url = "https://www.aijx3.cn/api2/aijx3-wblwg/record/queryByCondition" wbl_url = "https://www.aijx3.cn/api2/aijx3-wblwg/record/queryByCondition"
wbl_params = { base_params = {
"tradeStatus": "3",
"accoSeq": "", "accoSeq": "",
"orderMode": 1, # 按时间降序 "orderMode": 1,
"orderBy": "price_num", "orderBy": "price_num",
"searchId":[idname['searchId']], "searchId": [search_id],
"current": 1, "current": 1,
"size": 10 "size": 10
} }
#第一次查询万宝楼数据,获取公示数据 # 获取公示数据
datas["data"]["wblgs"] = [] gs_params = base_params.copy()
datawblgs = api_data_post(wbl_url, wbl_params,"data") gs_params["tradeStatus"] = "3"
#处理万宝楼公示数据 datawblgs = api_data_post(wbl_url, gs_params, "data")
for record in datawblgs.get("records",[]):
# 获取在售数据
zs_params = base_params.copy()
zs_params["tradeStatus"] = "5"
datawblzs = api_data_post(wbl_url, zs_params, "data")
return {
"wblgs": process_wbl_records(datawblgs.get("records", [])),
"wblzs": process_wbl_records(datawblzs.get("records", []))
}
except Exception as e:
logger.error(f"获取万宝楼数据出错: {e}")
return None
def process_wbl_records(records):
"""处理万宝楼记录数据"""
processed = []
for record in records:
try:
# 转换时间戳为可读格式 # 转换时间戳为可读格式
dt = datetime.fromtimestamp(record.get("replyTime",0)/1000) timestamp = record.get("replyTime", 0)
record_info = { dt = datetime.fromtimestamp(timestamp / 1000) if timestamp else datetime.now()
processed.append({
"priceNum": record.get("priceNum", 0), "priceNum": record.get("priceNum", 0),
"belongQf2": record.get("belongQf2", "无数据"), "belongQf2": record.get("belongQf2", "无数据"),
"replyTime": dt.strftime("%Y-%m-%d %H:%M:%S"), "replyTime": dt.strftime("%Y-%m-%d %H:%M:%S"),
"discountRate": record.get("discountRate", 0.0), "discountRate": record.get("discountRate", 0.0),
} })
datas["data"]["wblgs"].append(record_info) except Exception as e:
logger.error(f"处理万宝楼记录出错: {e}")
continue
#数据更新 return processed
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"] = 200
datas["msg"] = "获取万宝楼在售数据完成"
return datas
+47 -78
View File
@@ -4,6 +4,17 @@ from astrbot.api import logger
from .api_data import api_data_get, api_data_post from .api_data import api_data_get, api_data_post
#连接数据库配置
db_config = {
'host': '154.201.70.116',
'port': 3306,
'user': 'asrtbot',
'password': 'qsc123456',
'database': 'asrtbot',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor #返回字典格式数据
}
# 提取所有 dataModels 中的数据 # 提取所有 dataModels 中的数据
def extract_data_models(source_data): def extract_data_models(source_data):
extracted_data = [] extracted_data = []
@@ -12,127 +23,85 @@ def extract_data_models(source_data):
extracted_data.extend(category["dataModels"]) extracted_data.extend(category["dataModels"])
return extracted_data return extracted_data
# 获取并存储搜索数据
def sql_data_searchdata(): def sql_data_searchdata():
# 接口配置
# 接口URL
custom_url = "https://www.aijx3.cn/api2/aijx3-wblwg/basedata/getSearchData" custom_url = "https://www.aijx3.cn/api2/aijx3-wblwg/basedata/getSearchData"
# 接口参数 params = {}
params = {
}
# 连接数据库
connection = pymysql.connect(
host='45.205.31.132', # 数据库主机地址
port=5211, # 数据库端口
user='asrtbot', # 数据库用户名
password='qsc123456', # 数据库密码
database='asrtbot', # 数据库名
charset='utf8mb4' # 字符编码
)
# 获取数据
try: try:
# 获取数据
source_data = api_data_post(custom_url, params, "data") source_data = api_data_post(custom_url, params, "data")
if not source_data: if not source_data:
test = "获取数据失败或数据为空" return "获取数据失败或数据为空"
return
except Exception as e:
test = f"获取数据时出错: {e}"
# 处理数据 # 处理数据
extracted_data = extract_data_models(source_data) extracted_data = extract_data_models(source_data)
if not source_data: if not extracted_data: # 修正:应该是extracted_data而不是source_data
test = "未提取到数据" return "未提取到数据"
return
# 插入数据到数据 # 连接数据库并插入数据
try: with pymysql.connect(**db_config) as connection:
with connection.cursor() as cursor: with connection.cursor() as cursor:
# 清空表数据 # 清空表数据
cursor.execute("TRUNCATE TABLE searchdata") cursor.execute("TRUNCATE TABLE searchdata")
# 准备 SQL 插入语句 # 准备SQL和批量数据
sql = """ sql = """
INSERT INTO searchdata INSERT INTO searchdata
(typeName, name, showName, picUrl, searchId, searchDescType) (typeName, name, showName, picUrl, searchId, searchDescType)
VALUES (%s, %s, %s, %s, %s, %s) VALUES (%s, %s, %s, %s, %s, %s)
""" """
# 准备批量数据 # 使用列表推导式简化数据准备
values_list = [] values_list = [
for item in extracted_data: (
values_list.append((
item['typeName'], item['typeName'],
item['name'], item['name'],
item['showName'], item['showName'],
item['picUrl'], item['picUrl'],
item['searchId'], item['searchId'],
item['searchDescType'] item['searchDescType']
)) )
for item in extracted_data
]
# 批量插入 # 批量插入
cursor.executemany(sql, values_list) cursor.executemany(sql, values_list)
connection.commit() connection.commit()
test = f"成功批量插入 {len(extracted_data)} 条数据!"
return f"成功批量插入 {len(extracted_data)} 条数据!"
except pymysql.Error as e:
return f"数据库操作失败: {e}"
except Exception as e: except Exception as e:
test = f"插入数据时出错: {e}" return f"操作失败: {e}"
connection.rollback()
finally:
connection.close()
return test
# 根据搜索字符串查询匹配的数据
def sql_data_select(search_string): def sql_data_select(search_string):
"""
根据搜索字符串查询匹配的数据
# 连接数据库 Args:
connection = pymysql.connect( search_string: 搜索字符串
host='45.205.31.132', # 数据库主机地址
port=5211, # 数据库端口
user='asrtbot', # 数据库用户名
password='qsc123456', # 数据库密码
database='asrtbot', # 数据库名
charset='utf8mb4' # 字符编码
)
results = [] Returns:
匹配的第一条记录,如果没有匹配则返回None
# 插入数据到数据库 """
try: try:
with pymysql.connect(**db_config) as connection:
with connection.cursor() as cursor: with connection.cursor() as cursor:
# 准备 SQL 插入语句
sql = """ sql = """
SELECT searchId, showName SELECT searchId, showName, name
FROM searchdata FROM searchdata
WHERE name = %s OR showName = %s WHERE name = %s OR showName = %s
LIMIT 1
""" """
params = (search_string, search_string)
# 添加通配符 % 到搜索字符串的两端 cursor.execute(sql, params)
#search_pattern = f"%{search_string}%" return cursor.fetchone()
# 执行查询
cursor.execute(sql, (search_string, search_string))
# 获取所有匹配的结果
rows = cursor.fetchall()
# 将结果转换为字典列表
for row in rows:
results.append({
"searchId": row[0],
"showName": row[1]
})
except Exception as e: except Exception as e:
logger.error(f"查询数据时出错: {e}") logger.error(f"查询数据时出错: {e}")
return None
finally:
connection.close()
return results[0]