Skill: hyjaixiao/content-producer (version 1.0.0)

--- name: content-producer-v1 description: 多平台内容分发器 v1.0。一次输入，自动适配小红书/知乎/公众号/抖音四种平台格式，直接输出可发布内容。 version: 1.0.0 tags: [content, writing, social-media, copywriting, chinese, xiaohongshu, zhihu, wechat, douyin] author: AI Skill 商业生产 price: ¥29.9 --- # 📝 多平台内容分发器 v1.0 (付费版) ## 一句话卖点 > **写一篇内容，自动适配4个平台。不用再为每个平台重写一遍。** ## 核心能力 1. **多平台适配** — 小红书/知乎/公众号/抖音，一次输入四端输出 2. **平台原生格式** — 每个平台的内容规范、语气、结构自动匹配 3. **批量生成** — 一条主题，所有平台全覆盖 4. **历史管理** — 已生成内容自动存档，可随时查看和复用 5. **OpenAI驱动** — 默认用 gpt-4o-mini，便宜够用（可换其他兼容API） ## 使用方式 ### 生成指定平台 ```bash python3 content_producer.py --topic "2026年AI工具推荐" --platform xiaohongshu ``` ### 一键生成全部平台 ```bash python3 content_producer.py --topic "普通人如何用AI副业赚钱" --platform all ``` ### 带要点 ```bash python3 content_producer.py \ --topic "为什么程序员需要学AI" \ --points "AI不是取代,涨薪30%,现在入局最佳" \ --platform all ``` ### 查看历史 ```bash python3 content_producer.py --topic "" --history ``` ## 输出示例 ``` content_output/20260425/ ├── [小红书] AI工具推荐_20260425_143000.md ├── [知乎] AI工具推荐_20260425_143005.md ├── [公众号] AI工具推荐_20260425_143010.md └── [抖音] AI工具推荐_20260425_143015.md ``` ## 平台对照 | 平台 | 字数 | 风格 | 适合 | |------|------|------|------| | 小红书 | 300-800字 | 口语化、emoji | 种草/测评/攻略 | | 知乎 | 1000-2000字 | 专业、数据支撑 | 干货回答/分析 | | 公众号 | 1500-3000字 | 深度、故事感 | 深度文章/洞察 | | 抖音 | 200-500字 | 节奏快、钩子强 | 口播脚本/带货 | ## 环境要求 - Python 3.8+ - OpenAI API Key (或兼容API) - `pip install requests` ## 配置 ```bash export OPENAI_API_KEY="sk-xxx" export OPENAI_MODEL="gpt-4o-mini" # 可选，默认即可 export CONTENT_OUTPUT_DIR="./content_output" # 输出目录 ``` --- ## 上架物料 ### 卖点文案 (朋友圈) > **还在为每个平台重写一遍内容？** > > 写一篇小红书、改一篇知乎、再写一篇公众号… > 一个主题写4遍，太浪费时间了。 > > 📝 这个工具，一次输入，四个平台自动输出 > ✅ 小红书 → 种草笔记直接发 > ✅ 知乎 → 高赞回答格式 > ✅ 公众号 → 深度文章 > ✅ 抖音 → 口播脚本 > > 写一篇 = 发四个平台 > 29.9，永久使用，后续更新免费 > 👇 想矩阵输出的，上车 ### 关键词标签 `内容生成` `自媒体` `多平台分发` `小红书笔记` `知乎回答` `公众号文章` `抖音脚本` `AI写作` `内容矩阵` `运营工具` ### 适用场景 - 自媒体博主多平台分发 - 企业新媒体矩阵运营 - 知识IP内容批量生产 - 带货文案多平台适配 - 个人品牌内容沉淀

path: README.md
content: # 📝 多平台内容分发器 v1.0 (标准付费版)

> **写一篇内容，自动适配4个平台。小红书、知乎、公众号、抖音一键输出。**

## 📦 包含文件

```
content-producer-v1/
├── content_producer.py    # 主程序 (直接运行)
├── SKILL.md               # OpenClaw 配置
└── README.md              # 本文件
```

## 🚀 快速开始

### 1. 安装依赖

```bash
pip install requests
```

### 2. 设置 API Key

```bash
export OPENAI_API_KEY="sk-xxx"
# 可选: 用便宜模型省钱
export OPENAI_MODEL="gpt-4o-mini"
```

### 3. 一键生成所有平台

```bash
python3 content_producer.py \
  --topic "2026年普通人如何用AI赚钱" \
  --platform all
```

## 📖 详细用法

### 生成指定平台

```bash
# 只生成小红书
python3 content_producer.py --topic "AI工具推荐" --platform xiaohongshu

# 只生成知乎
python3 content_producer.py --topic "为什么AI会改变打工方式" --platform zhihu
```

### 带要点生成（推荐）

```bash
python3 content_producer.py \
  --topic "程序员为什么要学AI" \
  --points "AI不是取代工具,涨薪30%,现在入局最佳,10年后的基本技能" \
  --platform all
```

### 不同写作风格

```bash
--style professional   # 专业风（适合知乎、公众号）
--style casual         # 口语风（适合小红书、抖音）[默认]
--style educational    # 教育风
--style promotional    # 营销风
```

### 指定输出目录

```bash
--output ./my_content
```

### 查看历史内容

```bash
python3 content_producer.py --topic "" --history
```

## 🔧 环境变量

| 变量 | 默认值 | 说明 |
|------|--------|------|
| `OPENAI_API_KEY` | - | **必填** OpenAI API Key |
| `OPENAI_BASE` | `https://api.openai.com/v1` | API地址（可换代理/第三方兼容API） |
| `OPENAI_MODEL` | `gpt-4o-mini` | 模型（推荐 gpt-4o-mini，便宜够用） |
| `CONTENT_OUTPUT_DIR` | `./content_output` | 输出目录 |

## 📂 输出格式

```
content_output/YYYYMMDD/
├── [小红书]_主题_时间戳.md
├── [知乎]_主题_时间戳.md
├── [公众号]_主题_时间戳.md
└── [抖音]_主题_时间戳.md
```

每个文件头部有元数据：

```yaml
---
title: 主题
platform: xiaohongshu
generated: 2026-04-25 14:30
model: gpt-4o-mini
---
```

## 💰 成本估算

使用 gpt-4o-mini（每百万 token 约 ¥1.5）：
- 生成4个平台全部内容 ≈ ¥0.1-0.3
- 每天用10次 ≈ ¥1-3
- 对比请一个文案月薪5000 → 省大了

## 💡 常见问题

**Q: 支持其他平台吗？**
A: 目前支持小红书/知乎/公众号/抖音。后续会根据需求增加。

**Q: 内容质量怎么样？**
A: 质量取决于模型和提示词。gpt-4o-mini 性价比最高，gpt-4o 质量更好但贵一些。

**Q: 生成的内容可以直接发吗？**
A: 建议根据个人风格微调后再发布。AI生成内容作为初稿和框架非常高效。

**Q: 没有 OpenAI Key 怎么办？**
A: 可以使用任何兼容 OpenAI 格式的 API（DeepSeek、Claude、智谱等），改 `OPENAI_BASE` 地址即可。

---

**版本:** 1.0.0 | **类型:** 标准付费款 | **定价:** ¥29.9


path: content_producer.py
content: #!/usr/bin/env python3
"""
Content Producer v1.0 - 多平台内容分发器
标准付费版 ¥29.9

一次输入，自动适配小红书/知乎/公众号/抖音四种平台格式

用法:
  python3 content_producer.py --topic "你的主题" --platform xiaohongshu
  python3 content_producer.py --topic "AI工具" --platform all --output ./output

依赖:
  pip install requests pyyaml
  OpenAI API Key (或兼容API)
"""

import os
import sys
import json
import time
import argparse
import hashlib
from pathlib import Path
from datetime import datetime

VERSION = "1.0.0"

# ========== 配置 ==========

OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY", "")
OPENAI_BASE = os.environ.get("OPENAI_BASE", "https://api.openai.com/v1")
OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")  # 便宜且够用

OUTPUT_DIR = Path(os.environ.get("CONTENT_OUTPUT_DIR", "./content_output"))

# ========== 平台配置 ==========

PLATFORMS = {
    "xiaohongshu": {
        "name": "小红书",
        "word_count": "300-800字",
        "style": "口语化、有温度、emoji点缀",
        "features": "标题要吸引、正文短段落、结尾引导互动、加标签",
        "price_guide": "种草文/测评/攻略"
    },
    "zhihu": {
        "name": "知乎",
        "word_count": "1000-2000字",
        "style": "专业、逻辑清晰、有数据支撑",
        "features": "直接回答问题、分点论述、引用案例/数据、结尾呼吁关注",
        "price_guide": "干货回答/行业分析"
    },
    "gongzhonghao": {
        "name": "公众号",
        "word_count": "1500-3000字",
        "style": "深度、有故事感、结构清晰",
        "features": "开头讲故事或痛点、分章节、金句收尾、引导转发",
        "price_guide": "深度文章/行业洞察"
    },
    "douyin": {
        "name": "抖音",
        "word_count": "200-500字 (口播脚本)",
        "style": "口语化、节奏快、钩子强",
        "features": "前3秒抓人、分段口播、视觉建议、结尾引导互动",
        "price_guide": "口播脚本/带货文案"
    }
}

# ========== Prompt 模板 ==========

PROMPT_TEMPLATES = {
    "xiaohongshu": """你是一个资深小红书内容运营专家。请根据以下信息生成一篇小红书笔记。

【主题】{topic}
【要点】{points_text}
【风格】{style}
【字数】{word_count}

要求：
1. 标题要吸引眼球，带数字或关键词
2. 正文用短段落，2-3句一段
3. 适当使用emoji增强可读性
4. 结尾要有互动引导
5. 最后附5-10个相关标签

直接输出完整笔记内容，不要额外解释。""",

    "zhihu": """你是一个知乎高赞回答作者。请根据以下信息写一篇知乎回答。

【问题/主题】{topic}
【核心观点】{points_text}
【风格】{style}
【字数】{word_count}

要求：
1. 开头直接亮出核心观点，建立专业感
2. 逻辑结构清晰，分点论述
3. 引用数据或案例支撑（可以合理推断）
4. 语言专业但不晦涩
5. 结尾简短呼吁关注/点赞

直接输出完整回答，不要额外解释。""",

    "gongzhonghao": """你是一个公众号资深撰稿人。请根据以下信息写一篇公众号文章。

【主题】{topic}
【核心内容】{points_text}
【风格】{style}
【字数】{word_count}

要求：
1. 开头用故事或痛点引入，建立共鸣
2. 主体分3-4个章节，每章有小标题
3. 内容有深度，有洞察
4. 语言流畅，金句点缀
5. 结尾有升华和引导转发

直接输出完整文章（Markdown格式），不要额外解释。""",

    "douyin": """你是一个抖音短视频脚本作者。请根据以下信息写一条短视频脚本。

【主题】{topic}
【核心卖点】{points_text}
【风格】{style}
【字数】{word_count}

要求：
1. 前3秒必须抓人（痛点/悬念/反差）
2. 口播节奏紧凑，不建议长句
3. 标注视觉建议 [画面: xxx]
4. 结尾引导互动（点赞/评论/关注）

输出格式：
---
【标题】xxx
【时长】xx秒
【脚本】
[画面] xxx
[口播] xxx
...
【文案】xxx
【标签】#xxx #xxx
---

直接输出脚本，不要额外解释。"""
}

# ========== 工具函数 ==========

def log(msg):
    ts = time.strftime("%H:%M:%S")
    print(f"[{ts}] {msg}", flush=True)

def ensure_dir(d):
    Path(d).mkdir(parents=True, exist_ok=True)

# ========== 核心功能 ==========

def generate_content(topic, points, platform, style="casual"):
    """调用LLM生成指定平台内容"""
    import requests

    if not OPENAI_API_KEY:
        log("❌ 未设置 OPENAI_API_KEY")
        return None

    # 构建要点文本
    if points:
        points_text = "\n".join([f"- {p}" for p in points])
    else:
        points_text = "请根据主题自行展开"

    cfg = PLATFORMS.get(platform)
    if not cfg:
        log(f"❌ 未知平台: {platform}")
        return None

    prompt = PROMPT_TEMPLATES[platform].format(
        topic=topic,
        points_text=points_text,
        style=style,
        word_count=cfg["word_count"]
    )

    log(f"  调用 {OPENAI_MODEL} 生成 {cfg['name']} 内容...")

    try:
        resp = requests.post(
            f"{OPENAI_BASE}/chat/completions",
            headers={
                "Authorization": f"Bearer {OPENAI_API_KEY}",
                "Content-Type": "application/json"
            },
            json={
                "model": OPENAI_MODEL,
                "messages": [
                    {"role": "system", "content": "你是顶尖的中文自媒体内容创作者，精通各平台写作风格。"},
                    {"role": "user", "content": prompt}
                ],
                "temperature": 0.7,
                "max_tokens": 4000
            },
            timeout=120
        )
        data = resp.json()
        if "choices" in data and len(data["choices"]) > 0:
            content = data["choices"][0]["message"]["content"]
            log(f"  ✅ 生成完成 ({len(content)}字符)")
            return content
        else:
            err = data.get("error", {}).get("message", "未知错误")
            log(f"  ❌ API错误: {err}")
            return None
    except Exception as e:
        log(f"  ❌ 请求失败: {e}")
        return None


def save_content(topic, platform, content, output_dir):
    """保存生成的内容到文件"""
    if not content:
        return None

    plat_name = PLATFORMS[platform]["name"]
    safe_topic = topic.replace("/", "_").replace(" ", "_")[:30]
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"[{plat_name}]_{safe_topic}_{timestamp}.md"
    filepath = output_dir / filename

    # 添加元数据头
    header = f"""---
title: {topic}
platform: {platform}
generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}
model: {OPENAI_MODEL}
---

"""
    filepath.write_text(header + content, encoding="utf-8")
    log(f"  💾 已保存: {filepath}")
    return filepath


def generate_all_platforms(topic, points, style, output_dir):
    """一键生成所有平台"""
    results = {}
    for platform in PLATFORMS:
        log(f"\n--- {PLATFORMS[platform]['name']} ---")
        content = generate_content(topic, points, platform, style)
        if content:
            save_content(topic, platform, content, output_dir)
            results[platform] = content
        time.sleep(2)  # API限流保护
    return results


def list_history(output_dir):
    """列出所有已生成的内容"""
    files = sorted(output_dir.glob("*.md"))
    if not files:
        log("暂无历史记录")
        return

    log(f"\n📚 历史内容 ({len(files)}篇)")
    log("-" * 60)
    for f in files:
        size = f.stat().st_size
        modified = datetime.fromtimestamp(f.stat().st_mtime).strftime("%m-%d %H:%M")
        name = f.stem
        log(f"  {modified}  {size:>6}B  {name}")


# ========== 主流程 ==========

def main():
    parser = argparse.ArgumentParser(description=f"多平台内容分发器 v{VERSION}")
    parser.add_argument("--topic", required=True, help="内容主题")
    parser.add_argument("--points", help="要点列表，逗号分隔", default="")
    parser.add_argument("--platform", default="all",
                       choices=["all", "xiaohongshu", "zhihu", "gongzhonghao", "douyin"],
                       help="目标平台 (默认: all)")
    parser.add_argument("--style", default="casual",
                       choices=["professional", "casual", "educational", "promotional"],
                       help="写作风格")
    parser.add_argument("--output", default=None, help="输出目录")
    parser.add_argument("--history", action="store_true", help="查看历史记录")
    args = parser.parse_args()

    global OUTPUT_DIR
    if args.output:
        OUTPUT_DIR = Path(args.output)
    else:
        OUTPUT_DIR = OUTPUT_DIR / datetime.now().strftime("%Y%m%d")

    ensure_dir(OUTPUT_DIR)

    # 历史记录模式
    if args.history:
        list_history(OUTPUT_DIR)
        return

    log(f"{'='*50}")
    log(f"📝 多平台内容分发器 v{VERSION}")
    log(f"主题: {args.topic}")
    log(f"平台: {'全部' if args.platform == 'all' else PLATFORMS[args.platform]['name']}")
    log(f"风格: {args.style}")
    log(f"{'='*50}")

    points = [p.strip() for p in args.points.split(",") if p.strip()]

    if args.platform == "all":
        log(f"\n🎯 生成全部4个平台内容...")
        results = generate_all_platforms(args.topic, points, args.style, OUTPUT_DIR)
        success = sum(1 for v in results.values() if v)
        log(f"\n{'='*50}")
        log(f"✅ 完成！{success}/{len(PLATFORMS)} 个平台生成成功")
        log(f"📂 输出目录: {OUTPUT_DIR}")
    else:
        log(f"\n🎯 生成 {PLATFORMS[args.platform]['name']} 内容...")
        content = generate_content(args.topic, points, args.platform, args.style)
        if content:
            save_content(args.topic, args.platform, content, OUTPUT_DIR)
            log(f"\n{'='*50}")
            log(f"✅ 完成！")
            log(f"📂 输出目录: {OUTPUT_DIR}")
            print("\n" + content)

    log(f"\n💡 提示: 使用 --history 查看历史内容")


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        log("\n⚠️ 用户中断")
        sys.exit(1)
    except Exception as e:
        log(f"\n❌ 错误: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)