# industry-weekly
**Repository Path**: haoyk-skill/industry-weekly
## Basic Information
- **Project Name**: industry-weekly
- **Description**: 行业发展周报,小望
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-25
- **Last Updated**: 2026-06-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# industry-weekly — 行业动态日报/周报生成 skill
> 按"检索方向 + 时间窗口",把一段时间内的公开行业资讯压缩成一份按 Word 模板填充的、可汇报的 .docx + .pdf。
> 当前内置模板:**行业动态日报 — 全球轨道交通**。
定位:面向领导汇报的行业动态报告生成器。每条事实有出处、有时间、有判断,**真实优先、宁少勿水**。
两条硬性要求(红线):
1. **来源必须能在浏览器真正打开看到正文**,不只看 HTTP 200(剔除纯 JS 聚合站、移动版空壳页)。
2. **配图优先真实新闻图**(从正文抓、非 og:image logo;他媒水印图禁用),AI 生图只作少数兜底。
## 安装
```bash
git clone https://gitee.com/haoyk-skill/industry-weekly.git
cd industry-weekly
./install.sh # 交互选 Claude Code / OpenClaw,默认软链接到当前项目
./install.sh --global # 装到 ~/.claude/skills(全局)
./install.sh --copy # 复制安装(跨设备/打包场景)
```
更新:`cd industry-weekly && git pull`(软链接方式无需重装)
## 触发方式
在 Claude Code 里直接喊:
- "出一期行业动态日报,方向是全球轨道交通"
- "这周城市轨道交通运营的动态梳理一下"
- "/industry-weekly"(显式调起)
## 工作链路
```
澄清需求 → 上网检索 → 去重核实 → 可打开性&来源体检 → 抓真实配图 → 填模板 → 转 PDF → 自检交付
```
每条新闻 = 标题(`<国家>|<事件>`) + 配图(真实新闻图优先,不压缩) + 正文(分段)。
详细规范见 [skills/industry-weekly/references/template-spec.md](skills/industry-weekly/references/template-spec.md)。
## 目录结构
```
industry-weekly/
├── install.sh ← 安装脚本(扫 skills/* 装到目标智能体)
├── README.md
└── skills/
└── industry-weekly/
├── SKILL.md ← 定位 + 工作流 + 两条硬性要求
├── references/
│ ├── template-spec.md ← 模板格式宪法(填模板前必读)
│ └── output-layout.md ← 产物目录/版本号规约
├── templates/
│ └── 行业动态日报_全球轨道交通动态_20260519-模版.docx
└── scripts/
├── fetch_image.py ← 从正文抓真实图(过滤 logo/水印/二维码),不压缩
├── gen_image_ai.py ← AI 配图兜底(DashScope/OpenAI 兼容,可换后端)
├── fill_template.py ← 按模板填 docx
└── docx_to_pdf.py ← LibreOffice 转 PDF
```
## 依赖
Python:
```bash
pip install python-docx requests beautifulsoup4 pillow
```
PDF 转换(必装其一):
- macOS: `brew install --cask libreoffice`
- Ubuntu: `sudo apt install -y libreoffice`
## 输入数据 schema(items.json)
```json
{
"header": {
"title": "行业动态日报",
"department": "行业发展部",
"issue": "2026年第22期",
"date": "2026年5月26日"
},
"items": [
{
"title": "中国|杭州地铁12号线自动化列车亮相,GoA4全自动运行",
"image": "./img/news-1.jpg",
"body": [
"5月19日,XX网报道,...(贴原文事实,不做亮点/影响评述,总结不润色)",
"...(关键数据/具体措施,客观陈述)",
"来源:XX网,链接:https://..."
]
}
]
}
```
字段说明:
- `header.title` / `department` 通常沿用模板默认值,无需改
- `header.issue` / `date` 每期递增,**date 决定输出文件名里的日期**
- `items[].image` **必填**,本地路径,先用 `fetch_image.py` 抓回
- `items[].body` 是字符串列表,每项是一段;脚本会在单元格内用 `` 换行
## 命令行示例
抓配图:
```bash
# 1) 已知图片直链
python skills/industry-weekly/scripts/fetch_image.py \
--image-url https://www.railwaygazette.com/.../hangzhou-line-12.jpg \
--out ./img/news-1.jpg
# 2) 只有文章页 URL,自动找主图
python skills/industry-weekly/scripts/fetch_image.py \
--article-url https://www.railwaygazette.com/.../article \
--out ./img/news-1.jpg
```
填模板:
```bash
python skills/industry-weekly/scripts/fill_template.py \
--template skills/industry-weekly/templates/行业动态日报_全球轨道交通动态_20260519-模版.docx \
--data ./items.json \
--out ./行业动态日报_全球轨道交通_20260526.docx
```
转 PDF:
```bash
python skills/industry-weekly/scripts/docx_to_pdf.py \
./行业动态日报_全球轨道交通_20260526.docx
# → 同目录产出 行业动态日报_全球轨道交通_20260526.pdf
```
## AI 兜底配图
真实图抓不到时(403 防盗链 / 文章无图 / 仅 logo / 仅他媒水印图)再用 AI 生图兜底:
```bash
python skills/industry-weekly/scripts/gen_image_ai.py \
--out ./img/news-1.jpg \
--prompt "现代地铁车厢内部,蓝色座椅,自然光,写实摄影风格,无任何文字"
```
- 默认走阿里百炼 DashScope(`DASHSCOPE_API_KEY`,默认模型 `wan2.2-t2i-flash`);
也支持 OpenAI 兼容端点(`OPENAI_API_KEY` + `OPENAI_BASE_URL`),`--provider` 切换。
- 密钥从环境变量或就近的 `.env` 自动发现(支持 `~/.baoyu-skills/.env`)。
- 提示词模板:`<新闻主体>,<场景>,写实摄影风格,无任何文字`;输出 ≥ 1280×720。
## 文件命名约定
- 日报: `行业动态日报_<主题>_.{docx,pdf}`
- 周报: `行业动态周报_<主题>_<起>-<止>.{docx,pdf}`
主题用短名:`全球轨道交通` / `国内城轨装备` / `信号系统` 等。
## 跨模型 / Agent 适配
本 skill 不绑定特定对话模型,Claude / DeepSeek V4 flash / Qwen 等任何"能读 markdown 指令 + 跑 Python + 联网"的 agent 都能驱动:
- **指令层**(SKILL.md / references)是纯 markdown,文中的 `AskUserQuestion` / `WebSearch` / `WebFetch` 仅是 Claude Code 工具名示例,换 agent 时对应到其"提问 / 检索 / 抓网页"能力即可,没有就用 `curl` + 对话追问兜底。
- **执行层**(4 个脚本)是纯 Python + 命令行,不依赖任何对话模型 API,直接 `python xxx.py` 调用。
- **AI 配图后端可换**:走外部文生图 API(DashScope / OpenAI 兼容),与驱动 skill 的模型无关;DeepSeek 等无生图能力的模型只负责按流程编排,生图交给配置好的图像 API。