添加抓取失败网址记录功能
- 新增 failed_urls 数据库表存储失败URL - 抓取失败时自动记录URL、标题、错误信息 - 搜索页面显示失败URL列表 - 支持重试单个/全部失败URL - 支持删除和清空失败记录 - 显示重试次数和时间
This commit is contained in:
+85
-1
@@ -189,4 +189,88 @@ def internet_search_and_fetch():
|
||||
'keyword': keyword,
|
||||
'results': fetched_results,
|
||||
'count': len(fetched_results)
|
||||
})
|
||||
})
|
||||
|
||||
# ========== 失败URL管理 ==========
|
||||
|
||||
@bp.route('/failed-urls', methods=['GET'])
|
||||
def get_failed_urls():
|
||||
"""获取失败的URL列表"""
|
||||
limit = request.args.get('limit', 100, type=int)
|
||||
urls = db.get_failed_urls(limit=limit)
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'urls': urls,
|
||||
'count': len(urls)
|
||||
})
|
||||
|
||||
@bp.route('/failed-urls', methods=['POST'])
|
||||
def add_failed_url():
|
||||
"""记录失败的URL"""
|
||||
data = request.get_json()
|
||||
url = data.get('url')
|
||||
title = data.get('title')
|
||||
error_message = data.get('error_message')
|
||||
source = data.get('source', 'search')
|
||||
|
||||
if not url:
|
||||
return jsonify({'error': '请提供URL'}), 400
|
||||
|
||||
url_id = db.add_failed_url(url, title, error_message, source)
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'url_id': url_id,
|
||||
'message': '失败URL已记录'
|
||||
})
|
||||
|
||||
@bp.route('/failed-urls/count', methods=['GET'])
|
||||
def get_failed_url_count():
|
||||
"""获取失败URL数量"""
|
||||
count = db.get_failed_url_count()
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'count': count
|
||||
})
|
||||
|
||||
@bp.route('/failed-urls/<int:url_id>', methods=['DELETE'])
|
||||
def delete_failed_url(url_id):
|
||||
"""删除失败URL记录"""
|
||||
success = db.delete_failed_url(url_id)
|
||||
if success:
|
||||
return jsonify({'success': True, 'message': '记录已删除'})
|
||||
else:
|
||||
return jsonify({'error': '记录不存在'}), 404
|
||||
|
||||
@bp.route('/failed-urls/clear', methods=['POST'])
|
||||
def clear_failed_urls():
|
||||
"""清空所有失败URL记录"""
|
||||
count = db.clear_failed_urls()
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': f'已清空 {count} 条记录'
|
||||
})
|
||||
|
||||
@bp.route('/failed-urls/retry', methods=['POST'])
|
||||
def retry_failed_url():
|
||||
"""重试失败的URL"""
|
||||
data = request.get_json()
|
||||
url = data.get('url')
|
||||
|
||||
if not url:
|
||||
return jsonify({'error': '请提供URL'}), 400
|
||||
|
||||
# 尝试抓取
|
||||
result = search_service.fetch_url_content(url)
|
||||
|
||||
if result and result.get('content'):
|
||||
# 成功,标记为已处理
|
||||
db.mark_url_success(url)
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '抓取成功',
|
||||
'data': result
|
||||
})
|
||||
else:
|
||||
# 仍然失败
|
||||
db.add_failed_url(url, error_message='重试失败')
|
||||
return jsonify({'error': '抓取仍然失败'}), 500
|
||||
Reference in New Issue
Block a user