2026-05-30 23:27:56 +08:00

117 lines
4.5 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.

# 帝国幻想乡~TOHOTOPIA 社区监控 MVP
本项目第一阶段接入 Steam 评测与 Steam 讨论区,定时抓取社区内容,使用 OpenRouter 模型分类,并在本地 dashboard 中展示处理状态。
## 当前状态
- 产品:《帝国幻想乡~TOHOTOPIA》
- Steam AppID`3774440`
- 当前已接入Steam 评测、Steam 讨论区主题、Steam 讨论区回复
- 已实现待登录验证Twitter/X 账号帖子与帖子回复采集
- 当前模型OpenRouter `deepseek/deepseek-v4-pro`
- 当前数据库SQLite默认 `data/tohotopia_monitor.sqlite3`
- 当前服务FastAPI + 内联 dashboard
- 当前刷新:后台每 30 分钟增量同步
- 当前排序:建议回复优先;同组内按发布时间新到旧
- 当前局域网服务:监听 `0.0.0.0:8000`
已验证数据状态:
- 本机 smoke test 已抓取 384 条 Steam 内容。
- 2026-05-01 之后的 209 条内容已全部完成 AI 分析。
- Steam 讨论区中文时间文本已解析并回填,支持新到旧排序。
## 本机运行
```powershell
python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
Copy-Item .env.example .env
# 编辑 .env填入 OPENROUTER_API_KEY
.\.venv\Scripts\python -m app.cli sync --full
.\.venv\Scripts\uvicorn app.main:app --host 0.0.0.0 --port 8000
```
打开:
```text
http://127.0.0.1:8000
```
局域网其他设备访问:
```text
http://本机局域网IP:8000
```
当前 MVP 没有登录认证。开放到局域网后,同一局域网内能访问该地址的人都可以查看 dashboard、触发同步和修改处理状态。
## 关键配置
- `OPENROUTER_API_KEY`OpenRouter Key。
- `APP_ID`Steam AppID默认 `3774440`
- `SYNC_INTERVAL_MINUTES`:自动刷新间隔,默认 30 分钟。
- `TWITTER_ENABLED`:是否启用 Twitter/X 采集,默认 `false`,需要先登录 X.com。
- `TWITTER_USERNAME`:目标账号,默认 `Tohotopia`
- `TWITTER_BROWSER_PROVIDER`:社媒采集浏览器来源,默认 `existing`,复用 `social-media-scraper` 的 CDP Chrome profile。
- `TWITTER_FULL_MAX_NO_NEW` / `TWITTER_INCREMENTAL_MAX_NO_NEW`:账号时间线滚动停止阈值。
- `TWITTER_THREAD_MAX_NO_NEW`:单帖回复滚动停止阈值。
- `TWITTER_FULL_REPLY_POST_LIMIT`:全量同步时抓取回复的帖子数上限,`0` 表示不限制。
- `TWITTER_INCREMENTAL_REPLY_PARENT_LIMIT`:增量同步时回查最近多少条已入库 Twitter 主帖的回复。
- `DISCUSSION_FULL_SCAN_MAX_PAGES`:首轮讨论区全量安全页数上限。
- `DISCUSSION_INCREMENTAL_MAX_PAGES`:增量刷新最多扫描页数。
## 分析补跑
Dashboard 里的“补跑分析”会在后台启动,每批最多处理 20 条,点击后页面会立即返回。刷新页面查看“已分析 / 待补跑”计数变化;如果仍有待补跑,可以继续点击。
如果启动服务后才修改 `.env`,需要重启 uvicorn 才能让后台自动同步线程读取新配置。页面按钮会在每次请求时重新读取 `.env`
也可以用 CLI 定向补跑,例如只补 2026-05-01 之后的内容:
```powershell
python -m app.cli analyze-pending --since 2026-05-01 --limit 20
```
## Twitter/X 采集前提
Twitter/X 采集复用本机已有 `social-media-scraper` skill通过 CDP Chrome profile 拦截结构化接口。首次使用需要先登录:
```powershell
python "$env:USERPROFILE\.codex\skills\social-media-scraper\scraper.py" --keep-browser-open https://x.com
```
在弹出的 Chrome 窗口登录 X.com 后,启用 `.env` 中的 `TWITTER_ENABLED=true`,再运行:
```powershell
python -m app.cli sync --platform twitter --full
```
如果未登录,系统会把本轮同步记为 partial 并在最近同步里显示错误,不会删除旧数据。
## 新社区平台扩展入口
后续接入其它社区平台时,优先复用现有三层数据模型:
- `raw_items`:原始内容和来源追溯信息
- `analysis_results`OpenRouter 模型分析结果
- `work_items`:制作人/处理人状态、备注和处理记录
每个新平台建议单独实现采集器,输出与 `app.models.RawItem` 兼容的数据,不要让 dashboard 直接依赖平台私有字段。
新增平台最少需要明确:
- 来源平台和内容类型
- 稳定去重主键
- 原始链接生成方式
- 作者标识和发布时间解析
- 首轮全量与后续增量策略
- 是否需要登录态、cookie、API key 或浏览器自动化
- 失败重试和限流策略
当前 Steam 采集器参考:
- `app/steam.py`
- `app/sync.py`
- `app/openrouter.py`