微信公众号文章编写技能


技能包下载地址:

https://gitee.com/cao15110/jineng

有问题欢迎留言交流!👇

微信公众号文章编写技能

本文根据下面的技能改造而来。 https://skillhub.cn/skills/md2wechat-skill

原技能技能可以:

  • 写文章到公众号草稿
  • 把markdown转为符合微信要求的html公众号文章

缺点:

  • 不能自动生成符合标题的封面配图
  • markdown转换后的文章样式单一,不好看

我让AI完善了技能:

  • 增加了自动AI配图
  • 多加了2个样式,但也不多

于是,我又让AI把人言兑.md |Markdown 转微信公众号文章排版神器下载下来进行了分析,让其改造为本项目能用的。


name: 微信公众号文章发布工作流 description: 微信公众号文章发布工作流,实现从生成封面图片到上传素材库再到创建草稿的完整流程。使用场景包括:1. 生成文章封面图片 2. 上传图片到微信公众号素材库 3. 创建微信公众号草稿 4. 完整的文章发布工作流

微信公众号文章发布工作流

技能介绍

本技能提供了完整的微信公众号文章发布工作流,包括生成封面图片、上传素材库和创建草稿三个核心步骤。

首次运行时会自动检查并安装所需的 Python 依赖包,无需手动操作。

Python 依赖包

运行本技能需要以下 Python 包:

  • requests - HTTP 请求库
  • markdown - Markdown 转 HTML 库
  • beautifulsoup4 - HTML 解析库
  • cssutils - CSS 解析库
  • python-dotenv - 环境变量加载库

首次运行脚本时,程序会自动检测并安装缺失的依赖包。 也可以手动安装:

pip install requests markdown beautifulsoup4 cssutils python-dotenv

Node.js 依赖包

tools/ 目录下的工具脚本需要 Node.js 环境,依赖以下包:

  • juice - CSS 内联转换库
  • markdown-it - Markdown 解析库

如果需要运行 Node.js 工具脚本,请先安装依赖:

cd tools
npm install

目录结构

wechat-article-publisher/
├── SKILL.md            # 技能说明文档
├── .env                # 环境变量配置文件
├── scripts/            # Python 脚本文件
│   ├── wechat_publisher.py     # 核心工作流脚本
│   ├── run_publisher.py        # 调用脚本(用户可修改此文件)
│   ├── theme_manager.py        # 主题管理模块
│   ├── css_to_inline.py        # CSS转内联样式模块
│   └── IP.py                  # 获取服务器公网IP地址脚本
├── themes/             # 主题目录
│   ├── markdown/       # Markdown 主题(40+种)
│   ├── code/           # 代码高亮主题
│   └── macCode/        # macOS 风格代码高亮主题
├── tools/              # 辅助工具
│   ├── simple_convert.js       # 简单Markdown转HTML脚本
│   ├── convert_markdown.js     # Markdown转HTML脚本
│   ├── convert_tool.html       # 转换工具页面
│   └── package.json            # Node.js 依赖配置
├── dist/               # 构建产物与输出目录
│   └── index.html              # 可以用python建一个服务器打开查看效果
└── docs/               # 参考文档
    ├── api_docs.md     # 微信接口API 文档
    └── html_spec.md    # 微信HTML 格式规范

快速开始

首次运行时引导用户输入配置变量

环境变量包含以下内容:

# 微信公众号配置
appid=你的微信公众号AppID
appsecret=你的微信公众号AppSecret

# SiliconFlow API Key
API_KEY=你的SiliconFlow API Key

配置文件说明

⚠️ 重要:必须先配置IP白名单才能调用微信公众号API

  1. 获取服务器公网IP地址(技能运行前提)

    • 运行脚本获取当前服务器的公网IP地址:
      python scripts/IP.py
      
    • 脚本会输出你的公网IP地址,例如:115.190.93.94
    • 保存此IP地址,后续配置白名单时使用
  2. 设置微信公众号 IP 白名单(必须完成)

    • 登录微信公众号后台:https://mp.weixin.qq.com
    • 进入「设置与开发」→「安全中心」→「IP白名单」
    • 点击「修改」按钮
    • 输入上一步获取的公网IP地址(例如:115.190.93.94
    • 点击「保存」按钮
    • ⚠️ 注意
      • 只支持固定IP格式,不支持CIDR格式(如 192.168.1.0/24)
      • 如果服务器IP地址发生变化,需要重新配置白名单
      • 白名单配置后可能需要几分钟生效
      • 不设置IP白名单会导致API调用失败
  3. 获取微信公众号 AppID 和 AppSecret

    • 登录微信公众号后台
    • 进入「开发」→「基本配置」
    • 在「公众号开发信息」中找到 AppID 和 AppSecret
    • 复制 AppID 和 AppSecret 到 .env 文件中
  4. 获取 SiliconFlow API Key

    • 访问 SiliconFlow 官网
    • 注册并登录账号
    • 进入「API Key」页面
    • 创建并复制 API Key 到 .env 文件中

关于 SiliconFlow

  • 模型说明:本技能使用 SiliconFlow 提供的 Kwai-Kolors/Kolors 模型
  • 费用说明:该模型是免费使用的,无需担心费用问题
  • 生成效果:可生成高质量的文章封面图片
  • 速度:生成速度快,通常在几秒内完成

使用方法

⚠️ 使用前提:必须先完成IP白名单配置

在运行任何脚本之前,请确保已完成以下步骤:

  1. 运行 python scripts/IP.py 获取服务器公网IP
  2. 在微信公众号后台配置IP白名单
  3. 配置环境变量文件

具体步骤请参考上方的「配置文件说明」章节。

方法一:直接运行调用脚本

  1. 修改文章内容

    • 打开 scripts/run_publisher.py 文件,修改文章标题、作者、摘要等信息:
    article_data = {
        "title": "文章标题",
        "author": "作者", # 未提供时默认为王帅
        "digest": "文章摘要",
        "content": content
    }
    
  2. 运行脚本

    python scripts/run_publisher.py
    

方法二:作为模块导入

  1. 导入技能
from scripts.wechat_publisher import WechatArticleWorkflow
  1. 初始化工作流
workflow = WechatArticleWorkflow()
  1. 准备文章数据
article_data = {
    "title": "文章标题",
    "author": "作者",
    "digest": "文章摘要",
    "content": "文章内容(HTML格式)"
}
  1. 执行工作流
result = workflow.run(article_data)
if result:
    print("工作流执行成功!")
    print(f"封面图片: {result['cover_path']}")
    print(f"素材 media_id: {result['media_id']}")
    print(f"草稿 media_id: {result['draft_media_id']}")
else:
    print("工作流执行失败!")

核心功能

1. 生成封面图片

  • 使用 SiliconFlow API 生成高质量封面图
  • 支持自定义提示词
  • 自动保存到本地

2. 上传图片到素材库

  • 调用微信素材上传接口
  • 获取 media_id 和图片 URL
  • 支持图片格式验证

3. 创建微信公众号草稿

  • 构建符合微信格式要求的文章内容
  • 避免中文乱码问题
  • 返回草稿 media_id

4. 主题管理

  • 支持 40+ 种 Markdown 主题
  • 支持 6 种代码高亮主题
  • 支持 6 种 macOS 风格代码高亮主题
  • 可在发布文章时选择不同的主题
  • 主题自动应用到文章内容

5. Markdown 转换

  • 支持直接加载 Markdown 文件并转换为 HTML
  • 支持直接转换 Markdown 内容字符串
  • 自动处理代码高亮和表格等格式
  • 转换后自动应用所选主题

使用示例

加载 Markdown 文件:

result = workflow.run(
    article_data,
    markdown_file="path/to/article.md",
    markdown_theme="chazi",
    code_theme="atomOneDark"
)

转换 Markdown 内容:

markdown_content = """# 标题

这是一段 **Markdown** 内容。

```python
print("Hello, World!")
result = workflow.run(
    article_data,
    markdown_content=markdown_content,
    markdown_theme="chengxin",
    code_theme="github"
)

可用主题列表

Markdown 主题(40个)

axiaoxin, chazi, chenglan, chengxin, chuizibianqian, custom, hongfei, jijianhei, jikehei,
jingdianfeicuilv, jingdianganlanlv, jingdianhuoliju, jingdianlan, jingdianmeiguijin,
jingdianningmenghuang, jingdianshimohei, jingdiantiankonglan, jingdianwuyanhui,
jingdianxunyizi, jingdianyinghuafen, lanqing, lanying, lvyi, nenqing, normal,
qiangweizi, shanchui, wanggehei, yanqihu, youyafeicuilv, youyaganlanlv, youyahuoliju,
youyalan, youyameiguijin, youyaningmenghuang, youyashimohei, youyatiankonglan,
youyawuyanhui, youyaxunyizi, youyayinghuafen

代码高亮主题(6个)

atomOneDark, atomOneLight, github, monokai, vs2015, xcode

macOS 风格代码高亮主题(6个)

macAtomOneDark, macAtomOneLight, macGithub, macMonokai, macVs2015, macXcode

API 参考

WechatArticleWorkflow 类

初始化

WechatArticleWorkflow(config_path=None)
  • config_path: 配置文件路径,默认为 None(使用同目录下的 .env 文件)

run 方法

run(article_data, cover_prompt=None, cover_path=None, markdown_theme=None, code_theme=None, markdown_file=None, markdown_content=None)
  • article_data: 文章数据字典,包含 title, author, digest, content 等字段

  • cover_prompt: 封面图片生成提示词,默认为科技感蓝色背景设计

  • cover_path: 封面图片保存路径,默认为 cover.png

  • markdown_theme: Markdown 主题名称,默认为 None(不应用主题)

  • code_theme: 代码高亮主题名称,默认为 None(不应用主题)

  • markdown_file: Markdown文件路径,如果提供会自动转换为HTML

  • markdown_content: Markdown内容字符串,如果提供会自动转换为HTML

  • 返回值:成功返回包含 cover_path, media_id, draft_media_id, applied_themes 的字典,失败返回 None

HTML 格式规范

支持的标签

  • 基础文本标签:p, span, strong, em, u, del, ul, ol, li, h1-h3, br, blockquote
  • 其他标签:img, a, table, section, div, code, pre

内联样式

支持的 CSS 属性:

  • 文字:font-size, font-family, font-weight, color, letter-spacing, line-height, text-align, text-decoration, text-indent
  • 盒模型:margin, padding, border, border-radius, box-shadow, background
  • 布局:display, flex 相关属性

图片要求

  • 必须使用微信素材库链接(微信CDN)
  • 图片格式支持:bmp/png/jpeg/jpg/gif
  • 图片大小不超过10M
  • 建议宽度≤100%

常见问题

1. API 调用失败:IP 白名单错误

  • 错误信息errcode=40164ip not in whitelist
  • 原因:未配置IP白名单或IP地址不正确
  • 解决方案
    1. 运行 python scripts/IP.py 获取当前服务器公网IP
    2. 登录微信公众号后台:https://mp.weixin.qq.com
    3. 进入「设置与开发」→「安全中心」→「IP白名单」
    4. 输入获取到的IP地址(注意:只支持固定IP,不支持CIDR格式)
    5. 保存后等待几分钟生效
  • 注意:如果服务器IP地址发生变化,需要重新配置白名单

2. 中文乱码

  • 原因:JSON 序列化时中文被转义
  • 解决方案:技能已内置处理,使用 ensure_ascii=False 确保中文不被转义

3. 图片上传失败

  • 检查图片格式:支持 bmp/png/jpeg/jpg/gif
  • 检查图片大小:不超过 10M
  • 检查网络连接:确保网络正常

3. 草稿创建失败

  • 检查字段长度:
    • 标题 ≤ 32 字
    • 作者 ≤ 16 字
    • 摘要 ≤ 128 字
  • 检查 HTML 格式:确保使用正确的 HTML 格式

注意事项

  1. 安全:不要将 .env 文件提交到版本控制系统
  2. 频率限制:微信 API 有调用频率限制,不要频繁调用
  3. IP 白名单:确保你的服务器 IP 已添加到微信公众号的 IP 白名单中
  4. 测试:在正式使用前,建议先测试整个工作流

故障排除

  1. 检查 .env 文件配置是否正确
  2. 检查网络连接是否正常
  3. 检查微信公众号权限是否足够
  4. 查看控制台输出的错误信息
  5. 确保 Python 和Node环境符合要求

目前发现的难点

养虾用户,如果用的是云龙虾,比如kimi的、字节的等,云龙虾的IP地址不固定,而微信的IP白名单必须要求是固定IP。目前的解决方案是多尝试,把多个IP都写到白名单,比如我用的字节的,尝试了几次发现IP来来回回就行那几个。

对列表的转换好像存在问题,等后续遇到了再说,让AI写文章的时候尽量别用列表


文章作者: 摸鱼
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 摸鱼 !
  目录