🤖 第五章 应用实战:知乎图文创作和发布助手
📄 一句话概括

同一件工具(墨滴),在头条那里【不在支持列表里】,在知乎这里【在列表里】。 但本节真正的要点不是这条,而是——体检的重心变了:头条要查【哪些元素会坏】(平台不支持,只能改截图),知乎要查【哪些元素会掉】(平台支持,但转一道手容易丢格式)。同一个检查项,两个平台的正确动作完全相反。

📝 本节和前面几节的关系

5.4.1 刚放行的稿子还是 Markdown,本节把它变成【能粘进知乎编辑器的富文本】,交给 5.4.3。它的位置对应 4.4.3(都是排版),但那时的平台是头条、工具不在支持列表;这次两个条件都变了——下面第三节会把这两处差别讲清楚。

一、墨滴与知乎:这次它在支持列表里

先回顾 4.4.3 那条结论:墨滴的公开支持平台是【公众号、知乎、掘金、CSDN】——头条不在其中。

所以本章这一节的条件好一些:知乎就在墨滴的公开支持列表里。这意味着两件事:

项 说明
主题适配 墨滴为主题样式做了平台适配——选【知乎】那套,渲染出来的样式更贴知乎本身的排版
跳转入口 支持列表里的平台,通常有直接跳过去的入口,少一次手动切窗口

但别把这件事想大。 墨滴的产物始终是【剪贴板里的一段富文本】——它不替你把文章发到知乎(发不出去,见 5.4.3:知乎没有对外公开的写入接口)。"在支持列表里"带来的好处是【样式更贴 + 少切一次窗口】,不是【自动发布】。

二、一个关键差别:知乎对 Markdown 的容忍度高得多

这是本节与 4.4.3 最实质的不同,它直接改变了体检的内容。

元素 头条 知乎
表格 不稳,建议改截图 原生支持
代码块 支持差,建议改截图 原生支持
数学公式 基本不支持 原生支持(LaTeX)
一级标题 会与标题框重复 同样会重复
外链图片 只认自己的素材库 同样只认自己的图床

看出来了吗——下半张表两行没变,上半张表三行全变了。

变了的那三行 没变的那两行
元素 表格、代码块、公式 一级标题、外链图
原因 这些是【平台能力】问题 这些是【结构规则】问题
会怎样 头条天生不支持,知乎天生支持 两个平台都要求【正文不要重复标题】【图片走自家图床】
正确动作 头条:删掉改截图;知乎:保留,但到编辑器里原生重做 两个平台都是:删掉 / 换图床
📝 一张顺手记下的判断表

检查一个元素该怎么处理,问两个问题: ① 平台【支持】它吗? → 不支持:删掉或换表达(截图);支持:留着。 ② 粘过去的路上【会变】吗? → 会变:到平台上重做一遍;不会变:不用管。

4.4.3 的表格是【① 不支持】→ 改截图;本节的表格是【① 支持,但 ② 会变】→ 到知乎重做。 两条路径的终点不同,但都不是【原样粘过去就行】。

三、所以体检的重心从【会坏】移到【会掉】

这句话是本节的核心。 两个平台的体检都要做,但要查的东西不一样:

4.4.3(头条) 5.4.2(知乎)
第一类:平台不支持的 这节的重点(表格/代码块 → 改截图) 基本不存在(知乎都支持)
第二类:平台支持但会掉的 也要留意 这节的重点(表格/公式 → 到知乎重做)
第三类:结构规则 一级标题、外链图、双标题、字数 同(一级标题、外链图、双标题)
第四类:形态分档 没有 有——正文底线按【文章/回答/想法】三档不同
第五类:字段上限 没有 有——话题最多 5 个

第四、五类是本节的知乎增量,都和 5.1.1 讲的【三路形态互不通用】直接相关:

⚠️ 关于那个 100 字底线,有一条账要算在账号上

知乎的规则里有这么一条:连续 3 天发布的内容低于 100 字、或者含大量无关导流信息,会导致创作行为分归零重计。 所以那条 100 字底线不是【单篇】的,是【账号级】的——一篇 19 字的想法不会有任何事,但连着几天发就出事。 这也解释了为什么体检器里要设这条检查:它防的不是这一篇,是这一串。

四、RPA 要做的六步

与 4.4.3 同形,只有第 ④ 步变了:

① 打开墨滴编辑器  →  ② 清空上一次的内容
        ↓
③ 把这一篇的 Markdown 粘贴进去
        ↓
④ 选【知乎】那套主题(一次选定,整批复用)   ← 4.4.3 是【选一个统一主题】
        ↓
⑤ 点【复制】——样式进了剪贴板的富文本槽位
        ↓
⑥ 切到知乎编辑器 → Ctrl+V → 回读校验(样式真的进来了吗)

其余三条要点与 4.4.3 完全一致,这里只重复结论:

步 要点
② 清空 墨滴会记住上一次的内容——不清空会把上一篇的尾巴带进这一篇
④ 主题 一次定好,整批复用;批量里每篇换主题会让账号看起来很乱
⑥ 回读 【点了复制】不等于【样式真在剪贴板里】——必须回读确认

五、⚠️ 图床:知乎这一侧的真实要求

这一条是本节最容易翻车的地方,而且它与 4.4.3 的结论同源、但细节不同。

事实 说明
知乎的正文图和题图会走它自己的图床 直接贴一个外部图床链接经常拉不下来——尤其境外图源,知乎服务端压根抓不到
稳妥做法 先把图片存到本机,再用本机文件路径引用,让平台自己转存
墨滴有免费图床 它解决的是【链接不会失效】——但【墨滴图床 ≠ 知乎图床】

回忆 4.4.3 那条警告:墨滴图床解决的是链接不失效,而头条的正文图只认它自己素材库里的图。知乎这一侧完全一样——你把带墨滴图床地址的稿子粘进知乎,图可能拉不到。

所以这一条要在 5.4.3 处理:正文图先上传到知乎自己的图床,再把地址换掉。本节只负责把它标出来。

📝 一句话记住这一条

"图能在墨滴里看见"和"图能在知乎里显示",是两件事。 图的【位置】对了,不代表图的【来源】被对方认。 这条与 4.4.3 那条一字不差——换了平台,这条坑没变。

六、动手 Demo:粘贴前体检器(知乎版)

它是 4.4.3 那个体检器的改编版:保留了同源的三项(一级标题、外链图、双标题),换掉了三项(表格/代码块从【必须改截图】降级为【到知乎重做】),新增了两项知乎专有(字数按形态分档、话题上限 5)。

# -*- coding: utf-8 -*-
"""5.4.2 Demo:粘贴前体检器(知乎版)—— 挑出【过墨滴会坏】和【过知乎会踩线】的东西(纯标准库)"""
import re

FENCE = chr(96) * 3   # 三个反引号(写成这样是为了不破坏笔记自身的代码围栏)

DOCS = {
    "M1": {"form": "文章", "topics": ["收纳", "家居"],
           "md": """# 玄关收纳我只留了三件东西

玄关永远堆着鞋和快递盒,出门前翻三分钟找不到钥匙。

## 玄关收纳我只留了三件东西

三件加起来占不到半平米,门口却清爽了一倍。

![玄关对比](https://img.example.com/xuanguan-1.jpg)"""},

    "M2": {"form": "回答", "topics": ["收纳", "家居", "装修", "小户型", "租房", "好物", "整理"],
           "md": """## 先分三档预算

| 档位 | 花多少 | 买什么 |
|---|---|---|
| 一档 | 200 元 | 换鞋凳、钥匙盘 |
| 二档 | 500 元 | 窄边鞋柜、收纳箱 |

放不下的时候,可以算一下:$$\\frac{可用进深}{鞋长} \\geq 1.2$$

一档两百块就够了,真的不用上定制。"""},

    "M3": {"form": "想法", "topics": ["收纳"],
           "md": """今天把玄关清空了,只留换鞋凳和钥匙盘。"""},
}

def check(form, topics, md):
    bad, warn = [], []
    # 1. 一级标题:正文里不该出现(会与平台标题框重复)
    if re.search(r"^#\s+", md, re.M):
        bad.append("含一级标题 # —— 文章有独立的标题框,正文里再写一遍会重复")
    # 2. 外链图片:知乎正文图要走它自己的图床
    urls = re.findall(r"!\[.*?\]\((https?://[^)]+)\)", md) + \
           re.findall(r'<img[^>]+src="(https?://[^"]+)"', md)
    if urls:
        bad.append("含外链图片 %d 张 —— 知乎正文图认自己的图床,外链容易拉不到" % len(urls))
    # 3. 正文里重复出现标题(文章形态)
    hs = set(re.findall(r"^#{1,3}\s+(.+)$", md, re.M))
    for h in hs:
        if md.count(h) > 1:
            bad.append("标题【%s】在正文里出现了两次 —— 平台标题是独立字段" % h[:18])
    # 4. 话题数量上限 5
    if len(topics) > 5:
        bad.append("话题 %d 个,超过知乎上限 5 —— 多出来的会被丢掉" % len(topics))
    # 5. 复杂结构:知乎支持,但从墨滴粘过来最容易掉格式(这条是提示,不是阻断)
    structs = []
    if re.search(r"^\s*\|", md, re.M):
        structs.append("表格")
    if FENCE in md or "~~~" in md:
        structs.append("代码块")
    if "$$" in md or re.search(r"\\frac|\\sqrt", md):
        structs.append("数学公式")
    if structs:
        warn.append("含【%s】—— 知乎原生支持这些,但经墨滴转成富文本再粘,最容易掉格式;"
                    "建议到知乎编辑器里用原生插入" % "、".join(structs))
    # 6. 行内 HTML 带样式
    if re.search(r"<[a-zA-Z]+[^>]*style=", md):
        warn.append("含带 style 的行内 HTML —— 粘贴时样式会被剥掉")
    # 7. 字数:按形态分档
    plain = re.sub(r"[#*`>|\[\]()!$\\{}]", "", md)
    n = len(re.sub(r"\s+", "", plain))
    FLOOR = {"想法": (100, 200), "回答": (300, 800), "文章": (800, 1500)}
    hard, soft = FLOOR.get(form, (300, 800))
    if n < hard:
        bad.append("正文仅 %d 字,低于【%s】的底线 %d 字" % (n, form, hard))
    elif n < soft:
        warn.append("正文 %d 字,低于【%s】的建议值 %d 字(提示,不阻断)" % (n, form, soft))
    return bad, warn, n

print("=" * 74)
print("一、逐篇体检(共 %d 篇)" % len(DOCS))
print("=" * 74)
tb = tw = 0
for k, d in DOCS.items():
    bad, warn, n = check(d["form"], d["topics"], d["md"])
    tb += len(bad)
    tw += len(warn)
    print()
    print("  [%s] %s  正文 %d 字  话题 %d 个  %s"
          % (k, d["form"], n, len(d["topics"]),
             "OK" if not bad and not warn else "%d 阻断 / %d 提示" % (len(bad), len(warn))))
    for b in bad:
        print("        ✗ %s" % b)
    for w in warn:
        print("        ! %s" % w)

print()
print("=" * 74)
print("二、汇总")
print("=" * 74)
print("  阻断 %d 条(不改就别往墨滴里粘);提示 %d 条(粘完自己去看一眼)。" % (tb, tw))
print("  注意提示里的那一类(表格/代码块/公式):")
print("    它们和 4.4.3 的结论【刚好相反】——")
print("    头条是【平台不支持,必须改截图】;知乎是【平台支持,但转一道手容易掉】。")
print("    所以这条不是【删掉】,是【到知乎编辑器里重做一遍】。")

实际运行输出(真跑,不是示意):

==========================================================================
一、逐篇体检(共 3 篇)
==========================================================================

  [M1] 文章  正文 112 字  话题 2 个  4 阻断 / 0 提示
        ✗ 含一级标题 # —— 文章有独立的标题框,正文里再写一遍会重复
        ✗ 含外链图片 1 张 —— 知乎正文图认自己的图床,外链容易拉不到
        ✗ 标题【玄关收纳我只留了三件东西】在正文里出现了两次 —— 平台标题是独立字段
        ✗ 正文仅 112 字,低于【文章】的底线 800 字

  [M2] 回答  正文 96 字  话题 7 个  2 阻断 / 1 提示
        ✗ 话题 7 个,超过知乎上限 5 —— 多出来的会被丢掉
        ✗ 正文仅 96 字,低于【回答】的底线 300 字
        ! 含【表格、数学公式】—— 知乎原生支持这些,但经墨滴转成富文本再粘,最容易掉格式;建议到知乎编辑器里用原生插入

  [M3] 想法  正文 19 字  话题 1 个  1 阻断 / 0 提示
        ✗ 正文仅 19 字,低于【想法】的底线 100 字

==========================================================================
二、汇总
==========================================================================
  阻断 7 条(不改就别往墨滴里粘);提示 1 条(粘完自己去看一眼)。
  注意提示里的那一类(表格/代码块/公式):
    它们和 4.4.3 的结论【刚好相反】——
    头条是【平台不支持,必须改截图】;知乎是【平台支持,但转一道手容易掉】。
    所以这条不是【删掉】,是【到知乎编辑器里重做一遍】。

读结果,五个值得注意的地方:

  1. M1 的【标题重复】实际上是同一个错误的两层。 它既有一级标题 #(格式上的重复:会跟平台的标题框撞),又在正文里把标题写了一遍(内容上的重复:读者会连着看到两遍同一句话)。这两条检查看起来像重复,其实防的是两件事——一条防【平台结构冲突】,一条防【阅读体验】。所以它们都该留着。

  2. M2 的【话题 7 个】是本节独有的检查,而且它属于【不报错但会出事】那一类。 多填了不会提示错误,只是静默丢弃——你以为 7 个都生效了,实际只有前 5 个。 这类规则最难靠人发现(因为没有任何反馈),只能靠体检器主动拦一遍。

  3. M2 的那条提示是本节的定盘星。 表格和公式在知乎是原生支持的,所以它不像头条那样【必须改截图】;但从墨滴粘过来时,这两个结构恰恰最容易掉格式——所以正确动作是【保留内容,到知乎编辑器里用原生插入重做一遍】。 同一个检查项,两个平台的正确动作完全相反——这就是【平台规则】和【工具行为】要分开看的原因。

  4. 脚本把【表格】和【数学公式】报成了同一条提示,这是有意的。 报账的粒度应该按【处理动作】分,不是按【发现顺序】分:这两样东西在处理上是同一件事(都去知乎原生重做),合成一条,人一眼就知道该干什么;如果报两条,人还得自己判断"这两个是不是一样处理"。 这跟 4.4.3 去掉【重复计账】是同一个思路的两种表现:那次是去掉没意义的重复,这次是合并同意义的条目——目标都是让报出来的每一条都对应一个明确动作。

  5. M3 那句话只有 19 字,被拦下来了——但请注意脚本给的理由不是【太短写得不好】,而是【低于想法形态的底线 100 字】。 而这条底线的性质是【账号级】的(5.1.1 里那条:连续 3 天发布低于 100 字或含大量无关导流信息,创作行为分归零重计)。 所以这条检查防的不是这一篇,是这一串。 这也是【体检器为什么要把平台的账号级规则也写进去】——有些风险单看一篇是看不出来的。

📝 顺手一记:写体检器时踩过的一个小坑

上面脚本里有一行 FENCE = chr(96) * 3,看起来有点别扭,但它是有原因的: 这段代码本身就被写在笔记的三个反引号围栏里。如果脚本里直接写三个反引号(用来检测代码块),就会把笔记自己的围栏提前闭合,整段代码渲染全乱。 所以改用 chr(96) * 3 动态拼出来——功能和写死完全一样,但不会破坏外层渲染。 4.4.3 那一节也踩过同一类坑(当时是内层围栏改用波浪号)。这类问题只在【笔记里贴代码】的场景出现,但它一旦出现,破坏的是整篇笔记的渲染。

30 秒实验

把 Demo 里 M2 的 topics 从 7 个删到 5 个,再跑一次。

会发生什么:

结论:阻断项要一条条清,提示项要留着提醒自己。 这两类不能混在一起处理——阻断项是【必须做的动作】,提示项是【粘完之后要去看一眼的地方】。 而这两类在纸面上长得很像(都是几行字),区分它们的唯一依据是【不改会不会出事】。

顺着这个思路想一层:为什么【表格/公式】这条不设成阻断?因为它可能粘过去完全没问题(墨滴的知乎主题适配可能处理得很好)——设成阻断会让所有带表格的稿子都被拦下,那就是误伤(与 4.3.1 那次【正则太窄误判合格卡】相反方向的错误)。所以它设成提示,正确的用法是【粘完之后回读时重点看这一处】。

常见误区

  1. 【墨滴支持知乎,所以排版完就能一键发到知乎】——错。 墨滴的产物始终是剪贴板里的一段富文本,它不替你把文章发出去(也发不出去——5.4.3 会讲:知乎没有对外公开的写入接口)。"在支持列表里"带来的是【样式更贴 + 少切一次窗口】。
  2. 【知乎支持表格和代码块,所以这两个不用管了】——错,正好要管。 知乎原生支持它们,但从墨滴转来的富文本,这两个结构最容易掉格式。正确动作不是删掉,是到知乎编辑器里用原生方式重做一遍。 头条的结论是【改截图】,知乎的结论是【重做】——方向不同,都不能原样粘过去。
  3. 【话题多填几个没坏处,反正不报错】——错,会静默丢弃。 知乎话题上限 5 个,多出来的不报错、直接丢——你以为 7 个都生效了,实际只有前 5 个。 这类【无反馈】的规则只能靠体检器主动拦。
  4. 【字的底线是统一的,300 字以上就行】——错,知乎按形态分档。 想法(短内容)的底线低于回答、回答低于文章——"多少字才够"在知乎没有统一答案,要看形态。 而且那条 100 字底线是账号级的(连续 3 天低于 100 字会让创作行为分归零重计),防的是这一串,不是这一篇。
  5. 【体检器报的每一条都要改掉才能走】——错,要分两类。 阻断项(不改就别发)和提示项(记录后由人判断)必须分开处理。 全设成阻断会造成误伤(比如带表格的稿子可能粘过去完全没问题);而这两类在纸面上长得一样,区分依据只有一个:【不改会不会出事】。
自测三问(点开对答案) 1. **同样一个【表格】,为什么在头条要删掉改截图,在知乎却要保留着重做?** 因为两个平台的**能力边界不同**:**头条对表格的支持不稳**(4.4.3 的结论是【表格在头条正文里最容易错乱】,正确动作是**删掉改截图**);**知乎原生支持表格**,所以**内容本身没问题**。 **但换到知乎也有它的问题**:表格**从墨滴转成富文本再粘过去时,最容易掉格式**。所以正确动作变成**【保留内容,到知乎编辑器里用原生插入重做一遍】。** **一句话:检查一个元素该不该留,先问【平台支持吗】,再问【粘过去会变吗】。** 2. **脚本为什么把【表格】和【数学公式】报成一条提示,而不是两条?** 因为**报账的粒度应该按【处理动作】分,不是按【发现顺序】分**:这两样东西**在处理上是同一件事**(都去知乎编辑器里原生重做),**合成一条,人一眼就知道该干什么**;报成两条,人还得自己判断"它们是不是一样处理"。 这和 4.4.3 去掉**重复计账**是同一个思路的两种表现:**那次去掉无意义的重复,这次合并同意义的条目**——**目标都是让报出来的每一条都对应一个明确动作。** 3. **为什么【表格/公式】设成提示,而【话题超限】设成阻断?** 依据只有一个:**不改会不会出事。** - **话题超限**:**一定会出事**(多出来的静默丢弃,你的话题策略直接失效),所以阻断; - **表格/公式**:**可能粘过去完全没问题**(墨滴的知乎主题适配可能处理得很好)。**如果设成阻断,所有带表格的稿子都会被拦下——那就是误伤**(方向与 4.3.1 那次【正则太窄误判合格卡】相反、但性质相同:都是**判据没有对上真实情况**)。 所以它的正确用法是**提示 + 回读时重点看这一处**。

相关笔记