fix: StorageManager 添加推送记录代理方法 + S3 切换至 virtual-hosted style 提升兼容性

This commit is contained in:
sansan 2025-12-17 19:26:34 +08:00
parent 73364a3af0
commit 6dd29eaee3
6 changed files with 66 additions and 133 deletions

View File

@ -10,8 +10,7 @@
<a href="https://trendshift.io/repositories/14726" target="_blank"><img src="https://trendshift.io/api/badge/repositories/14726" alt="sansan0%2FTrendRadar | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<a href="https://share.302.ai/mEOUzG" target="_blank" title="One-stop AI Models & APIs Platform"><img src="_image/302ai.png" alt="302.AI logo" height="50"/></a>
<a href="https://shandianshuo.cn" target="_blank" title="AI Voice Input, 4x Faster Than Typing ⚡"><img src="_image/shandianshuo.png" alt="FlashSpeak logo" height="51"/></a>
<a href="https://shandianshuo.cn" target="_blank" title="AI Voice Input, 4x Faster Than Typing ⚡"><img src="_image/shandianshuo.png" alt="FlashSpeak logo" height="55"/></a>
[![GitHub Stars](https://img.shields.io/github/stars/sansan0/TrendRadar?style=flat-square&logo=github&color=yellow)](https://github.com/sansan0/TrendRadar/stargazers)
[![GitHub Forks](https://img.shields.io/github/forks/sansan0/TrendRadar?style=flat-square&logo=github&color=blue)](https://github.com/sansan0/TrendRadar/network/members)
@ -365,14 +364,10 @@ Transform from "algorithm recommendation captivity" to "actively getting the inf
- **Major Version Upgrade**: Upgrading from v1.x to v2.y, recommend deleting existing fork and re-forking to save effort and avoid config conflicts
### 2025/12/13 - v4.0.0
### 2025/12/17 - v4.0.1
**🎉 Major Update: Comprehensive Refactoring of Storage and Core Architecture**
- **Multi-Storage Backend Support**: Introduced a brand new storage module supporting local SQLite and remote cloud storage (S3-compatible protocols, Cloudflare R2 recommended for free tier), adaptable to GitHub Actions, Docker, and local environments.
- **Database Structure Optimization**: Refactored SQLite database table structures to improve data efficiency and query performance.
- **Enhanced Features**: Implemented date format standardization, data retention policies, timezone configuration support, and optimized time display. Fixed remote storage data persistence issues to ensure accurate data merging.
- **Cleanup and Compatibility**: Removed most legacy compatibility code and unified data storage and retrieval methods.
- StorageManager adds push record proxy methods
- S3 client switches to virtual-hosted style for better compatibility (supports Tencent Cloud COS and more services)
### 2025/12/13 - mcp-v1.1.0
@ -388,6 +383,16 @@ Transform from "algorithm recommendation captivity" to "actively getting the inf
<summary>👉 Click to expand: <strong>Historical Updates</strong></summary>
### 2025/12/13 - v4.0.0
**🎉 Major Update: Comprehensive Refactoring of Storage and Core Architecture**
- **Multi-Storage Backend Support**: Introduced a brand new storage module supporting local SQLite and remote cloud storage (S3-compatible protocols, Cloudflare R2 recommended for free tier), adaptable to GitHub Actions, Docker, and local environments.
- **Database Structure Optimization**: Refactored SQLite database table structures to improve data efficiency and query performance.
- **Enhanced Features**: Implemented date format standardization, data retention policies, timezone configuration support, and optimized time display. Fixed remote storage data persistence issues to ensure accurate data merging.
- **Cleanup and Compatibility**: Removed most legacy compatibility code and unified data storage and retrieval methods.
### 2025/12/03 - v3.5.0
**🎉 Core Feature Enhancements**
@ -879,16 +884,6 @@ In GitHub Actions environment, data is stored in **Remote Cloud Storage** (suppo
For long-term stable operation, we recommend [Docker Deployment](#6-docker-deployment), with data stored locally and no check-in required—though it does require purchasing a cloud server.
<br>
> 🎉 **Now Supported: Multi-Cloud Storage Options**
>
> This project now supports S3-compatible protocols. You can choose:
> - **Cloudflare R2** (Recommended, generous free tier)
> - Other S3-compatible storage services
>
> Simply configure the corresponding `S3_ENDPOINT_URL`, `S3_BUCKET_NAME` and other environment variables to switch.
---
1. **Fork this project** to your GitHub account
@ -3196,7 +3191,7 @@ Cherry Studio provides GUI config interface, 5-minute quick deployment, complex
> 💡 **Tip**: Actually not recommended to ask multiple questions at once. If your chosen AI model cannot even sequentially call as shown below, suggest switching models.
<img src="/_image/ai3.png" alt="MCP usage effect" width="600">
<img src="/_image/ai2.png" alt="MCP usage effect" width="600">
</details>
@ -3522,51 +3517,6 @@ Any client supporting Model Context Protocol can connect to TrendRadar:
## 🪄 Sponsors
### 🤖 302.AI - Enterprise AI Resource Platform
> **302.AI** is a pay-as-you-go enterprise-level AI resource platform
> Providing the latest and most comprehensive **AI models** and **APIs** on the market, plus various ready-to-use online AI applications
<div align="center">
[![Register & Claim](https://img.shields.io/badge/Register_302.AI-Claim_$1_Credit-8B5CF6?style=for-the-badge&logo=openai&logoColor=white)](https://share.302.ai/mEOUzG)
<a href="https://share.302.ai/mEOUzG" target="_blank">
<img src="_image/banner-302ai-en.jpg" alt="302.AI" width="700"/>
</a>
</div>
<details id="sponsor-tutorial">
<summary><b>👉 Click to expand: 302.AI Usage Tutorial</b></summary>
### Step 1: Get API Key
1. After registration, go to [Management Dashboard](https://302.ai/dashboard/overview) at top right
2. Click [API Keys](https://302.ai/apis/list) on the left
3. Find default API KEY at page bottom, **click eye icon to view**, then copy
(⚠️ Note: Don't click the copy button on the far right)
### Step 2: Configure in Cherry Studio
1. Open Cherry Studio, go to settings
2. Select **"302.AI"** as model provider
3. Paste the API Key you just copied
4. Click **Manage**, now you can use all supported AI models
**Tip:** Cherry Studio has natively integrated 302.AI, you can see the complete model list after configuration.
**Q: How long does $1 free credit last?**
A: Depends on usage frequency and model selection, can run multiple test sessions.
**Q: What after free credit runs out?**
A: You can top up as needed, pay-as-you-go. Major AI model prices are now relatively affordable.
</details>
> Tracking so many trending topics daily, writing reports, replying messages making your wrists tired?
>
> Try「FlashSpeak」AI Voice Input - Speak instead of type, 4x faster ⚡

View File

@ -10,8 +10,7 @@
<a href="https://trendshift.io/repositories/14726" target="_blank"><img src="https://trendshift.io/api/badge/repositories/14726" alt="sansan0%2FTrendRadar | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<a href="https://share.302.ai/mEOUzG" target="_blank" title="一站式 AI 模型和 API 平台"><img src="_image/302ai.png" alt="302.AI logo" height="50"/></a>
<a href="https://shandianshuo.cn" target="_blank" title="AI 语音输入,比打字快 4 倍 ⚡"><img src="_image/shandianshuo.png" alt="闪电说 logo" height="51"/></a>
<a href="https://shandianshuo.cn" target="_blank" title="AI 语音输入,比打字快 4 倍 ⚡"><img src="_image/shandianshuo.png" alt="闪电说 logo" height="55"/></a>
[![GitHub Stars](https://img.shields.io/github/stars/sansan0/TrendRadar?style=flat-square&logo=github&color=yellow)](https://github.com/sansan0/TrendRadar/stargazers)
[![GitHub Forks](https://img.shields.io/github/forks/sansan0/TrendRadar?style=flat-square&logo=github&color=blue)](https://github.com/sansan0/TrendRadar/network/members)
@ -411,15 +410,11 @@ GitHub 一键 Fork 即可使用,无需编程基础。
- **大版本升级**:从 v1.x 升级到 v2.y建议删除现有 fork 后重新 fork这样更省力且避免配置冲突
### 2025/12/13 - v4.0.0
**🎉 重大更新:全面重构存储和核心架构**
### 2025/12/17 - v4.0.1
- **多存储后端支持**:引入全新的存储模块,支持本地 SQLite 和远程云存储S3 兼容协议,推荐免费的 Cloudflare R2适应 GitHub Actions、Docker 和本地环境。
- **数据库结构优化**:重构 SQLite 数据库表结构,提升数据效率和查询能力。
- **核心代码模块化**:将主程序逻辑拆分为 trendradar 包的多个模块,显著提升代码可维护性。
- **增强功能**:实现日期格式标准化、数据保留策略、时区配置支持、时间显示优化,并修复远程存储数据持久化问题,确保数据合并的准确性。
- **清理和兼容**:移除了大部分历史兼容代码,统一了数据存储和读取方式。
- StorageManager 添加推送记录代理方法
- S3 客户端切换至 virtual-hosted style 以提升兼容性(支持腾讯云 COS 等更多服务)
### 2025/12/13 - mcp-v1.1.0
@ -436,6 +431,17 @@ GitHub 一键 Fork 即可使用,无需编程基础。
<summary>👉 点击展开:<strong>历史更新</strong></summary>
### 2025/12/13 - v4.0.0
**🎉 重大更新:全面重构存储和核心架构**
- **多存储后端支持**:引入全新的存储模块,支持本地 SQLite 和远程云存储S3 兼容协议,推荐免费的 Cloudflare R2适应 GitHub Actions、Docker 和本地环境。
- **数据库结构优化**:重构 SQLite 数据库表结构,提升数据效率和查询能力。
- **核心代码模块化**:将主程序逻辑拆分为 trendradar 包的多个模块,显著提升代码可维护性。
- **增强功能**:实现日期格式标准化、数据保留策略、时区配置支持、时间显示优化,并修复远程存储数据持久化问题,确保数据合并的准确性。
- **清理和兼容**:移除了大部分历史兼容代码,统一了数据存储和读取方式。
### 2025/12/03 - v3.5.0
**🎉 核心功能增强**
@ -917,16 +923,6 @@ GitHub Actions 环境下,数据存储在 **远程云存储**(支持 S3 兼
如需长期稳定运行,建议使用 [Docker 部署](#6-docker-部署),数据存储在本地,无需签到,不过需要额外付费购买云服务器。
<br>
> 🎉 **已支持:多云存储方案**
>
> 本项目现已支持 S3 兼容协议,你可以选择:
> - **Cloudflare R2**(推荐,免费额度充足)
> - 其他 S3 兼容存储服务
>
> 只需配置对应的 `S3_ENDPOINT_URL`、`S3_BUCKET_NAME` 等环境变量即可切换。
---
1. **Fork 本项目**到你的 GitHub 账户
@ -3135,7 +3131,7 @@ Cherry Studio 提供 GUI 配置界面5 分钟快速部署,复杂的部分
> 💡 **提示**:实际不建议一次性问多个问题。如果你选择的 AI 模型连下图的按顺序调用都无法做到,建议换一个。
<img src="/_image/ai3.png" alt="mcp 使用效果图" width="600">
<img src="/_image/ai2.png" alt="mcp 使用效果图" width="600">
</details>
@ -3541,52 +3537,6 @@ MCP Inspector 是官方调试工具,用于测试 MCP 连接:
## 🪄 赞助商
> **302.AI** 是按用量付费的企业级 AI 资源平台
> 提供市场上最新、最全面的 **AI 模型**和 **API**,以及多种开箱即用的在线 AI 应用
<div align="center">
[![注册领取](https://img.shields.io/badge/注册_302.AI-领取_1_美元免费测试额度-8B5CF6?style=for-the-badge&logo=openai&logoColor=white)](https://share.302.ai/mEOUzG)
<a href="https://share.302.ai/mEOUzG" target="_blank">
<img src="_image/banner-302ai-zh.jpg" alt="302.AI" width="700"/>
</a>
</div>
<details id="sponsor-tutorial">
<summary>👉 点击展开:<b>302.AI 使用教程</b></summary>
<br>
> 领取的 1 美元可用于调用各种 AI 大模型(如 Claude、GPT 等)
> 本项目 AI 分析功能需配置大模型使用,配置教程详见 [AI 智能分析](#-ai-智能分析)
### 第 1 步:获取 API Key
1. 注册后,进入右上角 [管理后台](https://302.ai/dashboard/overview)
2. 点击左侧 [API Keys](https://302.ai/apis/list)
3. 在页面下方找到默认 API KEY**点击眼睛图标查看**,然后复制
(⚠️ 注意:不是点最右侧的复制按钮)
### 第 2 步:在 Cherry Studio 中配置
1. 打开 Cherry Studio进入设置
2. 模型提供商选择 **"302.AI"**
3. 粘贴刚才复制的 API Key
4. 点击**管理**,现在可以使用所有支持的 AI 模型了
**提示:** Cherry Studio 已原生集成 302.AI配置后即可看到完整模型列表。
**Q: 1 美元免费额度能用多久?**
A: 取决于使用频率和模型选择,可以进行多次测试体验。
**Q: 免费额度用完后怎么办?**
A: 可以按需充值,按量付费。目前大厂模型价格已相对亲民。
</details>
> 每天追踪这么多热点,写报告、回复消息是否让手腕疲惫?
> 试试「闪电说」AI 语音输入法 —— 用说的,比打字快 4 倍 ⚡ 。从看热点到输出内容,让效率翻倍 👇

View File

@ -9,5 +9,5 @@ TrendRadar - 热点新闻聚合与分析工具
from trendradar.context import AppContext
__version__ = "4.0.0"
__version__ = "4.0.1"
__all__ = ["AppContext", "__version__"]

View File

@ -264,6 +264,33 @@ class StorageManager:
"""是否支持 TXT 快照"""
return self.get_backend().supports_txt
# === 推送记录相关方法 ===
def has_pushed_today(self, date: Optional[str] = None) -> bool:
"""
检查指定日期是否已推送过
Args:
date: 日期字符串YYYY-MM-DD默认为今天
Returns:
是否已推送
"""
return self.get_backend().has_pushed_today(date)
def record_push(self, report_type: str, date: Optional[str] = None) -> bool:
"""
记录推送
Args:
report_type: 报告类型
date: 日期字符串YYYY-MM-DD默认为今天
Returns:
是否记录成功
"""
return self.get_backend().record_push(report_type, date)
def get_storage_manager(
backend_type: str = "auto",

View File

@ -21,11 +21,13 @@ from typing import Dict, List, Optional, Any
try:
import boto3
from botocore.config import Config as BotoConfig
from botocore.exceptions import ClientError
HAS_BOTO3 = True
except ImportError:
HAS_BOTO3 = False
boto3 = None
BotoConfig = None
ClientError = Exception
from trendradar.storage.base import StorageBackend, NewsItem, NewsData
@ -90,10 +92,14 @@ class RemoteStorageBackend(StorageBackend):
self.temp_dir.mkdir(parents=True, exist_ok=True)
# 初始化 S3 客户端
# 使用 virtual-hosted style addressing主流
s3_config = BotoConfig(s3={"addressing_style": "virtual"})
client_kwargs = {
"endpoint_url": endpoint_url,
"aws_access_key_id": access_key_id,
"aws_secret_access_key": secret_access_key,
"config": s3_config,
}
if region:
client_kwargs["region_name"] = region

View File

@ -1 +1 @@
4.0.0
4.0.1