v2.0.1 修复搜索并发冲突与提交失败问题
- 搜索服务改用 namespace 隔离浏览器实例(参考 webtest-agent 方案), 解决定时任务与手动处理并发调用 agent-browser 互相踢掉导致搜索结果为0的问题 - agent-browser 调用加瞬时错误自动重试,使用 /tmp/xdg-rt 目录 - 步骤4 提示词放宽:品牌/系列相关页面也纳入提取,无精确型号时兜底选最相关内容 - 步骤4 大模型返回空时自动兜底,不再直接跳过导致会话卡死 - 会话收尾修复:失败/无数据时会话状态正确标记,并自动移除待处理产品 - 处理入口统一:定时任务/单产品/批量处理均改为 process_monitor 大模型流程(防重) - paramhub_client 增加登录态自动恢复:401 或连接失败时自动重新登录重试 - 全流程实测通过:deepseek-v4-flash-0731 → review_id 19ed2daaabfe
This commit is contained in:
+38
-39
@@ -18,18 +18,44 @@ class ParamHubClient:
|
||||
f'{self.base_url}/login',
|
||||
json={'password': self.password}
|
||||
)
|
||||
return response.json().get('success', False)
|
||||
if response.status_code == 200 and response.json().get('success'):
|
||||
return True
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"登录失败: {str(e)}")
|
||||
return False
|
||||
|
||||
def _ensure_login(self):
|
||||
"""确保已登录;session 失效时自动重新登录"""
|
||||
if not self.session:
|
||||
return self.login()
|
||||
return True
|
||||
|
||||
def _request(self, method, url, **kwargs):
|
||||
"""发送请求,401 时自动重新登录并重试一次"""
|
||||
self._ensure_login()
|
||||
try:
|
||||
response = self.session.request(method, url, **kwargs)
|
||||
# 401 未登录:重新登录后重试一次
|
||||
if response.status_code == 401:
|
||||
print(f"登录态失效,重新登录后重试: {method} {url}")
|
||||
if self.login():
|
||||
response = self.session.request(method, url, **kwargs)
|
||||
return response
|
||||
except Exception:
|
||||
# 连接失败时也尝试重新登录一次(服务可能重启过)
|
||||
print(f"请求失败,尝试重新登录: {method} {url}")
|
||||
try:
|
||||
if self.login():
|
||||
return self.session.request(method, url, **kwargs)
|
||||
except Exception:
|
||||
pass
|
||||
raise
|
||||
|
||||
def get_categories(self):
|
||||
"""获取所有分类"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
response = self.session.get(f'{self.base_url}/api/categories?all=1')
|
||||
response = self._request('GET', f'{self.base_url}/api/categories?all=1')
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
print(f"获取分类失败: {str(e)}")
|
||||
@@ -38,10 +64,7 @@ class ParamHubClient:
|
||||
def get_category_fields(self, category_id):
|
||||
"""获取分类的字段配置"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
response = self.session.get(f'{self.base_url}/api/categories/{category_id}')
|
||||
response = self._request('GET', f'{self.base_url}/api/categories/{category_id}')
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
print(f"获取分类字段失败: {str(e)}")
|
||||
@@ -60,9 +83,6 @@ class ParamHubClient:
|
||||
(success, review_id or error_message)
|
||||
"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
# 根据分类类型选择API端点
|
||||
if category_type == 'model':
|
||||
endpoint = f'{self.base_url}/api/models'
|
||||
@@ -78,7 +98,7 @@ class ParamHubClient:
|
||||
# 添加审核模式需要的字段
|
||||
data['status'] = 'pending'
|
||||
|
||||
response = self.session.post(endpoint, json=data)
|
||||
response = self._request('POST', endpoint, json=data)
|
||||
result = response.json()
|
||||
|
||||
if response.status_code == 200 or response.status_code == 201:
|
||||
@@ -91,10 +111,7 @@ class ParamHubClient:
|
||||
def get_reviews(self, status='pending'):
|
||||
"""获取待审核列表"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
response = self.session.get(f'{self.base_url}/api/reviews?status={status}')
|
||||
response = self._request('GET', f'{self.base_url}/api/reviews?status={status}')
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
print(f"获取审核列表失败: {str(e)}")
|
||||
@@ -103,10 +120,7 @@ class ParamHubClient:
|
||||
def get_review_count(self):
|
||||
"""获取待审核数量"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
response = self.session.get(f'{self.base_url}/api/reviews/count')
|
||||
response = self._request('GET', f'{self.base_url}/api/reviews/count')
|
||||
return response.json().get('count', 0)
|
||||
except Exception as e:
|
||||
print(f"获取审核数量失败: {str(e)}")
|
||||
@@ -115,14 +129,8 @@ class ParamHubClient:
|
||||
def send_notification(self, message):
|
||||
"""发送通知到后台管理"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
# 使用通知API发送通知
|
||||
response = self.session.post(
|
||||
f'{self.base_url}/api/notifications',
|
||||
json={'message': message}
|
||||
)
|
||||
response = self._request('POST', f'{self.base_url}/api/notifications', json={'message': message})
|
||||
return response.status_code == 200 or response.status_code == 201
|
||||
except Exception as e:
|
||||
print(f"发送通知失败: {str(e)}")
|
||||
@@ -143,14 +151,8 @@ class ParamHubClient:
|
||||
}
|
||||
"""
|
||||
try:
|
||||
if not self.session:
|
||||
self.login()
|
||||
|
||||
# 1. 检查已发布的产品(通过搜索API)
|
||||
response = self.session.get(
|
||||
f'{self.base_url}/api/search',
|
||||
params={'q': product_name}
|
||||
)
|
||||
response = self._request('GET', f'{self.base_url}/api/search', params={'q': product_name})
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
@@ -196,10 +198,7 @@ class ParamHubClient:
|
||||
|
||||
|
||||
# 2. 检查待审核列表
|
||||
response = self.session.get(
|
||||
f'{self.base_url}/api/reviews',
|
||||
params={'status': 'pending'}
|
||||
)
|
||||
response = self._request('GET', f'{self.base_url}/api/reviews', params={'status': 'pending'})
|
||||
|
||||
if response.status_code == 200:
|
||||
reviews = response.json()
|
||||
|
||||
Reference in New Issue
Block a user