OpsToMP
pendingby Qysec
Convert and post Markdown notes to WeChat Official Account Draft Box.
OpsToMP - Obsidian笔记转微信公众号工具 / Obsidian to WeChat Official Account Tool
一个功能完整的Obsidian插件,用于将Markdown笔记转换并发布到微信公众号。
A comprehensive Obsidian plugin for converting and publishing Markdown notes to WeChat Official Accounts.
项目简介 / Project Introduction
OpsToMP是一个专为Obsidian设计的插件,提供完整的解决方案,帮助用户将Obsidian中的Markdown笔记转换并发布到微信公众号。
OpsToMP is an Obsidian plugin that provides a complete solution to help users convert and publish Markdown notes from Obsidian to WeChat Official Accounts.
-
Obsidian插件:集成在Obsidian中的插件,提供图形化界面和实时预览
-
Obsidian Plugin: Integrated plugin in Obsidian with graphical interface and real-time preview
功能特性 / Features
Obsidian插件功能 / Obsidian Plugin Features
-
📝 Markdown转HTML:将Markdown格式转换为微信公众号支持的HTML格式
-
👁️ 实时预览:在Obsidian中预览微信公众号格式的渲染效果
-
📤 上传草稿箱:一键上传到微信公众号草稿箱
-
🚀 直接发布:支持直接发布到微信公众号
-
🖼️ 图片支持:自动上传本地图片到微信服务器,支持
file:///URL和Obsidian内部链接 -
🎨 样式美化:自动应用微信公众号风格的样式,支持多种主题
-
🔒 安全防护:内置XSS防护,过滤危险标签和属性
-
🌐 网络测试:测试网络连接和API密钥有效性
-
✨ 一键排版:支持多种排版选项,包括段落间距、标题格式、图片优化、引用样式、代码块美化、列表格式优化、取消多余换行
-
📋 内容管理:查看和管理草稿箱、已发布文章列表
-
🗑️ 删除功能:删除草稿或已发布文章
-
📝 Markdown to HTML: Convert Markdown format to WeChat Official Account compatible HTML
-
👁️ Real-time Preview: Preview WeChat Official Account rendering effects in Obsidian
-
📤 Upload to Drafts: One-click upload to WeChat Official Account drafts
-
🚀 Direct Publishing: Support direct publishing to WeChat Official Account
-
🖼️ Image Support: Automatically upload local images to WeChat server, supporting
file:///URLs and Obsidian internal links -
🎨 Style Beautification: Automatically apply WeChat Official Account style with multiple themes support
-
🔒 Security Protection: Built-in XSS protection, filtering dangerous tags and attributes
-
🌐 Network Testing: Test network connection and API key validity
-
✨ One-Click Formatting: Support multiple formatting options including paragraph spacing, heading unification, image optimization, quote styling, code block beautification, list formatting, and removing extra line breaks
-
📋 Content Management: View and manage drafts and published articles lists
-
🗑️ Delete Function: Delete drafts or published articles
项目结构 / Project Structure
OpsToMP/
├── plugin-build/ # Obsidian插件构建目录 / Obsidian plugin build directory
│ ├── src/ # 源代码 / Source code
│ │ ├── api.js # 微信公众号API封装 / WeChat Official Account API wrapper
│ │ ├── main.js # 插件主文件 / Plugin main file
│ │ ├── settings.js # 设置页面 / Settings page
│ │ ├── sidebar.js # 侧边栏视图 / Sidebar view
│ │ ├── styles.css # 样式文件 / Styles file
│ │ └── utils.js # 工具函数 / Utility functions
│ ├── build/ # 构建输出 / Build output (用于发布 / For release)
│ │ ├── main.js # 编译后的插件 / Compiled plugin
│ │ ├── manifest.json # 插件清单 / Plugin manifest
│ │ └── styles.css # 样式文件 / Styles file
│ ├── esbuild.config.mjs # esbuild配置文件 / esbuild configuration
│ ├── package.json # 项目依赖配置 / Project dependencies
│ └── package-lock.json # 依赖锁定文件 / Dependencies lock file
├── README.md # 项目说明文档 / Project documentation (中文)
├── README_EN.md # 英文说明文档 / Project documentation (English)
├── LICENSE # 许可证文件 / License file
└── .gitignore # Git忽略文件 / Git ignore file
快速开始 / Quick Start
Obsidian插件安装 / Obsidian Plugin Installation
方法1:手动安装 / Method 1: Manual Installation
- 下载最新版本的插件文件 / Download the latest plugin files
- 将文件复制到Obsidian的插件目录 / Copy files to Obsidian plugins directory:
- Windows:
%APPDATA%\Obsidian\plugins\opsto-mp\ - macOS:
~/Library/Application Support/Obsidian/Plugins/opsto-mp/ - Linux:
~/.config/obsidian/plugins/opsto-mp/
- Windows:
- 在Obsidian中启用插件:设置 → 社区插件 → OpsToMP → 启用 / Enable plugin in Obsidian: Settings → Community Plugins → OpsToMP → Enable
方法2:从源码构建 / Method 2: Build from Source
# 进入插件构建目录 / Enter plugin build directory
cd plugin-build
# 安装依赖 / Install dependencies
npm install
# 构建插件 / Build plugin
npm run build
# 将build目录下的文件复制到Obsidian插件目录 / Copy files from build directory to Obsidian plugins directory
配置说明 / Configuration
获取微信公众号凭证 / Get WeChat Official Account Credentials
- 登录微信公众平台 / Login to WeChat Official Account Platform
- 进入"开发" → "基本配置" / Go to "Development" → "Basic Configuration"
- 获取AppID和AppSecret / Get AppID and AppSecret
Obsidian插件配置 / Obsidian Plugin Configuration
- 打开Obsidian设置 / Open Obsidian Settings
- 找到"OpsToMP"插件设置 / Find "OpsToMP" plugin settings
- 填写以下信息 / Fill in the following information:
- AppID:微信公众号的AppID / WeChat Official Account AppID
- AppSecret:微信公众号的AppSecret / WeChat Official Account AppSecret
- 网络测试URL:默认为百度,可自定义 / Network test URL, default is Baidu, customizable
- 超时时间:网络请求超时时间(毫秒)/ Network request timeout (milliseconds)
- 默认主题:选择默认的微信公众号样式主题 / Select default WeChat Official Account style theme
使用方法 / Usage
Obsidian插件使用 / Obsidian Plugin Usage
打开发布面板 / Open Publishing Panel
- 点击左侧工具栏的微信图标 / Click the WeChat icon in the left toolbar
- 或使用命令面板:
打开微信公众号发布面板/ Or use command palette:Open WeChat Official Account Publishing Panel
预览文档 / Preview Document
- 在Obsidian中打开要预览的笔记 / Open the note you want to preview in Obsidian
- 点击侧边栏中的"预览当前文档"按钮 / Click "Preview Current Document" button in the sidebar
- 查看微信公众号格式的预览效果 / View the preview in WeChat Official Account format
上传到草稿箱 / Upload to Drafts
- 在Obsidian中打开要上传的笔记 / Open the note you want to upload in Obsidian
- 点击侧边栏中的"上传到草稿箱"按钮 / Click "Upload to Drafts" button in the sidebar
- 等待上传完成 / Wait for upload to complete
- 在微信公众号后台查看草稿 / View drafts in WeChat Official Account backend
发布到公众号 / Publish to Official Account
- 在Obsidian中打开要发布的笔记 / Open the note you want to publish in Obsidian
- 点击侧边栏中的"发布到公众号"按钮 / Click "Publish to Official Account" button in the sidebar
- 等待发布完成 / Wait for publishing to complete
- 在微信公众号后台查看已发布的文章 / View published articles in WeChat Official Account backend
设置封面图片 / Set Cover Image
在上传或发布时,可以选择设置封面图片 / When uploading or publishing, you can set a cover image:
- 支持本地图片文件 / Support local image files
- 支持网络图片URL / Support network image URLs
网络测试 / Network Testing
- 点击"测试网络连接"按钮测试网络连通性 / Click "Test Network Connection" button to test network connectivity
- 点击"测试API密钥"按钮验证微信公众号凭证 / Click "Test API Keys" button to verify WeChat Official Account credentials
一键排版 / One-Click Formatting
- 勾选"启用一键排版"复选框 / Check "Enable One-Click Formatting" checkbox
- 根据需要选择排版选项 / Select formatting options as needed:
- 自动添加段落间距:统一段落间距 / Auto paragraph spacing: Unify paragraph spacing
- 统一标题格式:标准化各级标题样式 / Unify headings: Standardize heading styles
- 优化图片显示:图片居中、圆角、阴影 / Optimize images: Center images, add rounded corners and shadows
- 添加引用样式:美化引用块 / Quote styling: Beautify quote blocks
- 代码块美化:美化代码块和行内代码 / Code block beautification: Beautify code blocks and inline code
- 列表格式优化:统一列表缩进和间距 / List formatting: Unify list indentation and spacing
- 取消多余换行:移除多余的空行,段落间最多空一行 / Remove extra breaks: Remove extra blank lines, max one blank line between paragraphs
- 点击"预览当前文档"或"上传至草稿箱"查看效果 / Click "Preview Current Document" or "Upload to Drafts" to see the effect
内容管理 / Content Management
查看草稿列表 / View Draft List
- 点击侧边栏中的"查看草稿列表"按钮 / Click "View Draft List" button in the sidebar
- 查看所有草稿及其状态 / View all drafts and their status
- 点击草稿卡片查看详情 / Click draft card to view details
- 点击"删除"按钮删除草稿 / Click "Delete" button to delete draft
查看已发布文章 / View Published Articles
- 点击侧边栏中的"查看已发布文章"按钮 / Click "View Published Articles" button in the sidebar
- 查看所有已发布文章及其状态 / View all published articles and their status
- 点击文章卡片查看详情 / Click article card to view details
- 点击"删除"按钮删除已发布文章 / Click "Delete" button to delete published article
注意:内容管理功能需要公众号完成个人认证。如果出现权限错误,请前往微信公众平台完成认证。/ Note: Content management features require WeChat Official Account personal authentication. If permission errors occur, please complete authentication on the WeChat Official Account Platform.
Markdown支持 / Markdown Support
插件和Python工具都支持以下Markdown语法 / Both plugin and Python tools support the following Markdown syntax:
- 标题(
#、##、###等)/ Headers (#,##,###, etc.) - 代码块(
)/ Code blocks () - 加粗(
**text**)/ Bold (**text**) - 斜体(
*text*)/ Italic (*text*) - 链接(
[text](url))/ Links ([text](url)) - 图片(
)/ Images () - Obsidian内部链接(
![[图片名.png]])/ Obsidian internal links (![[image.png]]) - 引用(
> text)/ Blockquotes (> text) - 列表(有序和无序)/ Lists (ordered and unordered)
技术实现 / Technical Implementation
Obsidian插件技术栈 / Obsidian Plugin Tech Stack
- 框架:Obsidian Plugin API / Framework: Obsidian Plugin API
- 打包工具:esbuild / Build Tool: esbuild
- HTTP客户端:axios / HTTP Client: axios
- 表单处理:form-data / Form Processing: form-data
- Node.js版本:>= 16 / Node.js Version: >= 16
安全特性 / Security Features
XSS防护 / XSS Protection
- 过滤危险标签(
<script>、<iframe>等)/ Filter dangerous tags (<script>,<iframe>, etc.) - 移除危险属性(
onclick、onerror等)/ Remove dangerous attributes (onclick,onerror, etc.) - 验证URL安全性(仅允许
http:、https:、app:、file:协议)/ Validate URL security (only allowhttp:,https:,app:,file:protocols) - HTML实体解码和转义 / HTML entity decoding and escaping
API安全 / API Security
- 使用HTTPS通信 / Use HTTPS communication
- 不存储敏感信息(AppSecret仅在内存中使用)/ Do not store sensitive information (AppSecret only used in memory)
- Token自动缓存和过期管理 / Automatic token caching and expiration management
图片处理 / Image Processing
- 支持本地图片自动上传 / Support automatic upload of local images
- 支持网络图片直接使用 / Support direct use of network images
- 支持Obsidian内部链接转换 / Support Obsidian internal link conversion
- 自动处理图片格式和大小限制 / Automatically handle image format and size limits
开发指南 / Development Guide
Obsidian插件开发 / Obsidian Plugin Development
环境要求 / Environment Requirements
- Node.js >= 16
- npm >= 8
开发命令 / Development Commands
cd plugin-build
# 安装依赖 / Install dependencies
npm install
# 开发模式(自动监听文件变化)/ Development mode (watch file changes)
npm run dev
# 生产构建 / Production build
npm run build
# 版本号管理 / Version management
npm run version
代码结构说明 / Project Structure
src/api.js:微信公众号API封装 / WeChat Official Account API wrappersrc/main.js:插件主文件,包含所有核心功能 / Plugin main file, contains all core functionalitysrc/settings.js:设置页面实现 / Settings page implementationsrc/sidebar.js:侧边栏视图实现 / Sidebar view implementationsrc/styles.css:插件样式文件 / Plugin styles filesrc/utils.js:工具函数集合 / Utility functions collectionesbuild.config.mjs:esbuild构建配置 / esbuild configurationmanifest.json:插件清单文件 / Plugin manifest file
常见问题 / FAQ
Obsidian插件相关 / Obsidian Plugin Related
Q: 插件无法连接到微信API? / Plugin cannot connect to WeChat API?
A: 请检查 / Please check:
- AppID和AppSecret是否正确 / Whether AppID and AppSecret are correct
- 网络连接是否正常 / Whether network connection is normal
- 微信公众号是否已开通相关权限 / Whether WeChat Official Account has relevant permissions
- 使用网络测试功能验证连接 / Use network testing function to verify connection
Q: 图片无法上传? / Images cannot be uploaded?
A: 请检查 / Please check:
- 图片格式是否支持(jpg、png、gif等)/ Whether image format is supported (jpg, png, gif, etc.)
- 图片大小是否超过限制(微信限制为5MB)/ Whether image size exceeds limit (WeChat limit is 5MB)
- 网络连接是否正常 / Whether network connection is normal
- 图片路径是否正确 / Whether image path is correct
Q: 预览效果与实际发布不一致? / Preview effect differs from actual publishing?
A: 这可能是因为 / This may be because:
- 微信公众号编辑器有额外的样式限制 / WeChat Official Account editor has additional style restrictions
- 建议在微信公众号后台进行最终调整 / Suggest making final adjustments in WeChat Official Account backend
Q: Markdown渲染异常? / Markdown rendering abnormal?
A: 请检查 / Please check:
- Markdown语法是否正确 / Whether Markdown syntax is correct
- 是否使用了不支持的语法 / Whether unsupported syntax is used
- 查看控制台日志获取详细错误信息 / Check console logs for detailed error information
更新日志 / Changelog
v1.1.0 (2025-12-30)
Obsidian插件 / Obsidian Plugin
- ✨ 新增一键排版功能 / Add one-click formatting feature
- 支持自动添加段落间距 / Support auto paragraph spacing
- 支持统一标题格式 / Support unify headings
- 支持优化图片显示 / Support optimize images
- 支持添加引用样式 / Support quote styling
- 支持代码块美化 / Support code block beautification
- 支持列表格式优化 / Support list formatting
- 支持取消多余换行 / Support remove extra breaks
- ✨ 新增内容管理功能 / Add content management features
- 查看草稿列表 / View draft list
- 查看已发布文章列表 / View published articles list
- 删除草稿 / Delete drafts
- 删除已发布文章 / Delete published articles
- 🐛 修复内容管理权限错误提示 / Fix content management permission error message
- 添加个人认证说明 / Add personal authentication explanation
- 🐛 修复图片处理问题 / Fix image processing issues
- 修复
file:///URL处理 / Fixfile:///URL handling - 修复Obsidian内部图片链接转换 / Fix Obsidian internal image link conversion
- 确保图片正确显示,避免
!image变为:image的问题 / Ensure correct image display, avoid!imagebecoming:imageissue
- 修复
- 🐛 修复内容处理顺序 / Fix content processing order
- 调整处理流程,确保内部链接和微信链接清理在HTML渲染前完成 / Adjust processing flow to ensure internal links and WeChat link cleaning are completed before HTML rendering
- 🐛 修复预览截断问题 / Fix preview truncation issue
- 添加内联代码处理 / Add inline code handling
- 确保完整内容渲染 / Ensure complete content rendering
- 🐛 修复微信链接处理 / Fix WeChat link processing
- 添加
cleanWeChatLinks函数,替换微信公众平台链接 / AddcleanWeChatLinksfunction to replace WeChat Official Account links - 避免微信公众号检测到违规链接 / Avoid WeChat Official Account detecting forbidden links
- 添加
- 🔧 优化HTML清理 / Optimize HTML cleaning
- 移除问题HTML解码,确保内容正确处理 / Remove problematic HTML decoding, ensure correct content handling
- 📝 支持README文件上传 / Support README file upload
- 修复"无效内容"错误 / Fix "invalid content" error
- 移除内部图片和简化列表,确保上传成功 / Remove internal images and simplify lists to ensure upload success
Python工具 / Python Tools
- 无更新 / No changes
v1.0.0 (2025-12-30)
Obsidian插件 / Obsidian Plugin
- ✨ 初始版本发布 / Initial release
- ✨ 支持Markdown转HTML / Support Markdown to HTML conversion
- ✨ 支持实时预览 / Support real-time preview
- ✨ 支持上传到草稿箱 / Support upload to drafts
- ✨ 支持直接发布 / Support direct publishing
- ✨ 支持图片上传 / Support image upload
- ✨ 支持封面图片 / Support cover image
- 🔒 内置XSS防护 / Built-in XSS protection
- 🎨 自动样式美化 / Automatic style beautification
- 🌐 网络测试功能 / Network testing function
- 📊 控制面板界面 / Control panel interface
Python工具 / Python Tools
- ✨ 初始版本发布 / Initial release
- ✨ 支持Markdown转HTML / Support Markdown to HTML conversion
- ✨ 支持图片上传 / Support image upload
- ✨ 支持草稿箱发布 / Support draft publishing
- 🧪 Token测试工具 / Token testing tool
- 📋 命令行操作 / Command-line operation
贡献指南 / Contributing
欢迎提交Issue和Pull Request!/ Welcome to submit Issues and Pull Requests!
提交Issue / Submitting Issues
在提交Issue时,请提供 / When submitting an issue, please provide:
- 详细的问题描述 / Detailed problem description
- 复现步骤 / Steps to reproduce
- 环境信息(操作系统、Obsidian版本、插件版本等)/ Environment information (OS, Obsidian version, plugin version, etc.)
- 相关日志或截图 / Relevant logs or screenshots
提交Pull Request / Submitting Pull Requests
- Fork本仓库 / Fork this repository
- 创建特性分支(
git checkout -b feature/AmazingFeature)/ Create feature branch (git checkout -b feature/AmazingFeature) - 提交更改(
git commit -m 'Add some AmazingFeature')/ Commit changes (git commit -m 'Add some AmazingFeature') - 推送到分支(
git push origin feature/AmazingFeature)/ Push to branch (git push origin feature/AmazingFeature) - 开启Pull Request / Open Pull Request
许可证 / License
MIT License
作者 / Author
Qysec
致谢 / Acknowledgments
感谢以下开源项目和社区 / Thanks to the following open source projects and communities:
- Obsidian - 强大的笔记应用 / Powerful note-taking app
- esbuild - 快速的JavaScript打包工具 / Fast JavaScript bundler
- axios - HTTP客户端 / HTTP client
- Python requests - Python HTTP库 / Python HTTP library
- Python markdown - Markdown解析库 / Markdown parser
- BeautifulSoup - HTML解析库 / HTML parser
联系方式 / Contact
如有问题或建议,欢迎通过以下方式联系 / For questions or suggestions, please contact via:
- 提交GitHub Issue / Submit GitHub Issue
- 发送邮件 / Send email
注意:使用本工具时,请遵守微信公众平台的使用规范和相关法律法规。/ Note: When using this tool, please comply with WeChat Official Account Platform usage guidelines and relevant laws and regulations.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.