运行时依赖
安装命令
点击复制本土化适配说明
Wechat Publisher 安装说明: 安装命令:["openclaw skills install wechat-article-publisher-pro"] 该技能用于微信相关操作,可能需要相应的平台账号或API密钥
技能文档
微信公众号文章发布工具
从互联网获取信息,智能排版成精美文章,一键发布到微信公众号。
功能特点 🌐 智能获取:从互联网获取最新信息 📝 AI排版:智能总结排版成精美文章 🎨 多模板:标准/营销/新闻等多种风格 🖼️ AI生成图片:集成china-image-gen,根据内容生成配图 📷 图片嵌入:支持内嵌图片和封面 📄 多格式输入:支持Word/PDF/Markdown 🌐 网页抓取:支持从网页URL提取内容 📦 批量发布:一次发布多篇文章 ⏰ 定时发布:支持定时发布功能 📊 数据统计:发布后查看阅读数据 🔄 多公众号:支持切换多个公众号 ⚠️ 配置要求
需要微信公众号的应用ID和应用Secret 申请地址:https://mp.weixin.qq.com 需要开通"发布能力"权限
使用场景 "帮我把这篇Markdown发布到微信公众号" "从这篇网页生成公众号文章并发布" "帮我写一篇关于AI的公众号文章" "批量发布这5篇文章到公众号" "查看昨天文章的阅读数据"
配置方法 环境变量配置 # 设置微信公众号配置 导出 WECHAT_应用_ID='your_应用_id' 导出 WECHAT_应用_SECRET='your_应用_secret' 导出 WECHAT_AUTHOR='你的名字'
配置文件(可选) { "wechat": { "应用_id": "your_应用_id", "应用_secret": "your_应用_secret", "author": "Your Name" } }
工作流程 用户输入(网页URL/Markdown/Word/PDF/简单描述) ↓
- 内容获取
- AI智能处理(OpenClaw大模型)
- 模板渲染
- 发布到公众号
- 数据统计
信息来源 来源 说明 OpenClaw 网页-搜索 获取最新资讯、数据 OpenClaw AI模型 总结、优化、扩展内容 用户输入文件 Word/PDF/Markdown 用户输入URL 网页内容提取 china-image-gen AI生成配图 Python代码 导入 os 导入 请求s 导入 json 导入 time
class WechatPublisher: def __init__(self, 应用_id, 应用_secret): self.应用_id = 应用_id self.应用_secret = 应用_secret self.访问_令牌 = None self.令牌_expires = 0 def 获取_访问_令牌(self): """获取访问_令牌""" if self.访问_令牌 and time.time() < self.令牌_expires: return self.访问_令牌 url = f"https://API.weixin.qq.com/cgi-bin/令牌" params = { "grant_type": "命令行工具ent_凭证", "应用id": self.应用_id, "secret": self.应用_secret } 响应 = 请求s.获取(url, params=params) data = 响应.json() if "访问_令牌" in data: self.访问_令牌 = data["访问_令牌"] self.令牌_expires = time.time() + data["expires_in"] - 300 return self.访问_令牌 else: rAIse 异常(f"获取令牌失败: {data}") def 创建_draft(self, title, content, author="", thumb_media_id=""): """创建草稿""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/cgi-bin/draft/添加?访问_令牌={令牌}" payload = { "articles": [{ "title": title, "author": author, "content": content, "thumb_media_id": thumb_media_id, "need_open_comment": 1 }] } 响应 = 请求s.post(url, json=payload) data = 响应.json() if "media_id" in data: return data["media_id"] else: rAIse 异常(f"创建草稿失败: {data}") def publish(self, media_id): """发布文章""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/cgi-bin/freepublish/submit?访问_令牌={令牌}" payload = {"media_id": media_id} 响应 = 请求s.post(url, json=payload) data = 响应.json() if "publish_id" in data: return data["publish_id"] else: rAIse 异常(f"发布失败: {data}") def 获取_publish_状态(self, publish_id): """获取发布状态""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/cgi-bin/freepublish/获取?访问_令牌={令牌}" payload = {"publish_id": publish_id} 响应 = 请求s.post(url, json=payload) return 响应.json() def 获取_article_data(self, article_id, begin_date, end_date): """获取文章数据统计""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/datacube/获取arti清理alysis?访问_令牌={令牌}" payload = { "begin_date": begin_date, "end_date": end_date, "msgid": article_id } 响应 = 请求s.post(url, json=payload) return 响应.json() def 列出_drafts(self, off设置=0, count=20): """获取草稿列表""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/cgi-bin/draft/batch获取?访问_令牌={令牌}" payload = { "off设置": off设置, "count": count, "no_content": 1 } 响应 = 请求s.post(url, json=payload) return 响应.json() def 删除_draft(self, media_id): """删除草稿""" 令牌 = self.获取_访问_令牌() url = f"https://API.weixin.qq.com/cgi-bin/draft/删除?访问_令牌={令牌}" payload = {"media_id": media_id} 响应 = 请求s.post(url, json=payload) return 响应.json() def 列出_published