# 宇之然内容管理平台

> 自动化内容生产 + Web 管理界面

一个可持续、可管理的内容创业系统，实现从选题采集到多平台发布的全流程自动化。

---

## 🎯 核心能力

- ✅ **全自动流水线**：采集 → 创作 → 合规 → 发布准备（每日凌晨运行）
- ✅ **Web 管理界面**：一键控制、实时监控、可视化发布包管理
- ✅ **降级策略**：外部源失效时自动切换本地案例库，保证稳定产出
- ✅ **多平台支持**：知乎、小红书、微信公众号（HTML 发布包）
- ✅ **风控设计**：半自动发布（生成 HTML + 人工复制），避免平台封号

---

## 📦 项目结构（简洁版）

```
yu-zhi-ran/
├── platform/           # Web 管理平台（FastAPI + Vue 3）
│   ├── backend/        #   API 服务
│   └── frontend/       #   管理界面
├── automation/         # 自动化数据 + 日志
│   ├── data/           #   JSON 选题库、草稿、发布包
│   ├── logs/           #   运行日志
│   └── scripts/ → ../scripts/   #   软链到 scripts/
├── scripts/            # CLI 脚本（collector, creator, optimizer...）
├── content/            # 已发布内容存储
├── config/             # 配置文件（RSS源、机器人）
├── start-platform.sh   # 快速启动管理平台
└── README_NEW.md       # 本文档
```

---

## 🚀 快速开始

### 1️⃣ 启动管理平台（推荐）

```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
./start-platform.sh 8001
```

访问：
- 界面：http://localhost:8001/
- API 文档：http://localhost:8001/docs

### 2️⃣ 测试自动化流水线

```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
python test_full_pipeline.py --topic-id A01
```

预期输出：
- 生成 `automation/data/drafts/2026-04-19/A01_*.md`
- 生成 `automation/data/releases/2026-04-19/*/A01_*.html`
- 合规自动通过

### 3️⃣ 查看当前状态

```bash
# 选题库统计
python -c "import json; d=json.load(open('automation/data/sustainability_topics.json')); print(f'总{len(d)} 待处理:{sum(1 for t in d if t.get(\"status\")==\"待处理\")} 待发布:{sum(1 for t in d if t.get(\"status\")==\"待发布\")}')"

# 日志（今日）
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
```

---

## 🔄 系统架构

```
定时任务 (cron)
    │
    ├─▶ 05:00 collector.py  → automation/data/sustainability_topics.json（选题）
    ├─▶ 05:30 creator.py    → drafts/ + releases/（HTML）
    ├─▶ 05:45 optimizer.py  → 合规报告
    └─▶ 06:00 publisher.py  → content/published/（发布包）

Web 平台（可选控制）
    │
    ├─▶ 一键触发创作/优化
    ├─▶ 查看选题列表和详情
    ├─▶ 生成发布包、预览HTML、复制
    └─▶ 查看实时流水线状态
```

---

## 📊 当前运行状态（2026-04-19）

| 指标 | 数值 |
|------|------|
| 总选题数 | 22 |
| 待处理 | 20 |
| 待发布 | 2 (A01, A02) |
| 自动运行 | ✅ 正常（05:00-06:00） |
| 最新运行 | A02（05:30 完成，8秒） |
| 合规通过率 | 100%（3/3） |

待发布内容已就绪，可手动发布到知乎/小红书。

---

## 🎮 主要操作指南

### 触发创作任务

**Web 界面**：平台 → "运行创作任务" 按钮

**或命令行**：
```bash
python scripts/creator.py --topic-id A03
```

### 生成发布包

**Web 界面**：选题 → 发布 → "重新生成"

**或命令行**：
```bash
python scripts/publisher.py --topic-id A01
```

发布包位置：
```
content/published/A01/手动发布/
├── 知乎/文章.html
└── 小红书/文章.html
```

### 标记为已发布

在 Web 界面"发布管理"中填写各平台链接 → "确认发布"

这会更新选题状态为"已发布"并保存链接。

---

## ⚙️ 配置

### 数据源（automation/config/sources.yaml）

```yaml
sources:
  - name: "新华网-环保频道"
    type: "rss"
    url: "http://..."

  - name: "本地案例库"
    type: "local_markdown"
    path: "automation/data/cases.md"
```

### 环境变量（platform/.env，可选）

```bash
PROJECT_ROOT=/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
LOG_LEVEL=INFO
```

---

## 📝 开发调试

```bash
# 1. 检查环境
cd platform
python check.py

# 2. 启动服务（开发模式）
./run.sh 8000

# 3. 查看 API 日志（新终端）
tail -f automation/logs/creator_$(date +%Y-%m-%d).log

# 4. 重置数据库（如需）
rm -f data/yzr.db
cd platform/backend
python -c "from app.database import init_db; init_db(); from app.initial_data import import_topics_from_json; import_topics_from_json()"
```

---

## 🚧 注意事项

### 路径规范

所有 `platform/backend/app/**/*.py` 必须使用相对路径计算 `PROJECT_ROOT`：

- `app/database.py`, `initial_data.py`: `Path(__file__).resolve().parents[3]`
- `app/api/*.py`, `app/core/*.py`: `Path(__file__).resolve().parents[4]`

禁止使用硬编码绝对路径！

### 软链接

```
platform/data → ../data
platform/logs → ../logs
automation/scripts → ../scripts/
```

这些链接确保平台和自动化模块共享数据。

### 数据流向

**唯一真理源**：`automation/data/sustainability_topics.json`

- 所有状态更新（待处理 → 待发布 → 已发布）都应写入此 JSON
- `platform` 通过 `sync.py` 同步到 SQLite 供前端快速查询
- 不要直接修改数据库而不更新 JSON！

---

## 📚 详细文档

- `YUZHIRAN_PLATFORM.md` - 完整项目文档（架构、API、扩展）
- `platform/PORTFOLIO.md` - 平台架构详解
- `platform/README.md` - 平台使用说明
- `PROJECT_STRUCTURE.md` - 目录结构说明

---

## 🐛 故障排查

| 问题 | 检查点 | 命令 |
|------|--------|------|
| Web 界面无数据 | JSON 是否同步？ | `curl http://localhost:8000/api/system/status` |
| 创作失败 | creator 日志 | `tail -n 50 automation/logs/creator_*.log` |
| 发布包缺失 | releases 目录 | `ls automation/data/releases/$(date +%Y-%m-%d)/` |
| 端口占用 | 8000 被谁用？ | `lsof -i:8000` |

---

## 🎉 现状总结

昨天（4月18日）完成：
- 数据源切换（新华网+人民网）
- 降级策略（本地案例库保底）
- 锁机制（2小时超时）
- publisher 发布包系统
- 前端管理界面

今天（4月19日）：
- 统一项目结构，整合 platform + automation
- 修正所有路径计算
- 添加软链接统一数据目录
- 创建启动脚本和文档

**状态**：✅ 系统稳定运行，每日自动产出内容，Web 平台就绪。

---

**维护**: AI 助手小然
**更新**: 2026-04-19
