<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Experience on Kalend's Blog</title><link>https://blog.kalend.top/tags/experience/</link><description>Recent content in Experience on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><atom:link href="https://blog.kalend.top/tags/experience/index.xml" rel="self" type="application/rss+xml"/><item><title>公众号文章发布经验</title><link>https://blog.kalend.top/wiki/concepts/wechat-mp-publishing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.kalend.top/wiki/concepts/wechat-mp-publishing/</guid><description>&lt;h1 id="公众号文章发布经验"&gt;公众号文章发布经验
&lt;/h1&gt;&lt;h2 id="概述"&gt;概述
&lt;/h2&gt;&lt;p&gt;微信公众号文章发布过程中的一些踩坑记录和最佳实践。&lt;/p&gt;
&lt;h2 id="踩坑记录"&gt;踩坑记录
&lt;/h2&gt;&lt;h3 id="问题-1中文编码问题"&gt;问题 1：中文编码问题
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;问题描述&lt;/strong&gt;：上传草稿时，中文被转义成 &lt;code&gt;\uXXXX&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：&lt;code&gt;requests.post(url, json=payload)&lt;/code&gt; 默认 &lt;code&gt;ensure_ascii=True&lt;/code&gt;，所有中文被序列化成 &lt;code&gt;\uXXXX&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：改用 &lt;code&gt;json.dumps(payload, ensure_ascii=False).encode('utf-8')&lt;/code&gt; + &lt;code&gt;data=&lt;/code&gt; 手动发送。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 错误方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 正确方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/json; charset=utf-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="问题-2草稿上传失败"&gt;问题 2：草稿上传失败
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;问题描述&lt;/strong&gt;：草稿上传成功，但草稿箱中看不到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：可能是 API 返回成功，但实际未写入。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：检查 API 返回的 &lt;code&gt;media_id&lt;/code&gt;，并手动验证草稿箱。&lt;/p&gt;
&lt;h2 id="最佳实践"&gt;最佳实践
&lt;/h2&gt;&lt;h3 id="1-文章结构"&gt;1. 文章结构
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;结论先行&lt;/strong&gt;：先说结论，再展开细节&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;短段落&lt;/strong&gt;：每段不超过 80 字&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;表格对比&lt;/strong&gt;：用表格展示对比信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有态度&lt;/strong&gt;：不要平铺直叙，要有观点&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-标题结构"&gt;2. 标题结构
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;公式&lt;/strong&gt;：品牌名前置 + 数字/版本钩子 + 可信度标记 + 利益或好奇点&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ OpenCode v1.18 更新：Desktop v2 正式上线，GPT-5.6 全面支持&lt;/li&gt;
&lt;li&gt;✅ Vibe Coding 三阶进化：从&amp;quot;帮我写代码&amp;quot;到&amp;quot;Agent 自己干&amp;quot;，你还在第几层？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-封面图"&gt;3. 封面图
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;风格&lt;/strong&gt;：tech 风格，简洁明了&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;尺寸&lt;/strong&gt;：900x383 像素&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容&lt;/strong&gt;：标题 + 核心卖点&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-发布流程"&gt;4. 发布流程
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;写稿&lt;/strong&gt;：按公众号标准写好文章&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审校&lt;/strong&gt;：检查事实、格式、AI 味&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上传草稿&lt;/strong&gt;：使用 API 上传到草稿箱&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;预览&lt;/strong&gt;：在公众号后台预览&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发布&lt;/strong&gt;：确认无误后发布&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="相关工具"&gt;相关工具
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;upload_draft.py&lt;/strong&gt;：草稿上传脚本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;article-review&lt;/strong&gt;：文章审校 skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wechat-mp-writing&lt;/strong&gt;：公众号写作 skill&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相关链接"&gt;相关链接
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kalend.top/" target="_blank" rel="noopener"
 &gt;公众号知识库系列&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kalend.top/2026/07/05/2026-07-05-vibe-coding-methodology.html/" target="_blank" rel="noopener"
 &gt;Vibe Coding 方法论三阶进化&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>