From 495248bf5f161d83fb20246fdbf7c59d88959b27 Mon Sep 17 00:00:00 2001 From: Jowe <123822645+Selei1983@users.noreply.github.com> Date: Tue, 30 Dec 2025 22:31:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20v2.2.0=20=E6=99=BA=E8=83=BD=E6=96=B0?= =?UTF-8?q?=E9=97=BB=E6=9B=B4=E6=96=B0=E5=92=8C=E5=B8=83=E5=B1=80=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现每日首次访问自动更新新闻功能 - 每个网站获取3条一周内的新闻 - 新闻模块放置在左侧主栏 - 相似推荐移至右侧边栏 - 自动去重防止重复新闻 --- app.py | 64 +++++++++++++++++++++++++++++++++++++++ templates/detail_new.html | 42 ++++++++++--------------- 2 files changed, 80 insertions(+), 26 deletions(-) diff --git a/app.py b/app.py index b0f27d4..2160534 100644 --- a/app.py +++ b/app.py @@ -116,6 +116,70 @@ def create_app(config_name='default'): site.view_count += 1 db.session.commit() + # 智能新闻更新:检查今天是否已更新过新闻 + from datetime import date + today = date.today() + + # 检查该网站最新一条新闻的创建时间 + latest_news = News.query.filter_by( + site_id=site.id + ).order_by(News.created_at.desc()).first() + + # 判断是否需要更新新闻 + need_update = False + if not latest_news: + # 没有任何新闻,需要获取 + need_update = True + elif latest_news.created_at.date() < today: + # 最新新闻不是今天创建的,需要更新 + need_update = True + + # 如果需要更新,自动获取最新新闻 + if need_update: + api_key = app.config.get('BOCHA_API_KEY') + if api_key: + try: + # 创建新闻搜索器 + searcher = NewsSearcher(api_key) + + # 获取新闻(限制3条,一周内的) + news_items = searcher.search_site_news( + site_name=site.name, + site_url=site.url, + count=3, + freshness='oneWeek' + ) + + # 保存新闻到数据库 + 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='Search Result', + is_active=True + ) + db.session.add(news) + + db.session.commit() + + except Exception as e: + # 获取新闻失败,不影响页面显示 + print(f"自动获取新闻失败:{str(e)}") + db.session.rollback() + # 获取该网站的相关新闻(最多显示5条) news_list = News.query.filter_by( site_id=site.id, diff --git a/templates/detail_new.html b/templates/detail_new.html index 18b43a1..b6ac54b 100644 --- a/templates/detail_new.html +++ b/templates/detail_new.html @@ -669,7 +669,10 @@ {% endfor %} {% endif %} + + + - - - {% endblock %}