mirror of
https://gitee.com/houhuan/TrendRadar.git
synced 2025-12-21 14:27:15 +08:00
v2.4.3
This commit is contained in:
parent
74109fad9c
commit
9ff4cb7143
@ -35,14 +35,19 @@ notification:
|
||||
batch_send_interval: 1 # 批次发送间隔(秒)
|
||||
feishu_message_separator: "━━━━━━━━━━━━━━━━━━━" # feishu 消息分割线
|
||||
|
||||
silent_push:
|
||||
enabled: false # 是否启用静默推送模式,如果 true,则启用
|
||||
# 因为我们白嫖的 github 服务器执行时间不稳定,所以时间范围要尽可能大一点,至少留足 2 小时
|
||||
# 如果你想寻求稳定的按时的推送,建议通过 docker 部署在个人的服务器上
|
||||
# 🕐 推送时间窗口控制(可选功能)
|
||||
# 用途:限制推送的时间范围,避免非工作时间打扰
|
||||
# 适用场景:
|
||||
# - 只想在工作日白天接收推送(如 9:00-18:00)
|
||||
# - 希望在晚上固定时间收到汇总(如 20:00-22:00)
|
||||
push_window:
|
||||
enabled: false # 是否启用推送时间窗口控制,默认关闭
|
||||
# 注意:GitHub Actions 执行时间不稳定,时间范围建议至少留足 2 小时
|
||||
# 如果想要精准的定时推送,建议使用 Docker 部署在个人服务器上
|
||||
time_range:
|
||||
start: "20:00" # 推送时间范围开始(北京时间)
|
||||
end: "22:00" # 推送时间范围结束(北京时间)
|
||||
once_per_day: true # 每天在时间范围内只推送一次,如果 false,则时间范围内每次执行都推送一次
|
||||
start: "20:00" # 推送时间窗口开始(北京时间)
|
||||
end: "22:00" # 推送时间窗口结束(北京时间)
|
||||
once_per_day: true # 每天在时间窗口内只推送一次,如果 false,则窗口内每次执行都推送
|
||||
push_record_retention_days: 7 # 推送记录保留天数
|
||||
|
||||
# 请务必妥善保管好 webhooks,不要公开
|
||||
|
||||
34
main.py
34
main.py
@ -20,7 +20,7 @@ import requests
|
||||
import yaml
|
||||
|
||||
|
||||
VERSION = "2.4.2"
|
||||
VERSION = "2.4.3"
|
||||
|
||||
|
||||
# === SMTP邮件配置 ===
|
||||
@ -83,25 +83,25 @@ def load_config():
|
||||
"FEISHU_MESSAGE_SEPARATOR": config_data["notification"][
|
||||
"feishu_message_separator"
|
||||
],
|
||||
"SILENT_PUSH": {
|
||||
"PUSH_WINDOW": {
|
||||
"ENABLED": config_data["notification"]
|
||||
.get("silent_push", {})
|
||||
.get("push_window", {})
|
||||
.get("enabled", False),
|
||||
"TIME_RANGE": {
|
||||
"START": config_data["notification"]
|
||||
.get("silent_push", {})
|
||||
.get("push_window", {})
|
||||
.get("time_range", {})
|
||||
.get("start", "08:00"),
|
||||
"END": config_data["notification"]
|
||||
.get("silent_push", {})
|
||||
.get("push_window", {})
|
||||
.get("time_range", {})
|
||||
.get("end", "22:00"),
|
||||
},
|
||||
"ONCE_PER_DAY": config_data["notification"]
|
||||
.get("silent_push", {})
|
||||
.get("push_window", {})
|
||||
.get("once_per_day", True),
|
||||
"RECORD_RETENTION_DAYS": config_data["notification"]
|
||||
.get("silent_push", {})
|
||||
.get("push_window", {})
|
||||
.get("push_record_retention_days", 7),
|
||||
},
|
||||
"WEIGHT_CONFIG": {
|
||||
@ -328,7 +328,7 @@ class PushRecordManager:
|
||||
|
||||
def cleanup_old_records(self):
|
||||
"""清理过期的推送记录"""
|
||||
retention_days = CONFIG["SILENT_PUSH"]["RECORD_RETENTION_DAYS"]
|
||||
retention_days = CONFIG["PUSH_WINDOW"]["RECORD_RETENTION_DAYS"]
|
||||
current_time = get_beijing_time()
|
||||
|
||||
for record_file in self.record_dir.glob("push_record_*.json"):
|
||||
@ -3215,24 +3215,24 @@ def send_to_notifications(
|
||||
"""发送数据到多个通知平台"""
|
||||
results = {}
|
||||
|
||||
if CONFIG["SILENT_PUSH"]["ENABLED"]:
|
||||
if CONFIG["PUSH_WINDOW"]["ENABLED"]:
|
||||
push_manager = PushRecordManager()
|
||||
time_range_start = CONFIG["SILENT_PUSH"]["TIME_RANGE"]["START"]
|
||||
time_range_end = CONFIG["SILENT_PUSH"]["TIME_RANGE"]["END"]
|
||||
time_range_start = CONFIG["PUSH_WINDOW"]["TIME_RANGE"]["START"]
|
||||
time_range_end = CONFIG["PUSH_WINDOW"]["TIME_RANGE"]["END"]
|
||||
|
||||
if not push_manager.is_in_time_range(time_range_start, time_range_end):
|
||||
now = get_beijing_time()
|
||||
print(
|
||||
f"静默模式:当前时间 {now.strftime('%H:%M')} 不在推送时间范围 {time_range_start}-{time_range_end} 内,跳过推送"
|
||||
f"推送窗口控制:当前时间 {now.strftime('%H:%M')} 不在推送时间窗口 {time_range_start}-{time_range_end} 内,跳过推送"
|
||||
)
|
||||
return results
|
||||
|
||||
if CONFIG["SILENT_PUSH"]["ONCE_PER_DAY"]:
|
||||
if CONFIG["PUSH_WINDOW"]["ONCE_PER_DAY"]:
|
||||
if push_manager.has_pushed_today():
|
||||
print(f"静默模式:今天已推送过,跳过本次推送")
|
||||
print(f"推送窗口控制:今天已推送过,跳过本次推送")
|
||||
return results
|
||||
else:
|
||||
print(f"静默模式:今天首次推送")
|
||||
print(f"推送窗口控制:今天首次推送")
|
||||
|
||||
report_data = prepare_report_data(stats, failed_ids, new_titles, id_to_name, mode)
|
||||
|
||||
@ -3312,8 +3312,8 @@ def send_to_notifications(
|
||||
|
||||
# 如果成功发送了任何通知,且启用了每天只推一次,则记录推送
|
||||
if (
|
||||
CONFIG["SILENT_PUSH"]["ENABLED"]
|
||||
and CONFIG["SILENT_PUSH"]["ONCE_PER_DAY"]
|
||||
CONFIG["PUSH_WINDOW"]["ENABLED"]
|
||||
and CONFIG["PUSH_WINDOW"]["ONCE_PER_DAY"]
|
||||
and any(results.values())
|
||||
):
|
||||
push_manager = PushRecordManager()
|
||||
|
||||
49
readme.md
49
readme.md
@ -11,7 +11,7 @@
|
||||
[](https://github.com/sansan0/TrendRadar/stargazers)
|
||||
[](https://github.com/sansan0/TrendRadar/network/members)
|
||||
[](LICENSE)
|
||||
[](https://github.com/sansan0/TrendRadar)
|
||||
[](https://github.com/sansan0/TrendRadar)
|
||||
|
||||
[](https://work.weixin.qq.com/)
|
||||
[](https://telegram.org/)
|
||||
@ -133,12 +133,20 @@ platforms:
|
||||
| **当前榜单**<br/>`current` | 📰 自媒体人/内容创作者 | 按时推送(默认每小时推送一次) | 当前榜单匹配新闻<br/>+ 新增新闻区域 | 实时热点追踪<br/>了解当前最火的内容 |
|
||||
| **增量监控**<br/>`incremental` | 📈 投资者/交易员 | 有新增才推送 | 新出现的匹配频率词新闻 | 避免重复信息干扰<br/>高频监控场景 |
|
||||
|
||||
**静默推送模式**:
|
||||
**附加功能 - 推送时间窗口控制**(可选):
|
||||
|
||||
- **时间范围控制**:设定推送时间窗口(如 9:00-18:00),仅在指定时间内推送
|
||||
- **适用场景**:
|
||||
- 时间内每次执行都推送
|
||||
- 时间范围内只推送一次
|
||||
此功能独立于上述三种推送模式,可与任意模式搭配使用:
|
||||
|
||||
- **时间窗口限制**: 设定推送时间范围(如 9:00-18:00 或 20:00-22:00),只在指定时间内推送
|
||||
- **推送频率控制**:
|
||||
- 窗口内多次推送: 时间窗口内每次执行都推送
|
||||
- 每天仅推送一次: 时间窗口内只推送一次(适合当日汇总或当前榜单模式)
|
||||
- **典型场景**:
|
||||
- 工作时间推送: 只在工作日 9:00-18:00 接收消息
|
||||
- 晚间汇总推送: 希望在晚上固定时间(如 20:00-22:00)收到汇总
|
||||
- 避免打扰: 防止非工作时间收到推送通知
|
||||
|
||||
> 提示: 此功能默认关闭,需在 `config/config.yaml` 中手动启用 `push_window.enabled`
|
||||
|
||||
### **精准内容筛选**
|
||||
|
||||
@ -464,6 +472,22 @@ GitHub 一键 Fork 即可使用,无需编程基础。
|
||||
- **小版本更新**:从 v2.x 升级到 v2.y, 用本项目的 `main.py` 代码替换你 fork 仓库中的对应文件
|
||||
- **大版本升级**:从 v1.x 升级到 v2.y, 建议删除现有 fork 后重新 fork,这样更省力且避免配置冲突
|
||||
|
||||
### 2025/10/10 - v2.4.3
|
||||
|
||||
> 感谢 [nidaye996](https://github.com/sansan0/TrendRadar/issues/98) 发现的体验问题
|
||||
|
||||
- **更新内容**:
|
||||
- 重构"静默推送模式"命名为"推送时间窗口控制",提升功能理解度
|
||||
- 明确推送时间窗口作为可选附加功能,可与三种推送模式搭配使用
|
||||
- 改进注释和文档描述,使功能定位更加清晰
|
||||
|
||||
- **更新提示**:
|
||||
- 这个仅仅是重构,可以不用升级
|
||||
|
||||
|
||||
<details>
|
||||
<summary><strong>👉 历史更新</strong></summary>
|
||||
|
||||
### 2025/10/8 - v2.4.2
|
||||
|
||||
- **更新内容**:
|
||||
@ -476,9 +500,6 @@ GitHub 一键 Fork 即可使用,无需编程基础。
|
||||
- 建议使用【大版本更新】
|
||||
|
||||
|
||||
<details>
|
||||
<summary><strong>👉 历史更新</strong></summary>
|
||||
|
||||
### 2025/10/2 - v2.4.0
|
||||
|
||||
**新增 ntfy 推送通知**
|
||||
@ -547,7 +568,7 @@ GitHub 一键 Fork 即可使用,无需编程基础。
|
||||
- **推送频率可选**:时间段内支持单次推送或多次推送
|
||||
|
||||
**更新提示**:
|
||||
- 本功能默认关闭,需手动在 config.yaml 中开启静默推送模式
|
||||
- 本功能默认关闭,需手动在 config.yaml 中开启推送时间窗口控制
|
||||
- 升级需同时更新 main.py 和 config.yaml 两个文件
|
||||
|
||||
### 2025/08/27 - v2.0.4
|
||||
@ -695,9 +716,9 @@ frequency_words.txt 文件增加了一个【必须词】功能,使用 + 号
|
||||
|
||||
#### 手机端设置:
|
||||
1. 打开企业微信 App → 进入目标内部群聊
|
||||
2. 点击右上角"…"按钮 → 选择"群机器人"
|
||||
3. 点击"添加" → 点击"新建" → 设置机器人昵称
|
||||
4. 复制 Webhook 地址,配置到上方的 GitHub Secret 中
|
||||
2. 点击右上角"…"按钮 → 选择"消息推送"
|
||||
3. 点击"添加" → 名称输入"TrendRadar"
|
||||
4. 复制 Webhook 地址,点击保存,复制的内容配置到上方的 GitHub Secret 中
|
||||
|
||||
#### PC 端设置流程类似
|
||||
</details>
|
||||
@ -1270,7 +1291,7 @@ flowchart TD
|
||||
H --> H2[📰 current - 当前榜单<br/>定时推送最新榜单]
|
||||
H --> H3[📈 incremental - 增量监控<br/>仅推送新增内容]
|
||||
|
||||
H1 --> I[可选:静默推送设置<br/>⏰ 时间窗口控制]
|
||||
H1 --> I[可选:推送时间窗口控制<br/>⏰ 限制推送时间范围]
|
||||
H2 --> I
|
||||
H3 --> I
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user