{"name":"wechat-html-adapter","tags":["wechat","html","formatter","converter","markdown","publisher"],"terms":{"license":"MIT","accepted":true},"author":{"name":"zzh448","url":"https://github.com/zzh448"},"readme":"# WeChat HTML Adapter\n\n将使用 style 类选择器排版的 HTML 文章转换为微信公众号编辑器可直接粘贴的兼容 HTML。\n\n## 解决的痛点\n\n微信编辑器粘贴 HTML 时会静默剥离大量 CSS，导致：样式全丢、flex/grid 布局塌陷、SVG 图表变空白、渐变背景退化、box-shadow 消失、本地图片不显示、中文乱码、伪元素丢失。\n\n本工具覆盖全部 22 项微信粘贴丢失问题：\n- class 样式完整内联化（级联 + 特异性排序）\n- flex/grid 多列布局 → 真 table 保持多列\n- SVG 矢量图 → PNG 内嵌（cairosvg）\n- 渐变 → 平均纯色背景\n- box-shadow → 直接丢弃（避免硬边框）\n- 本地/相对路径图片 → base64 内嵌\n- 伪元素 → 真实 span 注入\n- 非 ASCII → HTML 数字实体 + UTF-8 BOM\n- div 背景色 → section 保住底色\n\n## 用法\n\n```bash\npython scripts/convert.py input.html output.html\npython scripts/convert.py article.md wechat.html\npython scripts/convert.py https://example.com/post wechat.html\n```\n\n## 依赖\n\nbeautifulsoup4 lxml soupsieve tinycss2\ncairosvg（可选：SVG 栅格化；缺省时降级为占位提示）\n\n## 许可证\n\nMIT","source":{"url":"https://github.com/zzh448/wechat-html-adapter","type":"github"},"pricing":{"type":"free","description":"完全免费使用"},"runtime":{"type":"local","command":"[restricted local runtime]"},"version":"1.0.0","description":"将使用 style 类选择器排版的 HTML 文章转换为微信公众号编辑器可直接粘贴的兼容 HTML。解决微信粘贴后样式全丢、布局塌陷、SVG 变空白、本地图不显示等 22 项典型问题。支持 HTML 文件、Markdown 文件、网页 URL 三种输入。","displayName":"WeChat HTML Adapter","inputSchema":{"type":"object","required":["input","output"],"properties":{"input":{"type":"string","description":"输入文件路径（.html/.md/.markdown）或 HTTP/HTTPS URL"},"output":{"type":"string","description":"输出的微信公众号兼容 HTML 文件路径"}}},"permissions":{"browser":false,"network":true,"secrets":[],"filesystem":"write"},"outputSchema":{"type":"object","required":["success","outputFile"],"properties":{"error":{"type":"string","description":"失败时的错误信息"},"success":{"type":"boolean","description":"转换是否成功"},"outputFile":{"type":"string","description":"生成的微信公众号兼容 HTML 文件的绝对路径"}}},"reviewerNotes":{"runtime":{"execution":"命令：python scripts/convert.py input.html output.html。退出码 0=成功，1=文件不存在，2=URL 不可达，3=依赖缺失。5 秒内完成常规转换。","packaging":"ZIP 根目录含 skillhub.json + SKILL.md + requirements.txt + scripts/convert.py。单文件 Python 脚本，入口为 main() 函数。","sandboxing":"无 eval/exec/os.system/subprocess 调用，无后台守护进程，无持久化状态，无外部进程启动。纯输入→处理→输出的无状态转换器。仅依赖 4 个 PyPI 公开包（beautifulsoup4/lxml/soupsieve/tinycss2），cairosvg 为可选依赖。","verification":"测试用例：1) 本地 HTML → 微信公众号兼容 HTML；2) Markdown → HTML；3) HTTP URL 抓取 → HTML。输出可全选复制粘贴至微信公众号编辑器，视觉还原度 >90%。"},"security":{"dataFlow":"用户提供输入路径/URL → Python 脚本读取/抓取 → 本地转换处理 → 写入输出文件。全程无网络回传，无数据持久化，无日志外发。","riskAssessment":"低风险。network 仅出站 HTTPS GET（非入站监听），filesystem 仅操作用户指定路径（非系统目录遍历），secrets 为空（无密钥存储），browser 为 false（无浏览器操作）。所有依赖版本锁定于 requirements.txt。","networkRationale":"仅当 --input 为 HTTP/HTTPS URL 时发起 GET 请求抓取网页正文。不发送 cookie、认证头或用户数据，不访问硬编码域名。请求后数据仅在本地处理，不向任何外部服务回传。"}},"schemaVersion":"0.1"}