TravelContentCreator/docs/HOTSPOT_MODULE.md

256 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 热点数据模块
> 多平台热点数据采集和管理
## 一、模块结构
```
domain/hotspot/
├── __init__.py # 模块入口
├── models.py # 数据模型 (HotTopic, HotTopicSource)
├── manager.py # 热点管理器 (缓存、聚合)
└── crawlers/ # 爬虫模块
├── base.py # 爬虫基类
├── weibo.py # 微博热搜 (需要优化)
├── baidu.py # 百度热搜 ✅ (含旅游榜)
├── bing.py # Bing 搜索建议 ✅
├── calendar.py # 节日日历 ✅
├── xiaohongshu.py # 小红书热门 ✅
└── mediacrawler/ # MediaCrawler 集成
├── __init__.py
└── xhs_crawler.py # 小红书实时爬虫
libs/MediaCrawler/ # MediaCrawler 项目 (子模块)
api/routers/hotspot.py # API 路由
```
## 二、API 接口
### 2.1 获取所有热点
```bash
GET /api/v2/hotspot/all?force=false
```
### 2.2 按平台获取
```bash
# 微博热搜 (待优化)
GET /api/v2/hotspot/weibo?limit=50
# 百度热搜
GET /api/v2/hotspot/baidu?limit=50
# 小红书热门 (文旅相关)
GET /api/v2/hotspot/xiaohongshu?limit=20
# 节日日历
GET /api/v2/hotspot/calendar?days=30
```
### 2.3 聚合查询
```bash
# 旅游相关热点 (所有来源)
GET /api/v2/hotspot/travel?limit=10
# 热门话题 (去重合并)
GET /api/v2/hotspot/trending?limit=20
```
### 2.4 自定义热点
```bash
# 获取
GET /api/v2/hotspot/custom
# 添加
POST /api/v2/hotspot/custom
{
"title": "冬季温泉推荐",
"tags": ["温泉", "冬季", "度假"],
"category": "travel"
}
# 删除
DELETE /api/v2/hotspot/custom/{title}
```
## 三、数据模型
### HotTopic
```python
@dataclass
class HotTopic:
title: str # 话题标题
source: HotTopicSource # 来源 (weibo/baidu/xhs/calendar/custom)
rank: Optional[int] # 排名
heat: Optional[int] # 热度值
category: HotTopicCategory # 分类 (travel/food/festival/trending)
url: Optional[str] # 原始链接
description: Optional[str] # 描述
tags: List[str] # 标签
fetched_at: datetime # 获取时间
expires_at: Optional[datetime] # 过期时间
```
### HotTopicCategory
- `travel` - 旅游相关
- `food` - 美食
- `festival` - 节日节气
- `event` - 热门事件
- `trending` - 热门话题
- `season` - 季节性
- `other` - 其他
## 四、缓存策略
| 来源 | 缓存时间 | 说明 |
|-----|---------|------|
| 微博 | 5分钟 | 实时性高 |
| 百度 | 10分钟 | 实时性高 |
| 小红书 | 30分钟 | 预设话题 |
| 日历 | 1小时 | 静态数据 |
| 自定义 | 24小时 | 手动管理 |
## 五、百度多榜单
百度爬虫支持多个榜单:
```python
# 默认获取: 实时热点 + 旅游榜
crawler = BaiduCrawler() # tabs=['realtime', 'travel']
# 自定义榜单
crawler = BaiduCrawler(tabs=['realtime', 'travel', 'movie'])
```
**支持的榜单**:
- `realtime` - 实时热点 (50条)
- `travel` - 旅游榜 (30条) ⭐
- `movie` - 电影榜
- `teleplay` - 电视剧榜
- `novel` - 小说榜
- `car` - 汽车榜
- `game` - 游戏榜
## 六、小红书模块说明
基于 MediaCrawler 项目获取实时数据,需要扫码登录。
### 6.1 使用爬虫
```python
from domain.hotspot.crawlers import XiaohongshuCrawler
crawler = XiaohongshuCrawler()
# 扫码登录 (首次需要Cookie 会缓存)
await crawler.login()
# 获取热门话题
topics = await crawler.fetch()
# 搜索笔记
notes = await crawler.search_notes("旅游攻略", page_size=20)
# 获取笔记详情
detail = await crawler.get_note_detail("note_id")
```
### 6.2 直接使用桥接器
```python
from domain.hotspot.crawlers.mediacrawler import get_xhs_bridge
bridge = get_xhs_bridge()
# 登录
await bridge.login()
# 搜索笔记
notes = await bridge.search_notes("旅游攻略", page_size=20)
# 获取笔记详情
detail = await bridge.get_note_detail("note_id")
```
### 6.3 MediaCrawler 项目
位置: `libs/MediaCrawler/`
来源: https://github.com/NanmiCoder/MediaCrawler
支持平台: 小红书、抖音、微博、B站、快手、知乎、贴吧
### 6.4 搜索关键词
默认搜索以下文旅相关关键词:
```python
SEARCH_KEYWORDS = [
"旅游攻略", "周末去哪玩", "亲子游推荐", "自驾游路线",
"网红打卡地", "小众景点", "酒店推荐", "民宿推荐",
"冬季旅行", "滑雪攻略", "温泉度假",
]
```
可自定义关键词:
```python
crawler = XiaohongshuCrawler(keywords=["三亚旅游", "哈尔滨冰雪"])
```
## 六、使用示例
### Python 调用
```python
from domain.hotspot import get_hotspot_manager
async def get_travel_hotspots():
manager = get_hotspot_manager()
# 获取旅游相关热点
topics = await manager.get_travel_topics(limit=10)
for topic in topics:
print(f"[{topic.source.value}] {topic.title}")
return topics
```
### 内容生成集成
```python
# 在内容生成时使用热点
from domain.hotspot import get_hotspot_manager
async def generate_with_hotspots():
manager = get_hotspot_manager()
# 获取热点
topics = await manager.get_travel_topics(limit=5)
hot_topics = [t.title for t in topics]
# 传递给内容生成引擎
params = {
"subject": {...},
"hot_topics": {
"events": hot_topics[:2],
"festivals": ["元旦", "圣诞"],
"trending": hot_topics[2:],
}
}
```
## 七、待优化
1. **微博爬虫**: 需要 Cookie 或使用 Playwright
2. **抖音热搜**: 待添加
3. **MediaCrawler 集成**: 获取小红书实时数据
4. **定时更新**: 后台定时刷新缓存
5. **持久化**: 热点数据存储到数据库