添加抓取失败网址记录功能

- 新增 failed_urls 数据库表存储失败URL
- 抓取失败时自动记录URL、标题、错误信息
- 搜索页面显示失败URL列表
- 支持重试单个/全部失败URL
- 支持删除和清空失败记录
- 显示重试次数和时间
This commit is contained in:
2026-07-13 17:28:44 +08:00
parent dcd13dec4f
commit 898c2407e9
5 changed files with 418 additions and 1 deletions
+85 -1
View File
@@ -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