feat: v3.0.1 - 后台获取新闻功能优化
1. 新增后台管理获取新闻API (/api/admin/fetch-news/<code>) - 不需要验证码,仅管理员可用 - 用于后台手动触发新闻获取 2. 后台网站管理添加"手动获取新闻"按钮 - 在新闻关键词字段旁边显示 - 编辑模式可用 3. 取消前台detail页面手动获取新闻入口 - 用户不再需要手动刷新新闻 - 新闻由管理员在后台控制获取 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
71
app.py
71
app.py
@@ -382,6 +382,77 @@ def create_app(config_name='default'):
|
||||
db.session.rollback()
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
|
||||
# ========== 后台管理获取新闻API (v3.0.1新增) ==========
|
||||
@app.route('/api/admin/fetch-news/<code>', methods=['POST'])
|
||||
@login_required
|
||||
def admin_fetch_news(code):
|
||||
"""
|
||||
后台手动获取指定网站的新闻(不需要验证码,仅管理员可用)
|
||||
"""
|
||||
# 只允许管理员访问
|
||||
if not isinstance(current_user, AdminModel):
|
||||
return jsonify({'success': False, 'error': '无权访问'}), 403
|
||||
|
||||
try:
|
||||
# 查找网站
|
||||
site = Site.query.filter_by(code=code).first_or_404()
|
||||
|
||||
# 检查博查API配置
|
||||
api_key = app.config.get('BOCHA_API_KEY')
|
||||
if not api_key:
|
||||
return jsonify({'success': False, 'error': '博查API未配置'}), 500
|
||||
|
||||
# 创建新闻搜索器
|
||||
searcher = NewsSearcher(api_key)
|
||||
|
||||
# 获取新闻(限制5条,一周内的)
|
||||
news_items = searcher.search_site_news(
|
||||
site_name=site.name,
|
||||
site_url=site.url,
|
||||
news_keywords=site.news_keywords,
|
||||
count=5,
|
||||
freshness='oneWeek'
|
||||
)
|
||||
|
||||
# 保存新闻到数据库
|
||||
new_count = 0
|
||||
if news_items:
|
||||
for item in news_items:
|
||||
# 检查是否已存在(根据URL去重)
|
||||
existing = News.query.filter_by(
|
||||
site_id=site.id,
|
||||
url=item['url']
|
||||
).first()
|
||||
|
||||
if not existing:
|
||||
news = News(
|
||||
site_id=site.id,
|
||||
title=item['title'],
|
||||
content=item.get('summary') or item.get('snippet', ''),
|
||||
url=item['url'],
|
||||
source_name=item.get('site_name', ''),
|
||||
source_icon=item.get('site_icon', ''),
|
||||
published_at=item.get('published_at'),
|
||||
news_type=item.get('news_type', 'Industry News')
|
||||
)
|
||||
db.session.add(news)
|
||||
new_count += 1
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'new_count': new_count,
|
||||
'message': f'成功获取{new_count}条新资讯' if new_count > 0 else '暂无新资讯'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"后台获取新闻失败:{str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
db.session.rollback()
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
|
||||
|
||||
# ========== 社媒营销路由 (v2.5新增) ==========
|
||||
@app.route('/api/generate-social-share', methods=['POST'])
|
||||
|
||||
Reference in New Issue
Block a user