mirror of
https://gitee.com/houhuan/TrendRadar.git
synced 2025-12-21 14:37:15 +08:00
'init'
This commit is contained in:
commit
3f481c107c
48
.github/workflows/crawler.yml
vendored
Normal file
48
.github/workflows/crawler.yml
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
name: Hot News Crawler
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '*/50 * * * *' # 每50分钟运行一次
|
||||
workflow_dispatch:
|
||||
|
||||
# 添加权限设置
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
crawl:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.9'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install requests pytz
|
||||
|
||||
- name: Create frequency_words.txt if not exists
|
||||
run: |
|
||||
if [ ! -f frequency_words.txt ]; then
|
||||
echo "Creating empty frequency_words.txt file"
|
||||
touch frequency_words.txt
|
||||
fi
|
||||
|
||||
- name: Run crawler
|
||||
env:
|
||||
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
||||
GITHUB_ACTIONS: true
|
||||
run: python main.py
|
||||
|
||||
- name: Commit and push if changes
|
||||
run: |
|
||||
git config --global user.name 'GitHub Actions'
|
||||
git config --global user.email 'actions@github.com'
|
||||
git add -A
|
||||
git diff --quiet && git diff --staged --quiet || (git commit -m "Auto update by GitHub Actions at $(TZ=Asia/Shanghai date)" && git push)
|
||||
93
frequency_words.txt
Normal file
93
frequency_words.txt
Normal file
@ -0,0 +1,93 @@
|
||||
胖东来
|
||||
于东来
|
||||
|
||||
DeepSeek
|
||||
梁文锋
|
||||
|
||||
华为
|
||||
任正非
|
||||
鸿蒙
|
||||
HarmonyOS
|
||||
|
||||
比亚迪
|
||||
王传福
|
||||
|
||||
宇树
|
||||
王兴兴
|
||||
|
||||
稚晖君
|
||||
智元
|
||||
|
||||
黑神话
|
||||
冯骥
|
||||
|
||||
哪吒
|
||||
饺子
|
||||
!车
|
||||
!餐
|
||||
|
||||
流浪地球
|
||||
郭帆
|
||||
三体
|
||||
刘慈欣
|
||||
|
||||
米哈游
|
||||
原神
|
||||
星穹铁道
|
||||
|
||||
京东
|
||||
刘强东
|
||||
|
||||
字节
|
||||
张一鸣
|
||||
|
||||
马斯克
|
||||
特斯拉
|
||||
|
||||
微软
|
||||
Microsoft
|
||||
|
||||
黄仁勋
|
||||
英伟达
|
||||
NVIDIA
|
||||
|
||||
AMD
|
||||
|
||||
谷歌
|
||||
google
|
||||
gemini
|
||||
deepmind
|
||||
|
||||
chatgpt
|
||||
openai
|
||||
|
||||
claude
|
||||
Anthropic
|
||||
|
||||
iphone
|
||||
ipad
|
||||
mac
|
||||
ios
|
||||
|
||||
ai
|
||||
人工智能
|
||||
|
||||
汽车
|
||||
自动驾驶
|
||||
l3
|
||||
|
||||
机器人
|
||||
|
||||
芯片
|
||||
半导体
|
||||
光刻机
|
||||
|
||||
科技
|
||||
|
||||
核能
|
||||
|
||||
月球
|
||||
登月
|
||||
火星
|
||||
宇宙
|
||||
飞船
|
||||
399
readme.md
Normal file
399
readme.md
Normal file
@ -0,0 +1,399 @@
|
||||
# TrendRadar - 多平台热点资讯监控分析系统
|
||||
|
||||
TrendRadar 是一款多平台热点资讯监控工具,可自动追踪主流媒体平台的热门话题,实时分析热点走势,根据自定义关键词进行筛选,并通过精美报表或飞书机器人实时推送到手机上。无论你是媒体从业者、市场分析师、还是信息爱好者,TrendRadar 都能帮你第一时间捕捉全网热点脉搏。
|
||||
|
||||
或者像我一样通过这个工具来反向减少对各种APP的使用依赖的。
|
||||
|
||||
|
||||
## ✨ 核心功能
|
||||
|
||||
- **多平台覆盖** - 一次监控 10+主流平台(今日头条、百度热搜、微博、抖音、知乎、B 站等)
|
||||
- **智能分析** - 自定义频率词和过滤词,精准捕捉你关心的热点
|
||||
- **数据可视化** - 生成美观的 HTML 统计报告,热点一目了然
|
||||
- **实时推送** - 支持飞书机器人通知,重要热点即时知晓
|
||||
- **全自动化** - 基于 GitHub Actions,定时运行无需服务器
|
||||
|
||||
## 🔍 支持的平台
|
||||
|
||||
目前已支持以下 10 个热门平台:
|
||||
|
||||
- 今日头条
|
||||
- 百度热搜
|
||||
- 华尔街见闻
|
||||
- 澎湃新闻
|
||||
- bilibili 热搜
|
||||
- 财联社热门
|
||||
- 贴吧
|
||||
- 微博
|
||||
- 抖音
|
||||
- 知乎
|
||||
|
||||
|
||||
|
||||
|
||||
## 🚀 使用方式
|
||||
|
||||
### 方式一:GitHub Actions 远程运行(推荐)
|
||||
|
||||
1. **Fork 本项目**到你的 GitHub 账户
|
||||
|
||||
- 点击本页面右上角的"Fork"按钮
|
||||
|
||||
2. **设置 GitHub Secrets**:
|
||||
|
||||
- 在你 Fork 后的仓库中,进入`Settings` > `Secrets and variables` > `Actions`
|
||||
- 点击"New repository secret"
|
||||
- 名称填写`FEISHU_WEBHOOK_URL`
|
||||
- 值填写你的飞书机器人 Webhook 地址(webhook 获取,请直接跳转到下方的 "🤖 飞书机器人设置")
|
||||
- 点击"Add secret"保存
|
||||
|
||||
3. **自定义关键词**:
|
||||
|
||||
- 修改`frequency_words.txt`文件,添加你需要监控的频率词和过滤词
|
||||
|
||||
4. **自动运行**:
|
||||
|
||||
- 项目已包含`.github/workflows/crawler.yml`配置文件,默认每 50 分钟自动运行一次
|
||||
- 你也可以在 GitHub 仓库的 Actions 页面手动触发运行
|
||||
|
||||
5. **查看结果**:
|
||||
- 运行结果将自动保存在仓库的`output`目录中
|
||||
- 同时通过飞书机器人发送通知到你的群组
|
||||
|
||||
6. **增加或减少平台**:
|
||||
如果想支持更多平台或者不想看某些歪屁股平台,可以访问newsnow的源代码:https://github.com/ourongxing/newsnow/tree/main/server/sources ,根据里面的文件名自己来修改 main.py 中的下面代码,可以在你 Fork 的项目上直接修改源码
|
||||
|
||||
```
|
||||
ids = [
|
||||
("toutiao", "今日头条"),
|
||||
("baidu", "百度热搜"),
|
||||
("wallstreetcn-hot", "华尔街见闻"),
|
||||
("thepaper", "澎湃新闻"),
|
||||
("bilibili-hot-search", "bilibili 热搜"),
|
||||
("cls-hot", "财联社热门"),
|
||||
"tieba",
|
||||
"weibo",
|
||||
"douyin",
|
||||
"zhihu",
|
||||
]
|
||||
```
|
||||
|
||||
### 方式二:本地运行
|
||||
|
||||
1. **克隆项目**到本地:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/sansan0/TrendRadar.git
|
||||
cd TrendRadar
|
||||
```
|
||||
|
||||
2. **安装依赖**:
|
||||
|
||||
```bash
|
||||
pip install requests pytz
|
||||
```
|
||||
|
||||
3. **配置飞书 Webhook URL**(两种方式):
|
||||
|
||||
- 方式 1:直接在代码顶部的`CONFIG`字典中修改`FEISHU_WEBHOOK_URL`的值
|
||||
- 方式 2:设置环境变量`FEISHU_WEBHOOK_URL`(优先级更高)
|
||||
|
||||
4. **创建或修改关键词**:
|
||||
|
||||
- 编辑`frequency_words.txt`文件,添加你需要监控的频率词和过滤词
|
||||
|
||||
5. **运行程序**:
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
程序将自动爬取热点数据,生成报告,并在本地浏览器中打开 HTML 统计页面。
|
||||
|
||||
## ⚙️ 配置说明
|
||||
|
||||
### 全局配置项
|
||||
|
||||
代码顶部的`CONFIG`字典包含了所有可配置的选项:
|
||||
|
||||
```python
|
||||
CONFIG = {
|
||||
"FEISHU_SEPARATOR": "==============================", # 飞书消息分割线
|
||||
"REQUEST_INTERVAL": 1000, # 请求间隔(毫秒)
|
||||
"FEISHU_REPORT_TYPE": "daily", # 可选: "current", "daily", "both"
|
||||
"RANK_THRESHOLD": 5, # 排名阈值,决定使用【】还是[]的界限
|
||||
"USE_PROXY": False, # 是否启用本地代理
|
||||
"DEFAULT_PROXY": "http://127.0.0.1:10086", # 默认代理地址
|
||||
"CONTINUE_WITHOUT_FEISHU": False, # 是否在没有飞书webhook URL时继续执行爬虫
|
||||
"FEISHU_WEBHOOK_URL": "" # 飞书机器人的webhook URL,默认为空
|
||||
}
|
||||
```
|
||||
|
||||
主要配置项说明:
|
||||
|
||||
- `REQUEST_INTERVAL`: 控制爬取不同平台之间的时间间隔
|
||||
- `FEISHU_REPORT_TYPE`: 控制发送到飞书的报告类型
|
||||
- `current`: 只发送当前爬取结果
|
||||
- `daily`: 只发送当日汇总
|
||||
- `both`: 两者都发送
|
||||
- `RANK_THRESHOLD`: 排名显示阈值,小于等于此值的排名使用【】,大于此值使用[]
|
||||
- `USE_PROXY`: 是否在本地运行时使用代理
|
||||
- `DEFAULT_PROXY`: 本地代理地址
|
||||
- `CONTINUE_WITHOUT_FEISHU`: 如果为`True`,即使没有飞书 webhook URL 也会执行爬虫;如果为`False`,则不执行
|
||||
- `FEISHU_WEBHOOK_URL`: 飞书机器人的 webhook URL,可以直接在此设置
|
||||
|
||||
### 频率词和过滤词
|
||||
|
||||
在`frequency_words.txt`文件中配置监控的频率词和过滤词:
|
||||
|
||||
- 每组相关的频率词用换行分隔,不同组之间用空行分隔
|
||||
- 以`!`开头的词为过滤词
|
||||
- 如果一个标题既包含频率词又包含过滤词,则该标题不会被统计
|
||||
|
||||
示例:
|
||||
|
||||
```
|
||||
人工智能
|
||||
AI
|
||||
GPT
|
||||
大模型
|
||||
!AI绘画
|
||||
|
||||
芯片
|
||||
半导体
|
||||
```
|
||||
|
||||
上述配置表示:
|
||||
|
||||
- 监控包含"人工智能"、"AI"、"GPT"或"大模型"的标题,但若同时包含"AI 绘画"则排除
|
||||
- 监控包含"芯片"或"半导体"的标题
|
||||
|
||||
## 📊 输出示例
|
||||
|
||||
程序会生成两种报告:
|
||||
|
||||
1. **单次爬取报告**:每次爬取后生成的报告,包含当次爬取的热点数据
|
||||
2. **当日汇总报告**:汇总当天所有爬取的数据,去重并统计出现频率
|
||||
|
||||
### HTML 报告示例:
|
||||
|
||||
| 排名 | 频率词 | 出现次数 | 占比 | 相关标题 |
|
||||
| ---- | ----------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | 人工智能 AI | 12 | 24.5% | [百度热搜] 科技巨头发布新 AI 模型 【1】- 12 时 30 分 - 4 次<br>[今日头条] AI 技术最新突破 【2】- 13 时 15 分 - 2 次 |
|
||||
| 2 | 芯片 半导体 | 8 | 16.3% | [华尔街见闻] 半导体行业最新动态 【3】- 12 时 45 分 - 3 次<br>[财联社] 芯片设计新技术 [7] - 14 时 00 分 - 1 次 |
|
||||
|
||||
### 飞书通知示例:
|
||||
|
||||
```
|
||||
【人工智能 AI】 : 12 条
|
||||
1. [百度热搜] 科技巨头发布新AI模型 【1】- 12时30分 - 4次
|
||||
2. [今日头条] AI技术最新突破 【2】- 13时15分 - 2次
|
||||
|
||||
==============================
|
||||
|
||||
【芯片 半导体】 : 8 条
|
||||
1. [华尔街见闻] 半导体行业最新动态 【3】- 12时45分 - 3次
|
||||
2. [财联社] 芯片设计新技术 [7] - 14时00分 - 1次
|
||||
```
|
||||
|
||||
### 飞书消息格式说明
|
||||
|
||||
| 格式元素 | 示例 | 含义 | 说明 |
|
||||
| ------------- | ------------------------------ | ------------ | ----------------------------------- |
|
||||
| 【关键词】 | 【人工智能 AI】 | 频率词组 | 表示本组匹配的关键词 |
|
||||
| : N 条 | : 12 条 | 匹配数量 | 该关键词组匹配的标题总数 |
|
||||
| [平台名] | [百度热搜] | 来源平台 | 标题所属的平台名称 |
|
||||
| 【数字】 | 【1】 | 高排名标记 | 排名 ≤ 阈值(默认 5)的热搜,重要性高 |
|
||||
| [数字] | [7] | 普通排名标记 | 排名>阈值的热搜,重要性一般 |
|
||||
| - 时间 | - 12 时 30 分 | 首次发现时间 | 标题首次被发现的时间 |
|
||||
| [时间 ~ 时间] | [12 时 30 分 ~ 14 时 00 分] | 时间范围 | 标题出现的时间范围(首次~最后) |
|
||||
| - N 次 | - 4 次 | 出现次数 | 标题在监控期间出现的总次数 |
|
||||
| ====== | ============================== | 分隔线 | 不同频率词组之间的分隔符 |
|
||||
|
||||
## 🤖 飞书机器人设置
|
||||
|
||||
1. 电脑浏览器打开 https://botbuilder.feishu.cn/home/my-app
|
||||
|
||||
2. 点击"新建机器人应用"
|
||||
|
||||
3. 进入创建的应用后,点击"流程涉及" > "创建流程" > "选择触发器"
|
||||
|
||||
4. 往下滑动,点击"Webhook 触发"
|
||||
|
||||
5. 此时你会看到"Webhook 地址",把这个链接先复制到本地记事本暂存,继续接下来的操作
|
||||
|
||||
6. "参数"里面放上下面的内容,然后点击"完成"
|
||||
|
||||
```
|
||||
{
|
||||
"message_type ":"text",
|
||||
"content":{
|
||||
"total_titles": "{{内容}}",
|
||||
"timestamp": "{{内容}}",
|
||||
"report_type": "{{内容}}",
|
||||
"text": "{{内容}}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
7. 点击"选择操作" > "发送飞书消息" ,勾选 "群消息", 然后点击下面的输入框,点击"我管理的群组"(如果没有群组,你可以在飞书 app 上创建群组)
|
||||
|
||||
8. 消息标题填写"我是热搜"
|
||||
|
||||
9. 最关键的部分来了,点击 + 按钮,选择"Webhook 触发",然后按照下面的图片摆放
|
||||
|
||||

|
||||
|
||||
```bash
|
||||
# Linux/macOS
|
||||
export FEISHU_WEBHOOK_URL="你的Webhook URL"
|
||||
|
||||
# Windows
|
||||
set FEISHU_WEBHOOK_URL="你的Webhook URL"
|
||||
```
|
||||
|
||||
## 📡 数据来源说明
|
||||
|
||||
本项目使用的数据来自 [newsnow](https://github.com/ourongxing/newsnow) 的 API 服务。每个平台的数据通过以下格式的 API 请求获取:
|
||||
|
||||
```
|
||||
https://newsnow.busiyi.world/api/s?id={平台ID}&latest
|
||||
```
|
||||
|
||||
其中`{平台ID}`为各平台的标识符,如`baidu`、`toutiao`等。
|
||||
|
||||
API 返回的数据格式为 JSON,包含平台的热搜榜单:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"items": [
|
||||
{
|
||||
"title": "热搜标题1",
|
||||
"url": "https://example.com/news1"
|
||||
},
|
||||
{
|
||||
"title": "热搜标题2",
|
||||
"url": "https://example.com/news2"
|
||||
}
|
||||
// ...更多条目
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 自建 API 服务
|
||||
|
||||
如果你想自己部署 API 服务而不依赖第三方:
|
||||
|
||||
1. 克隆 [newsnow](https://github.com/ourongxing/newsnow) 仓库
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ourongxing/newsnow.git
|
||||
cd newsnow
|
||||
```
|
||||
|
||||
2. 按照该仓库的 README 说明部署 API 服务
|
||||
|
||||
3. 修改 TrendRadar 中的 API URL:
|
||||
|
||||
- 在`DataFetcher.fetch_data`方法中,将
|
||||
```python
|
||||
url = f"https://newsnow.busiyi.world/api/s?id={id_value}&latest"
|
||||
```
|
||||
更改为你自己的 API 地址
|
||||
```python
|
||||
url = f"https://你的域名/api/s?id={id_value}&latest"
|
||||
```
|
||||
|
||||
4. 如需添加新的平台支持,请参考 newsnow 项目中的爬虫实现并添加到你的 API 服务中
|
||||
|
||||
## 📁 代码结构
|
||||
|
||||
代码采用了面向对象设计模式,主要包含以下几个类:
|
||||
|
||||
- `TimeHelper`: 时间相关的辅助功能
|
||||
- `FileHelper`: 文件操作相关的辅助功能
|
||||
- `DataFetcher`: 负责从 API 获取数据
|
||||
- `DataProcessor`: 负责处理和转换数据
|
||||
- `StatisticsCalculator`: 负责统计计算
|
||||
- `ReportGenerator`: 负责生成 HTML 报告和飞书消息
|
||||
- `NewsAnalyzer`: 主类,协调整个流程的执行
|
||||
|
||||
## 🔧 高级用法
|
||||
|
||||
### 自定义监控平台
|
||||
|
||||
可以在`NewsAnalyzer.run`方法中修改`ids`列表来添加或移除监控的平台:
|
||||
|
||||
```python
|
||||
ids = [
|
||||
("toutiao", '今日头条'),
|
||||
("baidu", '百度热搜'),
|
||||
# 添加或移除平台
|
||||
]
|
||||
```
|
||||
|
||||
### 飞书通知选项
|
||||
|
||||
你可以通过以下方式控制飞书通知行为:
|
||||
|
||||
1. `FEISHU_WEBHOOK_URL`: 设置为有效的 webhook URL 以启用飞书通知
|
||||
2. `CONTINUE_WITHOUT_FEISHU`: 控制在没有有效 webhook URL 时的行为
|
||||
- `True`: 执行爬虫但不发送通知(默认值)
|
||||
- `False`: 完全不执行爬虫
|
||||
3. `FEISHU_REPORT_TYPE`: 控制发送哪种类型的报告
|
||||
|
||||
### 扩展功能
|
||||
|
||||
如果你想扩展功能,可以:
|
||||
|
||||
1. 继承已有类并重写特定方法
|
||||
2. 添加新的统计方法到`StatisticsCalculator`类
|
||||
3. 添加新的报告格式到`ReportGenerator`类
|
||||
4. 修改`NewsAnalyzer`类以支持新的工作流程
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
1. **GitHub Actions 不执行怎么办?**
|
||||
|
||||
- 检查`.github/workflows/crawler.yml`文件是否存在
|
||||
- 在 Actions 页面手动触发一次 workflow
|
||||
- 确认你有足够的 GitHub Actions 免费分钟数
|
||||
|
||||
2. **本地运行失败怎么办?**
|
||||
|
||||
- 检查网络连接
|
||||
- 尝试修改`CONFIG`中的`USE_PROXY`和`DEFAULT_PROXY`设置
|
||||
- 检查依赖是否正确安装
|
||||
|
||||
3. **没有收到飞书通知怎么办?**
|
||||
|
||||
- 检查`FEISHU_WEBHOOK_URL`是否正确设置(环境变量或 CONFIG 中)
|
||||
- 检查飞书机器人是否仍在群内且启用
|
||||
- 查看程序输出中是否有发送失败的错误信息
|
||||
|
||||
4. **想要停止爬虫行为但保留仓库怎么办?**
|
||||
|
||||
- 将`CONTINUE_WITHOUT_FEISHU`设置为`False`并删除`FEISHU_WEBHOOK_URL`secret
|
||||
- 或修改 GitHub Actions workflow 文件禁用自动执行
|
||||
|
||||
5. **如何处理 API 限制或访问问题?**
|
||||
- 适当增加`REQUEST_INTERVAL`值,避免频繁请求
|
||||
- 考虑使用上述"自建 API 服务"部分的说明部署自己的服务
|
||||
- 本地运行时可尝试启用或更换代理
|
||||
|
||||
## 💡 应用场景
|
||||
|
||||
- **媒体从业者**: 实时追踪热点,把握报道方向
|
||||
- **市场营销**: 及时发现与品牌相关的热点话题
|
||||
- **内容创作**: 获取热门话题灵感,提高内容曝光
|
||||
- **投资分析**: 追踪特定行业或公司的热点消息
|
||||
- **个人使用**: 不错过任何你关心领域的热点信息
|
||||
|
||||
## 🙏 致谢
|
||||
|
||||
本项目使用了 [newsnow](https://github.com/ourongxing/newsnow) 提供的 API 服务,感谢其提供的数据支持。
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
MIT License
|
||||
Loading…
Reference in New Issue
Block a user