内容格式化
不同平台对内容格式的要求差异很大。本章介绍如何将统一的 Markdown 源文件转换为各平台兼容的格式。
格式差异概览
| 平台 | 原生格式 | Markdown 支持 | 特殊要求 |
|---|---|---|---|
| 微信公众号 | 富文本 HTML | 不支持 | 图片必须上传到微信服务器 |
| 知乎 | 富文本 | 部分支持 | 有自己的编辑器格式 |
| 掘金 | Markdown | 完全支持 | 需要设置分类和标签 |
| 小红书 | 纯文本 + 图片 | 不支持 | 以图片为主,文字为辅 |
| CSDN | Markdown | 完全支持 | 支持多种编辑模式 |
| WordPress | HTML | 插件支持 | 取决于主题和插件 |
Markdown 转换基础
安装依赖
bash
pip install markdown
pip install markdown-it-py
pip install beautifulsoup4基础转换
python
import markdown
def markdown_to_html(md_content):
"""将 Markdown 转换为 HTML"""
html = markdown.markdown(
md_content,
extensions=[
'extra', # 表格、脚注等扩展
'codehilite', # 代码高亮
'toc', # 目录生成
'tables' # 表格支持
]
)
return html微信公众号格式适配
微信公众号是最复杂的平台,需要特殊处理。
核心问题
- 不支持 Markdown:必须转换为富文本 HTML
- 图片限制:外链图片会被过滤,必须上传到微信服务器
- 样式限制:只支持内联样式,不支持外部 CSS
转换方案
python
def markdown_to_wechat(md_content):
"""将 Markdown 转换为微信公众号格式"""
# 先转换为 HTML
html = markdown.markdown(md_content, extensions=['extra', 'tables'])
# 添加微信兼容的内联样式
html = add_wechat_styles(html)
return html
def add_wechat_styles(html):
"""添加微信公众号兼容的样式"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# 标题样式
for h1 in soup.find_all('h1'):
h1['style'] = 'font-size: 24px; font-weight: bold; color: #333;'
for h2 in soup.find_all('h2'):
h2['style'] = 'font-size: 20px; font-weight: bold; color: #333;'
# 代码块样式
for code in soup.find_all('code'):
code['style'] = 'background: #f5f5f5; padding: 2px 6px; border-radius: 3px;'
# 段落样式
for p in soup.find_all('p'):
p['style'] = 'line-height: 1.8; margin: 16px 0;'
return str(soup)复制到剪贴板
微信公众号编辑器需要 text/html 格式的数据:
python
import pyperclip
def copy_to_wechat_clipboard(html_content):
"""复制为微信公众号可用的格式"""
# 注意:这需要在浏览器环境中执行
# Python 中可以生成 HTML 文件,然后手动复制
with open('output.html', 'w', encoding='utf-8') as f:
f.write(html_content)
print("已生成 output.html,请在浏览器中打开并复制")图片处理
提取文章中的图片
python
import re
def extract_images(md_content):
"""提取 Markdown 中的所有图片"""
pattern = r'!\[([^\]]*)\]\(([^)]+)\)'
matches = re.findall(pattern, md_content)
return [(alt, url) for alt, url in matches]下载并上传图片
python
import requests
import os
def download_image(url, save_path):
"""下载图片到本地"""
response = requests.get(url, timeout=30)
if response.status_code == 200:
with open(save_path, 'wb') as f:
f.write(response.content)
return True
return False
def process_images(md_content, upload_func):
"""处理文章中的所有图片"""
images = extract_images(md_content)
for alt, url in images:
# 下载图片
filename = os.path.basename(url)
local_path = f"temp/{filename}"
download_image(url, local_path)
# 上传到目标平台
new_url = upload_func(local_path)
# 替换原文中的链接
md_content = md_content.replace(url, new_url)
return md_content其他平台适配
知乎格式
python
def markdown_to_zhihu(md_content):
"""转换为知乎格式"""
# 知乎支持部分 Markdown,但有些语法需要调整
content = md_content
# 知乎不支持 HTML 标签
content = re.sub(r'<[^>]+>', '', content)
return content小红书格式
python
def markdown_to_xiaohongshu(md_content):
"""转换为小红书格式"""
# 小红书以图片为主,文字需要精简
# 移除 Markdown 标记
content = re.sub(r'[#*`_\[\]]', '', md_content)
# 添加表情符号增加可读性
content = content.replace('。', '~')
# 限制字数(小红书正文限制 1000 字)
if len(content) > 1000:
content = content[:997] + '...'
return content统一格式化接口
python
class ContentFormatter:
"""内容格式化器"""
def __init__(self):
self.formatters = {
'wechat': markdown_to_wechat,
'zhihu': markdown_to_zhihu,
'xiaohongshu': markdown_to_xiaohongshu,
'juejin': lambda x: x, # 掘金原生支持 Markdown
}
def format(self, content, platform):
"""格式化内容"""
formatter = self.formatters.get(platform)
if formatter:
return formatter(content)
return content下一步
内容格式化完成,接下来构建用户界面。