# Cron Job: gdcjgk-每日发布

**Job ID:** 533d92e64b59
**Run Time:** 2026-06-16 10:08:21
**Schedule:** 0 10 * * *

## Prompt

[IMPORTANT: The user has invoked the "gdcjgk-style-guide" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]

---
name: gdcjgk-style-guide
description: 广东春季高考信息网全媒体统一排版规范——官网文章、企微推送、公众号、社群、朋友圈、小红书的格式与语调标准。
category: creative
---

# 广东春季高考信息网 · 全媒体排版规范

## 品牌调性

| 维度 | 标准 |
|------|------|
| 受众 | 中职生/高中生（16-19岁）+ 家长（35-50岁） |
| 定位 | "春季高考路上最靠谱的信息伙伴" |
| 语调 | 专业但不死板、有用但不爹味、亲切但不油滑 |
| 视觉色 | 主色 #1a6fb5（蓝）、辅助 #e8f4fd（浅蓝底）、强调 #e67e22（橙） |
| 风格关键词 | 清晰、可信、温暖 |

## 六大渠道规范

### 1. 官网文章 (gdcjgk.net)

**HTML 结构模板：**
```html
<p class="lead">【一句话导语，说明这篇文章解决什么问题】</p>

<h2>小标题一</h2>
<p>正文段落。每段不超过 3-4 行，手机端阅读友好。</p>
<p>重点数据/关键信息用 <strong>加粗</strong> 突出。</p>

<h2>小标题二</h2>
<p>...</p>

<!-- 重要信息用卡片 -->
<div class="info-card">
  <strong>📌 关键提示</strong>
  <p>需要特别注意的内容放在这里。</p>
</div>

<h2>小标题三</h2>
<p>...</p>

<!-- 总结/CTA -->
<p class="cta">关注「广东春季高考信息网」，第一时间获取最新政策解读。</p>
<p class="source">信息来源：XXX</p>
```

**HTML 规范：**
- 标题仅用 `<h2>`（h1 由 CMS 模板自动生成）
- 段落用 `<p>`，不加 class（除非是 lead/cta/source）
- 列表用 `<ol>` / `<ul>` + `<li>`
- 强调用 `<strong>`，不用 `<b>`
- 链接用 `<a href="..." target="_blank">`
- 不使用内联 style（保持 CMS 模板风格统一）
- 不使用 `<br>` 换行，用独立段落

**文章长度：** 800-1200 字

**标题公式：**
- 数字型：`3个关键变化！2026年春考志愿填报新规解读`
- 问答型：`中职生能报本科吗？2026年3+证书报考全攻略`
- 时效型：`刚刚发布！省考试院公布2026年证书要求`

### 2. 企微群推送（审核通知）

**格式：Markdown | 限制：4096 bytes（约 1300 中文字）**

```markdown
## 🔔 新文章待审核
> 栏目：{channel_path}
> 状态：<font color="warning">草稿·待审核</font>

**{文章标题}**

{一句话摘要，30字以内}

📝 [后台编辑审核](https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/{id})

---
<font color="info">审核后在后台改状态为「发布」</font>
```

### 3. 企微群推送（日报/选题）

**格式：Markdown | 限制：4096 bytes**

```markdown
## 📋 {日期} 选题日报
> 今日抓取 **{N}** 篇，推荐 **{M}** 个选题

🔥 **选题一：{标题}**
- 切入角度：{一句话}
- 参考来源：[{来源名}]({链接})

🔥 **选题二：{标题}**
- 切入角度：{一句话}

💡 **可储备选题**
- {选题}：{为什么值得储备}

---
<font color="info">💬 回复选题编号获取详细文案</font>
```

### 4. 公众号长文

**格式：微信编辑器兼容 HTML**

结构：
1. **顶部引导关注**（一句 Slogan + 公众号名片）
2. **导语**（2-3 句，制造悬念/痛点）
3. **正文**（短段落 + 表情包/截图分隔）
4. **关键信息卡片**（微信自带编辑器样式）
5. **总结 + 互动引导**（评论区聊聊/转发给需要的同学）

标题规范：15-25 字，必含数字或情绪词
- ✅ `最后30天！春考冲刺这样做，提分20+`
- ❌ `关于春季高考备考的一些建议和方法`

### 5. 微信群话术

**格式：纯文本 | 限制：600 字以内**

结构：
1. 【分类标签】用【】括号
2. 一句话核心信息
3. 2-3 个要点（用 ①②③）
4. 链接 / 行动指引

```
【志愿填报】
省考试院发布2026志愿填报指南了！3个重点：
①《指南》已送达各校，报订了的同学找学校领
② 使用三步法：了解规则→查阅数据→做好记录
③ 没报订的6月13日起可线下购买

📎 详细解读：https://...
```

### 6. 朋友圈文案

**格式：纯文本 | 限制：200 字以内**

结构：Emoji 开头 + 1-2 句 + 链接/配图

```
📢 刚发布！省考试院2026志愿填报指南来了
三步搞懂怎么用，3+证书考生尤其要看第4点
👉 点击看全文
```

### 7. 小红书笔记

**格式：图文 | 正文限制：1000 字**

结构：
1. **封面图**：大字标题 + 关键数字
2. **标题**：含 Emoji + 数字 + 人群标签
3. **正文**：短句分行，Emoji 分段，关键词加 # 标签
4. **标签**：#春季高考 #3+证书 #中职生 #志愿填报

**⚠️ 关键原则：拒绝空泛，必须带数据。** 纯框架式/鸡汤式内容（如「选专业要看这三个维度」）在小红书没有传播力。必须落到具体：院校名、分数、排位、招生人数。用户反馈"太空了"就说明方向错了。

**当选题需要多角度切入时，提供 4 种视角供选择：**
- A. 算账流 — 收入/开支具体数字
- B. 避雷流 — 反向盘点慎选项
- C. 实操流 — 可直接收藏的清单（院校+专业+分数）
- D. 故事流 — 真实案例对比

用户偏好 C（实操清单流），内容最扎实。

```
📢 2026志愿填报指南来了‼️3步搞定

中职生/高中生都给我看过来👀

省考试院刚发的《志愿填报指南》
我用3句话给你讲清楚怎么用👇

1️⃣ 先看规则
平行志愿咋投档、体检有啥要求...

2️⃣ 再查数据
重点看"最低排位"不是分数‼️
排位比分数稳多了

3️⃣ 做好记录
把心仪学校整理成冲稳保三档

💡 3+证书考生额外注意第4点
（证书要求必须匹配！）

#春季高考 #3+证书 #广东春考 #志愿填报
```

## 通用规则

### 必加元素
- 信息来源标注（官网文末）
- 配图/缩略图（全渠道）
- CTA（引导下一步行动）

### 禁止事项
- ❌ 标题党（过度夸张、虚假承诺）
- ❌ 长段落（超过 4 行）
- ❌ 纯文字无排版（无小标题/无要点）
- ❌ 无来源的信息（必须标注出处）
- ❌ 过度使用 Emoji（官网文章不用，社交渠道适量）

### 数字规范
- 日期：`2026年6月12日` 或 `6月12日`
- 百分比：`85%` 不写 `百分之八十五`
- 人数：`1.2万人` 不写 `12000人`
- 分数：`320分` 保持数字一致性

### 考试相关术语
| 正确 | 错误/避免 |
|------|-----------|
| 3+证书考试 | 3+证书、3+ |
| 依学考录取 | 学考、依学考 |
| 春季高考 | 春考（正式文章不用缩写） |
| 高职高考 | 职高高考 |
| 中职生 | 中专生（两者有区别） |

## 参考文件
- `references/article-template.html` — 官网文章 HTML 模板（h2+h3+p+ul 结构）
- `references/wecom-templates.md` — 企微群推送模板（审核通知、日报格式）及 4096 bytes 限制说明

## 文章结构原则

### 骨架公式
```
导语（1段）→ 核心内容（2-3个h2段，每段1-2段+p）→ 针对人群提示 → CTA → 来源
```

### 标题公式
| 类型 | 公式 | 示例 |
|------|------|------|
| 数字型 | N个+关键词+变化/趋势+结果 | `高职月薪4882元！这3类专业"钱景"最好` |
| 问答型 | 疑问句+答案暗示 | `中职生能报本科吗？2026年3+证书报考全攻略` |
| 时效型 | 时间词+主体+动作+影响 | `刚刚发布！省考试院公布2026年证书要求` |

### 内容检查清单
- [ ] 导语一句话说明价值
- [ ] 每个 h2 下有实质内容（不只有装饰性标题）
- [ ] 关键数据均有出处
- [ ] 3+证书/中职生视角贯穿全文
- [ ] 文末有 CTA 引导关注
- [ ] 来源标注完整

[IMPORTANT: The user has invoked the "fastadmin-cms-publish" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]

---
name: fastadmin-cms-publish
description: Publish articles to a FastAdmin CMS (ThinkPHP) website via its built-in API.
triggers:
  - "发布文章到网站"
  - "自动发布内容到gdcjgk"
  - "网站内容发布"
  - "cms publish"
  - "fastadmin api"
---

# FastAdmin CMS Content Publishing

Publish articles programmatically to a FastAdmin-based CMS website (thinkphp 5 + CMS addon).

## API Endpoint

```
POST https://<domain>/addons/cms/api/index
Content-Type: application/x-www-form-urlencoded
```

### Required Parameters

| Param | Description |
|-------|-------------|
| `channel_id` | Numeric channel ID (leaf/final-level channel) |
| `title` | Article title |
| `content` | HTML body content |

### Optional Parameters

| Param | Description |
|-------|-------------|
| `description` | Article summary/excerpt |
| `user_id` | Author user ID (default: 1 = admin) |
| `image` | Thumbnail image path |
| `status` | `draft` = save as draft (not publicly visible), omit or `normal` = publish directly |

**Draft workflow:** When setting `status=draft`, the article is saved but returns 404 to visitors. After review, the admin changes status to `normal` in the CMS backend to publish.

### Response

```json
{"code":1,"msg":"新增成功","data":{"id":"3734","url":"https://..."}}
```

## Critical Pitfall: xss_clean strips channel_id

The default CMS `Api.php` applies `xss_clean` filter to all POST data:
```php
$data = $this->request->post('', null, 'trim,xss_clean');
```

This filter **strips numeric values** like `channel_id`, causing:
```
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'channel_id' cannot be null
```

### Fix

In `addons/cms/controller/Api.php`, change line 51:
```php
// Before
$data = $this->request->post('', null, 'trim,xss_clean');

// After
$data = $this->request->post('', null, 'trim');
```

Also ensure the `else` branch sets `$data['channel_id']`:
```php
} else {
    $channel_id = $this->request->request('channel_id');
    $channel = Channel::get($channel_id);
    if (!$channel || $channel['status'] != 'normal') {
        $this->error('栏目未找到');
    }
    $data['channel_id'] = $channel->id;  // ← required
}
```

### API Key Bypass

The CMS API requires an `apikey` configured in the admin panel. If the admin panel doesn't show the setting, comment out both auth checks in `_initialize()`:
```php
//if (!$config['apikey']) { ... }
// if ($config['apikey'] != $apikey) { ... }
```

## Channel ID Reference (gdcjgk.net)

Use leaf-level channel IDs for publishing:

| 分类 | 叶子栏目 | ID |
|------|---------|-----|
| 3+证书 | 报考相关 | 227 |
| 3+证书 | 填报相关 | 226 |
| 3+证书 | 技能证书 | 180 |
| 3+证书 | 报考须知 | 282 |
| 3+证书 | 填报须知 | 280 |
| 依学考 | 报考相关 | 294 |
| 依学考 | 填报相关 | 295 |
| 依学考 | 报考须知 | 237 |
| 依学考 | 填报须知 | 234 |
| 政策 | 广东政策 | 198 |
| 政策 | 政策解读 | 331 |
| 政策 | 省厅消息 | 301 |
| 升学 | 现代学徒制 | 262 |
| 升学 | 自主招生 | 263 |
| 升学 | 三二分段 | 193 |
| 升学 | 五年一贯制 | 279 |
| 辅导 | 辅导培训 | 176 |

### Finding Channels from Database

```bash
# Extract leaf channels from SQL dump
grep -oP "VALUES \(\d+, '\w+', \d+, 0, '\K[^']+" dump.sql | sort -u

# Build full tree
python3 -c "
import re
with open('dump.sql', 'r') as f: content = f.read()
records = re.findall(r'INSERT INTO \`fa_cms_channel\` VALUES \((\d+).*?(\d+), \d+, \'([^\']+)', content)
# ...build tree...
"
```

## CURL Test

```bash
# Publish directly (public)
curl -s -X POST "https://gdcjgk.net/addons/cms/api/index" \
  -d "channel_id=227&title=测试标题&content=<p>测试正文</p>&description=摘要"

# Save as draft (not public, needs admin review)
curl -s -X POST "https://gdcjgk.net/addons/cms/api/index" \
  -d "channel_id=227&title=测试标题&content=<p>测试正文</p>&description=摘要&status=draft"

# Draft response includes article ID for review link
# Review URL: https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/{id}
```

The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]

你是广东春季高考信息网(gdcjgk.net)的内容编辑。基于 we-mp-rss 数据库最新文章，自动完成每日文章发布。

## 执行步骤

### 1. 提取选题
复制数据库: cp ~/project/we-mp-rss-data/db.db /tmp/db.db
查询最近36小时文章:
sqlite3 /tmp/db.db "SELECT a.id, a.title, a.url, a.publish_time, f.mp_name as source, datetime(a.publish_time, 'unixepoch', 'localtime') as ptime_str FROM articles a JOIN feeds f ON a.mp_id=f.id WHERE a.publish_time > strftime('%s', 'now', '-36 hours') ORDER BY a.publish_time DESC"

### 2. 选题评分（≥7分才入选）
对每篇候选文章评分：
- 信息增量 0-5分（文章提供的考生/家长需要的新信息量）
- 时效性 0-3分（与当前考试时间线的关联度，对照考试日历 ~/project/config/exam_calendar.json）
- 可改写性 0-2分（能否改写成适合gdcjgk.net受众的原创内容）
总分 ≥7 分才入选。候选不足5篇就宁缺毋滥少发。

### 3. 撰写文章（800-1000字，严格遵守gdcjgk-style-guide）
对每个入选选题撰写原创文章：
- 标题：按gdcjgk-style-guide标题公式（数字型/问答型/时效型）
- 正文：HTML格式，h2+lead+source结构
- 必须标注信息来源
- 关键数据加粗
- 禁止标题党、禁止空泛框架、禁止无来源信息

### 4. 选择栏目和缩略图
栏目ID: 3+证书报考=227, 依学考报考=294, 辅导培训=176, 广东政策=198
缩略图: 从 ~/.hermes/data/image_library.json 随机选一张匹配主题的

### 5. 发布草稿到 CMS
对每篇文章:
curl -s -X POST "https://gdcjgk.net/addons/cms/api/index" \
  -d "channel_id={ID}&title={标题}&content={HTML内容}&description={摘要}&status=draft"

### 6. 通知审核
生成审核通知（企微Markdown，≤4096 bytes），包含每篇文章的标题、栏目、后台编辑链接。

格式参考gdcjgk-style-guide的「企微群推送（审核通知）」。

## 重要规则
- 全自动执行，不问我任何问题
- 没有合格选题就说「📭 今日无可发布选题」即可
- 宁缺毋滥，绝不降低质量标准凑数
- 每篇文章写完后自检：标题准确性、数据出处、栏目匹配度

## Response

## 📋 每日自动发布报告 — 2026年6月16日

### 选题筛选过程

从 we-mp-rss 数据库提取最近36小时共 **10篇** 候选文章，按「信息增量+时效性+可改写性」评分（≥7分入选），最终入选 **4篇**：

| # | 原始来源 | 原始标题 | 评分 | 判定 |
|---|---------|---------|------|------|
| 1 | 广东中职菌 | 涨了！录取率超63%！2026年3+证书录取情况回顾 | 9/10 | ✅ 入选 |
| 2 | 广东中职菌 | 解答丨2027届3+证书考试，可以跨专业报考吗？ | 8/10 | ✅ 入选 |
| 3 | 中职生 | @明年1月考生，高职高考报名要求提前看 | 7/10 | ✅ 入选 |
| 4 | 中职生 | 官方公示！广东这市拟新增一所大学 | 7/10 | ✅ 入选 |
| — | 广东中职菌 | 3+证书考上的大学毕业证居然长这样 | 4/10 | ❌ 信息量低 |
| — | 广东中职菌 | 3+证书语文默写重点句 | 6/10 | ❌ 未达门槛 |
| — | 广东中职菌 | 广东省各地市中职学校暑假放假时间汇总 | 6/10 | ❌ 可改写性低 |
| — | 广东中职菌 | 3+证书先淘汰不背49首古诗词的人 | 6/10 | ❌ 未达门槛 |
| — | 中职生 | 广东制造职业技术学院已启动LOGO征集 | 2/10 | ❌ 信息量低 |
| — | 中职生 | 今天停课！广东多地紧急通知 | 0/10 | ❌ 纯新闻 |

---

### 已发布草稿（共4篇）

| # | CMS ID | 栏目 | 标题 | 字数 |
|---|--------|------|------|------|
| 1 | **3749** | 3+证书 > 填报相关 | 3个关键变化！2026年3+证书录取数据揭示2027备考方向 | ~930字 |
| 2 | **3750** | 3+证书 > 报考须知 | 中职生能跨专业报考吗？2027年3+证书报考规则一次讲清 | ~800字 |
| 3 | **3751** | 3+证书 > 报考相关 | 2027届3+证书报名倒计时！时间、条件、流程一文看懂 | ~830字 |
| 4 | **3752** | 政策 > 广东政策 | 清远职教城将迎第12所高校！广州现代信息工程职院新校区公示 | ~820字 |

---

### 审核通知（企微 Markdown，可直接复制推送）

---

## 🔔 新文章待审核（自动生成·6月16日）
> 本次共发布 **4** 篇草稿，待审核后发布

---
### 📄 选题1
> 栏目：3+证书 > 填报相关
> 状态：<font color="warning">草稿·待审核</font>

**3个关键变化！2026年3+证书录取数据揭示2027备考方向**

2026录取率超63%，分数线全面上涨，本科招生扩至15所。

📝 [后台编辑审核](https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/3749)
---
### 📄 选题2
> 栏目：3+证书 > 报考须知
> 状态：<font color="warning">草稿·待审核</font>

**中职生能跨专业报考吗？2027年3+证书报考规则一次讲清**

本科有专业限制，专科凭证书可跨考，证书比专业更关键。

📝 [后台编辑审核](https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/3750)
---
### 📄 选题3
> 栏目：3+证书 > 报考相关
> 状态：<font color="warning">草稿·待审核</font>

**2027届3+证书报名倒计时！时间、条件、流程一文看懂**

预计11月报名、明年1月考试，报名材料现在就该准备。

📝 [后台编辑审核](https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/3751)
---
### 📄 选题4
> 栏目：政策 > 广东政策
> 状态：<font color="warning">草稿·待审核</font>

**清远职教城将迎第12所高校！广州现代信息工程职院新校区公示**

新校区超31万㎡，清远职教城持续扩容，3+证书考生利好。

📝 [后台编辑审核](https://gdcjgk.net/rCIwxpQnNh.php/cms/archives/edit/ids/3752)

---
<font color="info">💡 审核后在后台将状态改为「发布」即可。本次选题来自广东中职菌、中职生公众号6月15日推文。</font>

---

### ⚠️ 注意
- 测试期间产生了一篇测试文章（ID: **3748**，标题"test"），请手动在 CMS 后台删除。
- 所有文章已保存为**草稿**状态，访客端 404 不可见，审核通过后改为「发布」即可公开。
