外观
3.2 字段映射
约 665 字
同步多平台
本页对应「三、操作步骤」的 3.2,把源站文章字段逐项映射到目标平台的接口字段,处理必填项、类型差异、富文本清洗与图片地址改写。返回上级:多平台同步。
前置条件
- 3.1 的接口配置已验证通过,写入接口可返回内容 ID。
- 已取得目标平台的字段文档,标注了必填项、类型与长度上限。
- 源文章字段名已确认,例如标题、正文、标签、封面、发布时间。
操作步骤
- 列出源文章字段与目标字段的对照表,先覆盖必填项:
cat > /srv/axis/sync/mapping.json <<'EOF'
{
"title": "title",
"summary": "excerpt",
"content": "body_html",
"tags": "tag_list",
"cover": "cover_url",
"published_at": "published_at"
}
EOF
jq -r 'to_entries[] | "\(.key) -> \(.value)"' /srv/axis/sync/mapping.json- 按映射生成请求体,处理类型转换与缺省值,标签统一转为数组:
jq -n \
--arg title "站点访问链路检查" \
--arg body "$(cat /srv/axis/docs/link-check.md)" \
--arg cover "https://cdn.example.com/assets/cover-link-check.png" \
'{title: $title, body_html: $body, tag_list: ["链路","检查"],
cover_url: $cover, published_at: "2026-01-13T09:00:00+08:00"}' \
> /srv/axis/sync/payload.json
jq . /srv/axis/sync/payload.json | head -n 20- 清洗正文:把本地相对路径的图片改写为绝对地址,去掉平台不支持的标签与内联脚本:
sed -E 's#\]\(/assets/#](https://cdn.example.com/assets/#g; s#<(script|iframe)[^>]*>.*</\1>##g' \
/srv/axis/docs/link-check.md > /tmp/body.md
grep -c 'cdn.example.com/assets' /tmp/body.md- 校验必填字段与长度,超限的截断并记录:
jq -r 'to_entries[] | select(.value == null or .value == "") | .key' /srv/axis/sync/payload.json
jq -r '.title | length' /srv/axis/sync/payload.json结果确认
- 映射表中的每个必填字段都有对应值,
jq过滤空值的结果为空。 - 正文中的图片全部为
https://cdn.example.com/开头的绝对地址,无/assets/相对路径残留。 - 标签为数组类型,数量不超过平台上限;发布时间带时区偏移。
- 标题长度在平台限制之内,超长部分已截断并留有记录。
注意事项
- 字段类型不要靠平台自动转换,字符串与数组混用常导致 422,映射时显式转换。
- 正文清洗只去掉平台明确不支持的部分,不要顺手改写文字内容。
- 映射配置与平台文档一起版本管理,接口字段变更时同步更新。
- 正文清洗后要通读一遍,正则替换容易误伤代码块与示例中的尖括号。
- 平台对图片有外链限制时,先确认图片域名在白名单内,再决定是否改写地址。
- 映射结果先生成文件再提交,提交前用
jq做一次结构校验,避免把格式错误推给平台。