76 lines
2.8 KiB
Markdown
Raw Permalink 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.

---
name: hotspot-radar
description: Hotspot aggregation & analysis module for Sage — 11 builtin parsers, 5-dimension analysis
category: devops
---
# Hotspot Radar Module
指定来源的热点聚合分析平台。11 个内置平台解析器4 种可配置提取器,五维分析 + 7天半衰期自动分类。
## Architecture
- **Repo**: `git@git.opencomputing.cn:yumoqing/hotspot.git`
- **Tables** (6): `hotspot_source`, `hotspot_schedule`, `hotspot_fetch_log`, `hotspot_item`, `hotspot_analysis`, `hotspot_alert`
- **Python package**: `hotspot/``init.py` registers on ServerEnv, `parsers.py` has 11 builtins
- **DSPY**: `import json` + `get_sor_context(env, 'sage')` + `env.run_fetch(sor)`
## Builtin Parsers (11)
| parser_name | Platform | API Endpoint |
|---|---|---|
| weibo_hot | 微博热搜 | weibo.com/ajax/side/hotSearch |
| zhihu_hot | 知乎热榜 | zhihu.com/api/v3/feed/topstory/hot-lists |
| baidu_hot | 百度热搜 | top.baidu.com/board |
| toutiao_hot | 头条热榜 | toutiao.com/hot-event/hot-board |
| bilibili_hot | B站热门 | api.bilibili.com/x/web-interface/popular |
| douyin_hot | 抖音热点 | 第三方聚合接口 |
| 36kr_hot | 36氪热榜 | 36kr.com/api/search/list/info-flow/hot |
| github_trending | GitHub | api.github.com/search/repositories |
| hackernews | HackerNews | firebaseio.com (两步) |
| v2ex_hot | V2EX | v2ex.com/api/topics/hot.json |
| rsshub | RSSHub | 来源 url 即地址 |
## Extractor Types (4)
| parser | 场景 | parser_config 示例 |
|--------|------|---------|
| `builtin` | 内置平台 | `{"parser":"builtin","builtin_name":"weibo_hot"}` |
| `json_path` | REST API | `{"parser":"json_path","item_path":"$.data.list[*]","field_map":{...}}` |
| `css` | HTML | `{"parser":"css","item_selector":".hot-item","field_map":{...}}` |
| `regex` | 文本 | `{"parser":"regex","item_regex":"(?P<title>...)"}` |
| `rss` | RSS/Atom | `{"parser":"rss"}` |
## 5-Dimension Analysis
| 维度 | 评分依据 |
|------|---------|
| time (时效) | hours_alive: <1h=95, <6h=85, <24h=70 |
| heat (热度) | heat_score: >10k=95, >5k=85, >1k=70 |
| content (内容) | title_len + summary_len + tags + category |
| propagation (传播) | engagement + comments×2 + shares×3 |
| audience (受众) | total_engagement / heat_score ratio |
## Status Classification
```
decay = e^(-hours_alive / 168) # 7天半衰期
adjusted_heat = raw_heat × decay
hours > 336 → expired
168 < hours ≤ 336 → cooling
adjusted_heat > 5000 → hot
adjusted_heat > 500 → rising (velocity>50) else emerging
other → emerging
```
## Deployment
```bash
cp -r hotspot $SAGE_ROOT/
cp models/hotspot_*.json $SAGE_ROOT/models/
cp -r wwwroot/hotspot $SAGE_ROOT/wwwroot/
mysql -u user -p sage < ddl/mysql.sql
python scripts/load_path.py
# sage.py: from hotspot.init import load_hotspot + load_hotspot()
```