Skill: kelcey2023/zeelin-x-creator-briefing (version 0.1.0)

# ZeeLin AI Twitter Creator Briefing Skill **作者**: ZeeLin **版本**: 1.0.0 **创建时间**: 2026-03-27 --- ## Skill 描述 自动抓取指定AI博主Twitter内容，生成简报并发布到X的完整工作流。 ### 核心功能 1. **推文抓取**: 抓取指定AI博主近10天的推文内容 2. **智能整理**: 去重、分类、提炼核心观点 3. **简报生成**: 生成结构化的中英文简报 4. **自动发布**: 提炼英文推文并发布到X 5. **多平台适配**: 支持扩展到小红书、公众号 ### 适用场景 - AI领域信息聚合与过滤 - 博主内容追踪与整理 - 社交媒体自动化运营 - 行业趋势分析 --- ## 触发条件 当用户提到以下关键词时激活本skill： - "AI博主简报"、"推特博主简报"、"X博主简报" - "抓取推文"、"整理Twitter"、"生成简报" - "博主信息"、"AI大V内容" - "ZeeLin简报"、"AI简报" - 提到具体博主名称（如"吴恩达"、"Karpathy"等）+ "推文" --- ## 默认博主列表 ### 英文顶级AI博主 - @AndrewYNg - 吴恩达（AI教育家，DeepLearning.AI创始人） - @drfeifei - 李飞飞（斯坦福AI实验室主任） - @karpathy - Andrej Karpathy（OpenAI创始成员，AI教育者） - @ylecun - Yann LeCun（Meta AI首席科学家） ### 中文AI博主（精选） - @zarazhangrui - 张咋啦（AI前沿分享） - @dotey - 宝玉（AI工具与实践） - @op7418 - Orange（AI产品与资讯） - @ShunyuYao12 - 姚顺雨（AI研究与创业） - @frxiaobei - 凡人小北（AI Agent实战） - @FinanceYF5 - AI WILL（AI行业分析师） - @MANISH1027512 - 古一（AI摄影师，Midjourney专家） - @joshesye - 行者AI视频（北影节AIGC大奖得主） - @zstmfhy - AI奶爸（万象AI实验室） - @bozhou_ai - 泊舟（AI程序员，Vibe编码） - @CuiMao - 崔毛（AI开发者） - @RookieRicardoR - 耳朵（软件工程师，AI深度应用） - @wlzh - M.（AI玩家） - @cnyzgkc - 木马人（Claude实战） --- ## 配置文件 ### 博主配置 (config/creators.yaml) ```yaml # AI博主配置 creators: # 英文顶级博主 - handle: "AndrewYNg" name: "吴恩达" tags: ["AI教育", "深度学习", "行业趋势"] priority: 1 - handle: "drfeifei" name: "李飞飞" tags: ["计算机视觉", "AI研究", "学术界"] priority: 1 - handle: "karpathy" name: "Andrej Karpathy" tags: ["AI教育", "编程", "Vibe Coding"] priority: 1 - handle: "ylecun" name: "Yann LeCun" tags: ["Meta AI", "AI研究", "争议观点"] priority: 1 # 中文AI博主 - handle: "zarazhangrui" name: "张咋啦" tags: ["AI前沿", "工具分享", "实战"] priority: 2 - handle: "dotey" name: "宝玉" tags: ["AI工具", "实战经验", "产品思考"] priority: 2 - handle: "op7418" name: "Orange" tags: ["AI产品", "行业资讯", "OpenAI"] priority: 2 - handle: "ShunyuYao12" name: "姚顺雨" tags: ["AI研究", "创业", "前沿技术"] priority: 2 - handle: "frxiaobei" name: "凡人小北" tags: ["AI Agent", "工作流", "实战"] priority: 2 - handle: "FinanceYF5" name: "AI WILL" tags: ["行业分析", "增长顾问", "AI前沿"] priority: 2 - handle: "MANISH1027512" name: "古一" tags: ["AI摄影", "Midjourney", "AIGC"] priority: 3 - handle: "joshesye" name: "行者AI视频" tags: ["AI视频", "AIGC", "教程"] priority: 3 - handle: "zstmfhy" name: "AI奶爸" tags: ["AI漫画", "视频生成", "教程"] priority: 3 - handle: "bozhou_ai" name: "泊舟" tags: ["AI编程", "提示词", "工作流"] priority: 3 - handle: "CuiMao" name: "崔毛" tags: ["AI开发", "技术分享", "开发者"] priority: 3 - handle: "RookieRicardoR" name: "耳朵" tags: ["AI应用", "跨领域", "深度思考"] priority: 3 - handle: "wlzh" name: "M." tags: ["AI工具", "内容分享"] priority: 3 - handle: "cnyzgkc" name: "木马人" tags: ["Claude", "AI实战", "大厂视角"] priority: 3 # 抓取配置 fetch: days: 10 # 抓取最近10天 max_tweets_per_creator: 50 # 每个博主最多抓取50条 # 过滤配置 filter: min_likes: 5 # 最少点赞数 min_retweets: 2 # 最少转发数 exclude_keywords: ["广告", "推广", "AD"] # 排除关键词 # 发布配置 publish: platforms: ["twitter"] # 发布平台 max_tweet_length: 280 # 推文最大长度 include_hashtags: true # 包含话题标签 hashtags: ["#AI", "#OpenClaw", "#Agent"] # 默认话题标签 ``` --- ## 工作流程 ### 完整流程图 ``` 开始 ↓ [步骤1] 加载博主列表 ↓ [步骤2] 抓取推文内容 (近10天) ↓ [步骤3] 内容清洗与去重 ↓ [步骤4] 分类与评分 ↓ [步骤5] 生成简报 (Markdown) ↓ [步骤6] 提炼英文推文 ↓ [步骤7] 发布到X ↓ [步骤8] 保存归档 ↓ 结束 ``` ### 详细步骤 #### 步骤1: 加载博主列表 ```bash # 从配置文件加载博主列表 openclaw task load-creators \ --config config/creators.yaml \ --output creators-list.json ``` **输出格式**: ```json { "creators": [ { "handle": "karpathy", "name": "Andrej Karpathy", "tags": ["AI教育", "编程"], "priority": 1 } ], "total": 18 } ``` #### 步骤2: 抓取推文内容 ```bash # 使用agent-browser或Twitter API抓取推文 openclaw task fetch-tweets \ --input creators-list.json \ --days 10 \ --max-tweets 50 \ --output raw-tweets.json ``` **抓取策略**: - 优先抓取高互动推文（点赞>5，转发>2） - 排除广告和低质量内容 - 保留推文元数据（时间、URL、互动数据） #### 步骤3: 内容清洗与去重 ```bash # 清洗推文内容 openclaw task clean-tweets \ --input raw-tweets.json \ --exclude-keywords "广告,推广,AD" \ --deduplicate true \ --output cleaned-tweets.json ``` **清洗规则**: - 移除重复推文（相似度>90%） - 移除包含推广关键词的推文 - 规范化文本（去除多余空格、换行） - 提取关键信息（链接、提及、标签） #### 步骤4: 分类与评分 ```bash # AI智能分类与评分 openclaw task score-tweets \ --input cleaned-tweets.json \ --model claude-3-opus \ --output scored-tweets.json ``` **分类体系**: - **技术研究**: 论文、模型、算法 - **工具分享**: 新工具、教程、实战 - **行业资讯**: 公司动态、产品发布 - **观点思考**: 行业观点、趋势预测 - **实战案例**: 应用案例、经验分享 **评分标准** (0-100分): - 原创性 (30分) - 实用性 (30分) - 时效性 (20分) - 互动数据 (20分) #### 步骤5: 生成简报 ```bash # 生成结构化简报 openclaw task generate-briefing \ --input scored-tweets.json \ --template templates/briefing-template.md \ --output "reports/x-creator-briefing-$(date +%Y-%m-%d).md" ``` **简报结构**: ```markdown # X AI Creator Briefing - 2026-03-27 ## 📊 本期概览 - 监控博主：18位 - 抓取推文：245条 - 高信号内容：32条 - 核心主题：5个 --- ## 🔥 高信号主线 ### 1. Vibe Coding到真实部署的DevOps落差 **来源**: @karpathy **核心观点**: ... **推文链接**: https://x.com/karpathy/status/... --- ## 📌 按博主分类 ### @karpathy (Andrej Karpathy) **标签**: AI教育、编程、Vibe Coding #### ⭐ 高光推文 (3条) 1. **[Vibe Coding的本质]** - 发布时间: 2026-03-25 - 互动数据: 👍 2.3K | 🔄 856 | 💬 234 - 核心观点: Vibe coding不是偷懒，而是... --- ## 📚 资源推荐 ### 工具/产品 - [新工具] OpenAI新功能... - [教程] Karpathy的... ### 论文/文章 - [论文] ... - [文章] ... --- ## 📊 数据统计 | 博主 | 推文数 | 高信号 | 主要话题 | |------|--------|--------|----------| | @karpathy | 15 | 8 | Vibe Coding | | @zarazhangrui | 12 | 6 | AI工具 | ... --- ## ⚠️ 未抓到内容的博主 - @AndrewYNg (近10天无公开推文) - @drfeifei (近10天无公开推文) - @ShunyuYao12 (近10天无公开推文) --- *生成时间: 2026-03-27* *下次更新: 2026-03-28* ``` #### 步骤6: 提炼英文推文 ```bash # 提炼英文推文（280字符以内） openclaw task refine-tweet \ --input "reports/x-creator-briefing-2026-03-27.md" \ --max-length 280 \ --language en \ --output tweet-refined.md ``` **推文模板**: ``` 📊 AI Creator Briefing - [Date] Top 3 Updates: 1. @karpathy: Vibe coding → DevOps reality gap 2. @zarazhangrui: Product ideas from play + talking 3. @dotey/op7418: OpenAI/Anthropic product shifts 🔗 Full briefing: [链接] #AI #OpenClaw #Agent ``` #### 步骤7: 发布到X ```bash # 发布到X（使用zeelin-twitter-web-autopost skill） openclaw task tweet \ --file tweet-refined.md \ --platform twitter \ --include-hashtags true ``` #### 步骤8: 保存归档 ```bash # 归档简报 openclaw task archive \ --source "reports/x-creator-briefing-2026-03-27.md" \ --destination "archive/briefings/2026/03/" ``` --- ## 使用方法 ### 方法1: 一键执行（推荐） ```bash # 执行完整流程 openclaw skill run zeelin-x-creator-briefing \ --config config/creators.yaml \ --days 10 \ --publish true ``` ### 方法2: 分步执行 ```bash # 步骤1: 抓取推文 openclaw task fetch-tweets --config config/creators.yaml # 步骤2: 生成简报 openclaw task generate-briefing --input raw-tweets.json # 步骤3: 发布到X openclaw task tweet --file briefing.md --publish true ``` ### 方法3: 定时任务 ```bash # 每天早上8点执行 openclaw cron add "AI Creator Briefing" "0 8 * * * openclaw skill run zeelin-x-creator-briefing --config config/creators.yaml --publish true" ``` --- ## 高级功能 ### 1. 自定义博主列表 ```bash # 使用自定义博主列表 openclaw skill run zeelin-x-creator-briefing \ --creators karpathy,zarazhangrui,dotey \ --days 7 \ --publish true ``` ### 2. 中英文双语简报 ```bash # 生成中英文双语版本 openclaw skill run zeelin-x-creator-briefing \ --languages zh,en \ --output-format bilingual ``` ### 3. 多平台发布 ```bash # 发布到多个平台 openclaw skill run zeelin-x-creator-briefing \ --publish-to twitter,xiaohongshu,zhihu \ --platform-config config/platforms.yaml ``` ### 4. 自定义过滤规则 ```bash # 使用自定义过滤规则 openclaw skill run zeelin-x-creator-briefing \ --filter-min-likes 10 \ --filter-min-retweets 5 \ --filter-exclude "广告,推广,AD" ``` --- ## 扩展功能 ### 扩展1: 生成中文长文版本 ```bash # 压缩成媒体报道风格的中文长文 openclaw task generate-article \ --input "reports/x-creator-briefing-2026-03-27.md" \ --style media-report \ --output "articles/ai-creator-weekly-2026-03-27.md" ``` **文章结构**: - 标题：《AI博主本周都在关注什么？Karpathy谈Vibe Coding，张咋啦分享产品灵感》 - 导语：本周核心趋势总结 - 正文：按主题深度展开 - 结语：下周关注点预测 ### 扩展2: 小红书版本 ```bash # 生成小红书版本 openclaw task generate-xiaohongshu \ --input "reports/x-creator-briefing-2026-03-27.md" \ --style xiaohongshu \ --output "xiaohongshu/ai-creator-briefing-2026-03-27.md" ``` **小红书风格**: - 标题：🔥AI圈本周大事件！Karpathy又双叒叕发新观点了！ - 正文：emoji丰富，段落简短 - 标签：#AI #人工智能 #Karpathy #科技前沿 ### 扩展3: 公众号版本 ```bash # 生成公众号版本 openclaw task generate-wechat \ --input "reports/x-creator-briefing-2026-03-27.md" \ --style wechat-official \ --output "wechat/ai-creator-weekly-2026-03-27.md" ``` **公众号风格**: - 标题：《AI博主周报 | Karpathy谈Vibe Coding，张咋啦分享产品灵感来源》 - 导语：本周AI圈发生了什么？ - 正文：深度分析，配图建议 - 结语：互动提问 --- ## 定时任务配置 ### Cron配置示例 ```cron # 每天早上8点执行 0 8 * * * openclaw skill run zeelin-x-creator-briefing --config config/creators.yaml --publish true # 每周一早上9点生成周报 0 9 * * 1 openclaw skill run zeelin-x-creator-briefing --config config/creators.yaml --days 7 --report-type weekly # 每月1号生成月报 0 10 1 * * openclaw skill run zeelin-x-creator-briefing --config config/creators.yaml --days 30 --report-type monthly ``` --- ## 文件结构 ``` ~/.openclaw/workspace/skills/zeelin-x-creator-briefing/ ├── SKILL.md # 本文件 ├── config/ │ ├── creators.yaml # 博主配置 │ ├── platforms.yaml # 平台配置 │ └── filters.yaml # 过滤规则配置 ├── templates/ │ ├── briefing-template.md # 简报模板 │ ├── tweet-template.txt # 推文模板 │ ├── article-template.md # 文章模板 │ └── xiaohongshu-template.md # 小红书模板 ├── scripts/ │ ├── fetch-tweets.sh # 抓取脚本 │ ├── clean-tweets.sh # 清洗脚本 │ ├── score-tweets.sh # 评分脚本 │ ├── generate-briefing.sh # 生成简报脚本 │ └── publish.sh # 发布脚本 ├── reports/ │ └── x-creator-briefing-YYYY-MM-DD.md # 简报输出 ├── archive/ │ └── briefings/ │ └── YYYY/ │ └── MM/ └── logs/ └── zeelin-x-creator-briefing.log ``` --- ## 依赖技能 本skill依赖以下OpenClaw技能： 1. **agent-browser**: 浏览器自动化，用于抓取Twitter内容 2. **zeelin-twitter-web-autopost**: Twitter自动发布 3. **zeelin-writing**: 文章生成 4. **zeelin-xiaohongshu-autopost**: 小红书自动发布（可选） 5. **zeelin-zhihu-autopost**: 知乎自动发布（可选） --- ## 注意事项 ### 账号安全 - ⚠️ 避免频繁请求Twitter API，可能触发限流 - ⚠️ 控制抓取频率，建议每小时不超过100次请求 - ⚠️ 使用代理池分散请求，降低封号风险 - ⚠️ 发布推文时，避免短时间内大量操作 ### 内容质量 - ✅ 定期检查过滤规则，优化内容质量 - ✅ 人工审核高信号内容，确保准确性 - ✅ 定期更新博主列表，移除不活跃账号 - ✅ 关注用户反馈，调整评分标准 ### 性能优化 - 💡 使用增量抓取，只抓取新内容 - 💡 缓存博主信息，减少重复请求 - 💡 并行抓取多个博主，提升效率 - 💡 定期清理旧数据，节省存储空间 --- ## 更新日志 ### v1.0.0 (2026-03-27) **初始版本发布** **功能**: - ✅ 支持18位AI博主 - ✅ 抓取近10天推文 - ✅ 生成结构化简报 - ✅ 自动发布到X - ✅ 支持中英文双语 **已知问题**: - 部分博主可能抓取不到内容（隐私设置或未发推） - 推文链接可能失效（博主删除或设为私密） **下一步计划**: - [ ] 添加图片和视频抓取 - [ ] 支持Thread抓取 - [ ] 添加AI摘要生成 - [ ] 支持自定义评分权重 - [ ] 添加数据可视化 --- ## 技术支持 **问题反馈**: 在OpenClaw Discord社区提issue **功能建议**: 欢迎提出改进建议 **贡献代码**: 欢迎提交PR --- *SKILL.md 创建时间: 2026-03-27* *最后更新: 2026-03-27* *维护者: ZeeLin*

path: CRON-TASK.md
content: # AI Creator Briefing - Cron Task

## Task Configuration

**Task ID**: 7fcf083a-77d0-41ce-8863-8701027bcea9
**Name**: AI Creator Briefing
**Schedule**: 每天 8:00 (0 8 * * *)
**Status**: ✅ Enabled

## Next Run

**下次执行时间**: 2026-03-28 08:00:00 (GMT+8)

## Task Payload

```json
{
  "kind": "systemEvent",
  "text": "run-briefing"
}
```

## Setup Complete

定时任务已成功创建！明天早上8点将自动执行AI博主简报生成流程。

## What Happens at 8:00 AM

1. 抓取18位AI博主近10天推文
2. 清洗、去重、评分
3. 生成结构化简报
4. 提炼英文推文
5. 自动发布到X
6. 归档保存

## Manual Execution (Optional)

如果你想立即测试，可以手动执行：

```bash
cd /Users/youke/.openclaw/workspace/skills/zeelin-x-creator-briefing
./scripts/run-briefing.sh
```

## Monitor Task

查看任务状态：
```bash
openclaw cron status
```

查看任务历史：
```bash
openclaw cron runs
```

## Disable Task (If Needed)

如需禁用任务：
```bash
openclaw cron disable "AI Creator Briefing"
```

删除任务：
```bash
openclaw cron rm "AI Creator Briefing"
```

---

*任务创建时间: 2026-03-27 22:26*
*下次执行: 2026-03-28 08:00*


path: README.md
content: # ZeeLin AI Twitter Creator Briefing Skill

完整的AI博主信息简报生成与发布系统。

## 快速开始

### 一键执行完整流程

```bash
cd ~/.openclaw/workspace/skills/zeelin-x-creator-briefing
./scripts/run-briefing.sh
```

### 使用OpenClaw命令

```bash
# 执行完整流程
openclaw skill run zeelin-x-creator-briefing \
  --config config/creators.yaml \
  --days 10 \
  --publish true
```

## 功能特性

✅ **自动抓取**: 抓取18位AI博主近10天推文
✅ **智能过滤**: 去重、清洗、评分
✅ **结构化简报**: 生成Markdown格式简报
✅ **自动发布**: 提炼英文推文并发布到X
✅ **归档管理**: 按日期归档所有简报

## 博主列表

### 英文顶级博主
- @AndrewYNg - 吴恩达
- @drfeifei - 李飞飞
- @karpathy - Andrej Karpathy
- @ylecun - Yann LeCun

### 中文AI博主
- @zarazhangrui - 张咋啦
- @dotey - 宝玉
- @op7418 - Orange
- @ShunyuYao12 - 姚顺雨
- @frxiaobei - 凡人小北
- @FinanceYF5 - AI WILL
- @MANISH1027512 - 古一
- @joshesye - 行者AI视频
- @zstmfhy - AI奶爸
- @bozhou_ai - 泊舟
- @CuiMao - 崔毛
- @RookieRicardoR - 耳朵
- @wlzh - M.
- @cnyzgkc - 木马人

## 定时任务

### 每日简报（每天早上8点）

```bash
openclaw cron add "AI Creator Briefing" "0 8 * * * cd ~/.openclaw/workspace/skills/zeelin-x-creator-briefing && ./scripts/run-briefing.sh"
```

### 每周简报（每周一早上9点）

```bash
openclaw cron add "AI Creator Weekly" "0 9 * * 1 cd ~/.openclaw/workspace/skills/zeelin-x-creator-briefing && ./scripts/run-briefing.sh --days 7 --report-type weekly"
```

## 输出示例

### Markdown简报

```
# X AI Creator Briefing - 2026-03-27

## 🔥 高信号主线

### 1. Vibe Coding到真实部署的DevOps落差
**来源**: @karpathy
**核心观点**: ...
```

### 英文推文

```
📊 AI Creator Briefing - 2026-03-27

Top Updates:
1. @karpathy: Vibe coding → DevOps gap
2. @zarazhangrui: Product ideas from play
3. @dotey: OpenAI product shifts

🔗 Full briefing: [链接]

#AI #OpenClaw #Agent
```

## 高级功能

### 自定义博主列表

```bash
openclaw skill run zeelin-x-creator-briefing \
  --creators karpathy,zarazhangrui,dotey \
  --days 7
```

### 生成中文长文

```bash
openclaw task generate-article \
  --input reports/x-creator-briefing-2026-03-27.md \
  --style media-report
```

### 发布到多平台

```bash
openclaw skill run zeelin-x-creator-briefing \
  --publish-to twitter,xiaohongshu,zhihu
```

## 文件结构

```
zeelin-x-creator-briefing/
├── SKILL.md                    # 详细文档
├── README.md                   # 本文件
├── config/
│   └── creators.yaml           # 博主配置
├── templates/
│   ├── briefing-template.md    # 简报模板
│   └── tweet-template.txt      # 推文模板
├── scripts/
│   └── run-briefing.sh         # 执行脚本
├── reports/                    # 简报输出
└── archive/                    # 归档目录
```

## 注意事项

⚠️ **账号安全**: 控制抓取频率，避免触发限流
⚠️ **内容质量**: 定期检查过滤规则，优化质量
⚠️ **性能优化**: 使用增量抓取，缓存博主信息

## 依赖技能

- agent-browser: 浏览器自动化
- zeelin-twitter-web-autopost: Twitter发布
- zeelin-writing: 文章生成

## 技术支持

- 问题反馈: OpenClaw Discord社区
- 功能建议: 欢迎提交Issue
- 贡献代码: 欢迎提交PR

---

*版本: 1.0.0 | 创建时间: 2026-03-27*


path: config/creators.yaml
content: # AI博主配置文件
# ZeeLin X Creator Briefing Skill

# 英文顶级AI博主
english_creators:
  - handle: "AndrewYNg"
    name: "吴恩达"
    tags: ["AI教育", "深度学习", "行业趋势"]
    priority: 1
    active: true

  - handle: "drfeifei"
    name: "李飞飞"
    tags: ["计算机视觉", "AI研究", "学术界"]
    priority: 1
    active: true

  - handle: "karpathy"
    name: "Andrej Karpathy"
    tags: ["AI教育", "编程", "Vibe Coding"]
    priority: 1
    active: true

  - handle: "ylecun"
    name: "Yann LeCun"
    tags: ["Meta AI", "AI研究", "争议观点"]
    priority: 1
    active: true

# 中文AI博主
chinese_creators:
  - handle: "zarazhangrui"
    name: "张咋啦"
    tags: ["AI前沿", "工具分享", "实战"]
    priority: 2
    active: true

  - handle: "dotey"
    name: "宝玉"
    tags: ["AI工具", "实战经验", "产品思考"]
    priority: 2
    active: true

  - handle: "op7418"
    name: "Orange"
    tags: ["AI产品", "行业资讯", "OpenAI"]
    priority: 2
    active: true

  - handle: "oran_ge"
    name: "Orange(归藏)"
    tags: ["AI产品", "行业资讯", "Prompt", "工具"]
    priority: 2
    active: true

  - handle: "ShunyuYao12"
    name: "姚顺雨"
    tags: ["AI研究", "创业", "前沿技术"]
    priority: 2
    active: true

  - handle: "frxiaobei"
    name: "凡人小北"
    tags: ["AI Agent", "工作流", "实战"]
    priority: 2
    active: true

  - handle: "FinanceYF5"
    name: "AI WILL"
    tags: ["行业分析", "增长顾问", "AI前沿"]
    priority: 2
    active: true

  - handle: "MANISH1027512"
    name: "古一"
    tags: ["AI摄影", "Midjourney", "AIGC"]
    priority: 3
    active: true

  - handle: "joshesye"
    name: "行者AI视频"
    tags: ["AI视频", "AIGC", "教程"]
    priority: 3
    active: true

  - handle: "zstmfhy"
    name: "AI奶爸"
    tags: ["AI漫画", "视频生成", "教程"]
    priority: 3
    active: true

  - handle: "bozhou_ai"
    name: "泊舟"
    tags: ["AI编程", "提示词", "工作流"]
    priority: 3
    active: true

  - handle: "CuiMao"
    name: "崔毛"
    tags: ["AI开发", "技术分享", "开发者"]
    priority: 3
    active: true

  - handle: "RookieRicardoR"
    name: "耳朵"
    tags: ["AI应用", "跨领域", "深度思考"]
    priority: 3
    active: true

  - handle: "wlzh"
    name: "M."
    tags: ["AI工具", "内容分享"]
    priority: 3
    active: true

  - handle: "cnyzgkc"
    name: "木马人"
    tags: ["Claude", "AI实战", "大厂视角"]
    priority: 3
    active: true

# 抓取配置
fetch:
  days: 10  # 抓取最近多少天
  max_tweets_per_creator: 50  # 每个博主最多抓取多少条
  timeout: 30  # 请求超时时间（秒）
  retry: 3  # 失败重试次数

# 过滤配置
filter:
  min_likes: 5  # 最少点赞数
  min_retweets: 2  # 最少转发数
  min_replies: 1  # 最少回复数
  exclude_keywords:
    - "广告"
    - "推广"
    - "AD"
    - "ad"
    - "sponsor"
    - "赞助"
  require_media: false  # 是否要求包含媒体（图片/视频）

# 评分配置
scoring:
  weights:
    originality: 0.3  # 原创性权重
    practicality: 0.3  # 实用性权重
    timeliness: 0.2  # 时效性权重
    engagement: 0.2  # 互动数据权重

  # 互动数据标准化
  engagement:
    likes_weight: 1.0
    retweets_weight: 2.0
    replies_weight: 1.5
    views_weight: 0.001

# 发布配置
publish:
  platforms:
    - name: "twitter"
      enabled: true
      max_length: 280
      auto_post: true

    - name: "xiaohongshu"
      enabled: false
      max_length: 1000
      auto_post: false

    - name: "zhihu"
      enabled: false
      max_length: 0  # 无限制
      auto_post: false

  hashtags:
    - "#AI"
    - "#OpenClaw"
    - "#Agent"
    - "#MachineLearning"

  # 发布时间
  schedule:
    timezone: "Asia/Shanghai"
    default_time: "08:00"  # 默认发布时间

# 输出配置
output:
  briefing_dir: "reports"
  archive_dir: "archive/briefings"
  log_dir: "logs"

  # 文件命名格式
  filename_format: "x-creator-briefing-{date}.md"
  date_format: "%Y-%m-%d"

  # 简报模板
  template: "templates/briefing-template.md"

# 通知配置
notification:
  on_success: false
  on_failure: true
  on_empty: true  # 当没有抓取到内容时通知

  # 通知方式
  methods:
    - type: "console"
      enabled: true

    - type: "email"
      enabled: false
      address: ""

    - type: "webhook"
      enabled: false
      url: ""


path: scripts/run-briefing.sh
content: #!/bin/bash
# ZeeLin X Creator Briefing - 兼容版执行脚本（不依赖 openclaw task）

set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

python3 "$SCRIPT_DIR/run_briefing.py" --days 10 --publish


path: scripts/run_briefing.py
content: #!/usr/bin/env python3
"""
ZeeLin X Creator Briefing runner (no openclaw task dependency).
- Fetches creator profile pages through r.jina.ai mirror
- Extracts recent post-like lines
- Builds markdown briefing
- Drafts English tweet
- Optionally publishes via existing tweet.sh
"""
from __future__ import annotations

import argparse
import datetime as dt
import json
import os
import re
import subprocess
from pathlib import Path
from typing import List, Dict

import requests

WORKSPACE = Path("/Users/youke/.openclaw/workspace")
SKILL_DIR = WORKSPACE / "skills" / "zeelin-x-creator-briefing"
CONFIG_FILE = SKILL_DIR / "config" / "creators.yaml"
REPORT_DIR = WORKSPACE / "reports"
TWEET_SCRIPT = WORKSPACE / "skills" / "zeelin-twitter-web-autopost" / "scripts" / "tweet.sh"


def parse_creators_from_yaml(path: Path) -> List[Dict[str, str]]:
    text = path.read_text(encoding="utf-8")
    blocks = re.findall(r"- handle:\s*\"([^\"]+)\"\s*\n\s*name:\s*\"([^\"]+)\"", text)
    out = []
    seen = set()
    for handle, name in blocks:
        h = handle.strip()
        if h.lower() in seen:
            continue
        seen.add(h.lower())
        out.append({"handle": h, "name": name.strip()})
    return out


def fetch_profile_markdown(handle: str, timeout: int = 25) -> str:
    url = f"https://r.jina.ai/http://x.com/{handle}"
    r = requests.get(url, timeout=timeout)
    r.raise_for_status()
    return r.text


def extract_signal_lines(md: str, max_lines: int = 8) -> List[str]:
    lines = [ln.strip() for ln in md.splitlines()]
    cleaned = []
    bad_prefixes = (
        "Title:", "URL Source:", "Published Time:", "Markdown Content:",
        "Pinned", "Quote", "[![Image", "![Image"
    )
    for ln in lines:
        if not ln or len(ln) < 40 or len(ln) > 320:
            continue
        if ln.startswith(bad_prefixes):
            continue
        if re.match(r"^@?[A-Za-z0-9_\.-]+$", ln):
            continue
        if "http" in ln and len(ln) < 80:
            continue
        if ln in cleaned:
            continue
        cleaned.append(ln)
        if len(cleaned) >= max_lines:
            break
    return cleaned


def build_briefing(date_str: str, creators: List[Dict[str, str]], days: int) -> Dict[str, str]:
    sections = []
    top_items = []
    unavailable = []
    total_lines = 0

    for c in creators:
        h, name = c["handle"], c["name"]
        try:
            md = fetch_profile_markdown(h)
            lines = extract_signal_lines(md, max_lines=6)
            if not lines:
                unavailable.append((h, name, "页面可读但未提取到有效近况"))
                continue

            total_lines += len(lines)
            bullets = "\n".join([f"- {x}" for x in lines[:4]])
            section = (
                f"### @{h} ({name})\n"
                f"- 近{days}天可见高信号摘录（基于公开页面抓取）：\n"
                f"{bullets}\n"
            )
            sections.append(section)
            top_items.append({"handle": h, "name": name, "line": lines[0]})
        except Exception as e:
            unavailable.append((h, name, f"抓取失败: {e.__class__.__name__}"))

    top_items = top_items[:5]
    top_block = "\n".join(
        [f"{i+1}. @{it['handle']}：{it['line'][:120]}" for i, it in enumerate(top_items)]
    ) or "暂无可提炼高信号主线"

    unavailable_block = "\n".join(
        [f"- @{h} ({n}) - {r}" for h, n, r in unavailable[:12]]
    ) or "- 无"

    md = f"""# X AI Creator Briefing - {date_str}

> ZeeLin AI 推特博主信息简报（自动生成）

## 📊 本期概览
- 监控博主：{len(creators)} 位
- 成功抓取：{len(sections)} 位
- 提取信号：{total_lines} 条
- 抓取窗口：最近 {days} 天（按公开页面可见内容近似）

## 🔥 高信号主线
{top_block}

## 📌 按博主摘录
{os.linesep.join(sections) if sections else '暂无可用摘录'}

## ⚠️ 未抓到内容的博主
{unavailable_block}

## 方法说明
- 当前版本使用 `https://r.jina.ai/http://x.com/<handle>` 抓取公开页面文本镜像。
- 若账号隐私/限流/页面结构变化，可能导致当日无结果。
- 本简报优先“可稳定运行”，后续可接入更完整的数据源。
"""

    tweet = "📊 AI Creator Briefing ({date})\n\nTop updates:\n{items}\n\nFull briefing saved in workspace reports.\n\n#AI #OpenClaw #Agent".format(
        date=date_str,
        items="\n".join([f"{i+1}. @{it['handle']}: {it['line'][:90]}" for i, it in enumerate(top_items[:3])]) or "1. No strong public updates captured today"
    )

    return {"briefing_md": md, "tweet": tweet}


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--days", type=int, default=10)
    parser.add_argument("--publish", action="store_true")
    args = parser.parse_args()

    date_str = dt.datetime.now().strftime("%Y-%m-%d")
    creators = parse_creators_from_yaml(CONFIG_FILE)
    result = build_briefing(date_str, creators, args.days)

    REPORT_DIR.mkdir(parents=True, exist_ok=True)
    briefing_path = REPORT_DIR / f"x-creator-briefing-{date_str}.md"
    tweet_path = REPORT_DIR / f"x-creator-tweet-{date_str}.txt"
    run_meta = REPORT_DIR / f"x-creator-run-{date_str}.json"

    briefing_path.write_text(result["briefing_md"], encoding="utf-8")
    tweet_path.write_text(result["tweet"], encoding="utf-8")

    meta = {
        "date": date_str,
        "briefing": str(briefing_path),
        "tweetDraft": str(tweet_path),
        "published": False,
    }

    if args.publish:
        try:
            subprocess.run(["bash", str(TWEET_SCRIPT), result["tweet"], "https://x.com"], check=True)
            meta["published"] = True
        except Exception as e:
            meta["publishError"] = str(e)

    run_meta.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8")

    print(f"Briefing: {briefing_path}")
    print(f"Tweet draft: {tweet_path}")
    print(f"Meta: {run_meta}")
    print(f"Published: {meta.get('published', False)}")
    if meta.get("publishError"):
        print(f"Publish error: {meta['publishError']}")

    return 0


if __name__ == "__main__":
    raise SystemExit(main())


path: templates/briefing-template.md
content: # X AI Creator Briefing - {date}

> 📊 AI博主信息简报 | 自动生成 | ZeeLin

---

## 📊 本期概览

- **监控博主**: {total_creators}位
- **抓取推文**: {total_tweets}条
- **高信号内容**: {high_signal_count}条
- **核心主题**: {main_topics}个
- **生成时间**: {generation_time}

---

## 🔥 高信号主线

### {topic_number}. {topic_title}
**来源**: @{creator_handle} ({creator_name})
**发布时间**: {tweet_date}
**互动数据**: 👍 {likes} | 🔄 {retweets} | 💬 {replies}

**核心观点**:
{core_points}

**推文链接**: {tweet_url}

---

## 📌 按博主分类

### @{creator_handle} ({creator_name})
**标签**: {tags}

#### ⭐ 高光推文 ({count}条)

##### 1. **[{tweet_title}]**
- **发布时间**: {tweet_date}
- **互动数据**: 👍 {likes} | 🔄 {retweets} | 💬 {replies}
- **分类**: {category}
- **核心观点**: {summary}
- **推文链接**: {tweet_url}

---

## 🎯 主题分类

### 技术研究
- {item}
- {item}

### 工具分享
- {item}
- {item}

### 行业资讯
- {item}
- {item}

### 观点思考
- {item}
- {item}

### 实战案例
- {item}
- {item}

---

## 📚 资源推荐

### 工具/产品
- **[{name}]** - {description} | 来源: @{creator}

### 教程/文章
- **[{title}]** - {description} | 来源: @{creator}

### 论文/研究
- **[{title}]** - {description} | 来源: @{creator}

---

## 📊 数据统计

| 博主 | 推文数 | 高信号 | 主要话题 |
|------|--------|--------|----------|
| @{handle1} | {count} | {high_signal} | {topics} |
| @{handle2} | {count} | {high_signal} | {topics} |
| @{handle3} | {count} | {high_signal} | {topics} |

---

## ⚠️ 未抓到内容的博主

以下博主在{days}天内未抓到公开推文（可能原因：隐私设置、未发推、账号停用）:

- @{handle1} ({name}) - {reason}
- @{handle2} ({name}) - {reason}
- @{handle3} ({name}) - {reason}

---

## 🔗 相关链接

- **完整简报归档**: {archive_url}
- **博主列表**: {creators_list_url}
- **反馈建议**: {feedback_url}

---

## 📝 附注

- **抓取时间范围**: {date_range}
- **抓取窗口**: 最近{days}天
- **过滤规则**: 点赞>{min_likes}, 转发>{min_retweets}
- **评分标准**: 原创性(30%) + 实用性(30%) + 时效性(20%) + 互动(20%)

---

*生成时间: {generation_timestamp}*
*下次更新: {next_update_time}*
*Skill版本: {skill_version}*


path: templates/tweet-template.txt
content: 📊 AI Creator Briefing - {date}

Top Updates:
1. @{handle1}: {summary1}
2. @{handle2}: {summary2}
3. @{handle3}: {summary3}

🔗 Full briefing: {briefing_url}

#AI #OpenClaw #Agent


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