写一次内容,自动适配小红书、微博、知乎、公众号、朋友圈五个平台的风格。告别反复改写同一内容的痛苦。
写一篇干货文章,然后手动改成小红书风格、微博风格、知乎风格……
同一个内容,改五遍。每个平台的调性不一样,字数不一样,标签也不一样。
你只需要写一遍原始内容,剩下的交给脚本。
今天做一个社交媒体内容生成器。输入一篇文章,自动生成五个平台的适配文案,直接复制到对应平台发布。
项目背景
做内容运营的人都知道,多平台分发是标配动作。但问题来了:
- 小红书要emoji、短句、分段密
- 微博要短平快、带话题标签
- 知乎要专业严谨、逻辑清晰
- 公众号可以长一点、排版讲究
- 朋友圈要生活化、像朋友聊天
手动改五遍,一小时没了。用 AI 批量生成,十分钟搞定。
市面上有付费工具能做这件事,但价格不菲。自己写一个,零成本,还能随时改 prompt。
技术选型
| 组件 | 选择 | 理由 |
|---|---|---|
| 大模型 | OpenAI / 通义千问 | 语义改写能力强 |
| 内容解析 | BeautifulSoup | 提取文章正文,去掉广告和导航 |
| 输出格式 | Markdown | 保留排版,方便直接粘贴 |
| 调度 | APScheduler | 定时抓取 RSS 或文件自动生成 |
实现步骤
第一步:安装依赖
pip install openai beautifulsoup4 requests pyyaml
第二步:平台风格配置
创建 platforms.yaml,定义每个平台的风格要求:
platforms:
xiaohongshu:
name: "小红书"
style: "活泼亲切,多用emoji,短句分段,每段不超过2行"
max_length: 1000
include_hashtags: true
hashtag_count: 5
tone: "种草风格,像在跟闺蜜分享好物"
weibo:
name: "微博"
style: "短平快,观点鲜明,带话题标签"
max_length: 280
include_hashtags: true
hashtag_count: 3
tone: "犀利点评风格"
zhihu:
name: "知乎"
style: "专业严谨,逻辑清晰,适当引用数据"
max_length: 3000
include_hashtags: false
tone: "理性分析风格"
weixin:
name: "公众号"
style: "深度长文,结构完整,有引言和总结"
max_length: 5000
include_hashtags: false
tone: "专业科普风格"
moments:
name: "朋友圈"
style: "口语化,像日常分享,不要太正式"
max_length: 200
include_hashtags: false
tone: "朋友间闲聊风格"
第三步:核心生成脚本
创建 social_poster.py:
import yaml
import os
from openai import OpenAI
from bs4 import BeautifulSoup
from pathlib import Path
# 加载配置
with open("platforms.yaml", "r", encoding="utf-8") as f:
platforms_config = yaml.safe_load(f)
# 初始化客户端(支持 OpenAI 兼容接口)
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY", "YOUR_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1"),
)
OUTPUT_DIR = Path(__file__).parent / "outputs"
OUTPUT_DIR.mkdir(exist_ok=True)
def extract_article(text):
"""提取文章核心内容,去掉多余格式"""
# 如果输入是 HTML,用 BeautifulSoup 提取正文
if "<html" in text.lower():
soup = BeautifulSoup(text, "html.parser")
# 移除 script 和 style 标签
for tag in soup(["script", "style", "nav", "footer"]):
tag.decompose()
text = soup.get_text(separator="\n")
# 按段落分割,取前 N 段作为核心内容
paragraphs = [p.strip() for p in text.split("\n\n") if len(p.strip()) > 20]
return "\n\n".join(paragraphs[:20])
def generate_for_platform(article_text, platform_key):
"""针对单个平台生成文案"""
plat = platforms_config["platforms"][platform_key]
prompt = f"""
你是一个专业的社交媒体内容编辑。请把下面的文章改写成{plat['name']}风格的文案。
平台要求:
- 风格:{plat['style']}
- 语气:{plat['tone']}
- 最大字数:{plat['max_length']}字
规则:
1. 保留原文核心观点和信息
2. 按照平台风格调整表达方式和长度
3. {'需要添加 ' + str(plat['hashtag_count']) + ' 个相关话题标签' if plat.get('include_hashtags') else '不需要添加话题标签'}
4. 直接输出文案,不要加任何解释
原文:
{article_text[:3000]}
"""
response = client.chat.completions.create(
model=os.getenv("MODEL_NAME", "gpt-3.5-turbo"),
messages=[{"role": "user", "content": prompt}],
temperature=0.8,
max_tokens=plat["max_length"],
)
return response.choices[0].message.content
def generate_all(article_text):
"""为所有平台生成文案"""
cleaned = extract_article(article_text)
results = {}
for platform_key in platforms_config["platforms"]:
print(f"正在生成 {platforms_config['platforms'][platform_key]['name']} 文案...")
try:
content = generate_for_platform(cleaned, platform_key)
results[platform_key] = content
except Exception as e:
results[platform_key] = f"生成失败: {e}"
return results
def save_output(results, source_title=""):
"""保存生成结果到文件"""
timestamp = Path(__file__).parent / "outputs" / f"{source_title or 'post'}_{os.popen('date +%Y%m%d_%H%M%S').read().strip()}.md"
with open(timestamp, "w", encoding="utf-8") as f:
if source_title:
f.write(f"# {source_title}\n\n")
for platform_key, content in results.items():
plat_name = platforms_config["platforms"][platform_key]["name"]
f.write(f"---\n\n")
f.write(f"## 📱 {plat_name}\n\n")
f.write(f"{content}\n\n")
print(f"✅ 已保存到: {timestamp}")
return timestamp
if __name__ == "__main__":
import sys
# 支持命令行输入或读取文件
if len(sys.argv) > 1:
article_path = sys.argv[1]
with open(article_path, "r", encoding="utf-8") as f:
article_text = f.read()
source = os.path.splitext(os.path.basename(article_path))[0]
else:
print("请输入文章内容(输入空行结束):")
lines = []
while True:
line = input()
if not line.strip():
break
lines.append(line)
article_text = "\n".join(lines)
source = "manual_input"
results = generate_all(article_text)
save_output(results, source)
# 同时在终端打印结果,方便直接复制
print("\n" + "=" * 50)
for platform_key, content in results.items():
plat_name = platforms_config["platforms"][platform_key]["name"]
print(f"\n📱 {plat_name}:\n{content}\n{'-' * 40}")
第四步:运行
# 方式一:从文件读取
python social_poster.py article.md
# 方式二:交互式输入
python social_poster.py
# 方式三:配合环境变量
export OPENAI_API_KEY=sk-xxx
export OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
export MODEL_NAME=qwen-plus
python social_poster.py article.md
第五步:定时自动生成
如果你有 RSS 订阅或者定期写文章,可以加一个定时任务:
from apscheduler.schedulers.blocking import BlockingScheduler
def daily_generate():
"""每天早上9点检查 articles/ 目录下最新的文章"""
articles_dir = Path(__file__).parent / "articles"
if not articles_dir.exists():
return
latest = max(articles_dir.glob("*.md"), key=os.path.getmtime)
with open(latest, "r", encoding="utf-8") as f:
content = f.read()
results = generate_all(content)
save_output(results, latest.stem)
# 每天早上9点执行
scheduler = BlockingScheduler()
scheduler.add_job(daily_generate, "cron", hour=9, minute=0)
scheduler.start()
运行效果
假设输入一篇关于"AI 工具推荐"的文章,生成的五个平台文案大致如下:
小红书:
姐妹们!最近挖到几个超好用的 AI 工具🤩
1️⃣ 写文案神器 —— 输入主题,5分钟出稿
2️⃣ 图片生成 —— 连 PS 都省了
3️⃣ 视频剪辑 —— 字幕自动对齐
亲测好用,收藏不亏!✨
#AI工具 #效率提升 #自媒体运营 #黑科技 #打工人必备
微博:
【AI工具盘点|这3个真的能救命】
写不出文案?让AI帮你出初稿。
做不了图?Midjourney几秒钟搞定。
剪视频太慢?自动字幕+模板一键成片。
工具本身不卷人,会用工具的人才卷。
#AI工具 #效率神器 #自媒体
知乎:
作为一名内容创作者,我在过去半年里测试了超过30款AI工具。以下是我认为真正值得投入时间的三个方向:
一、文案生成类工具
核心能力已从简单的模板填充进化到语义理解...
(详细展开,约1500字)
公众号:
标题:别再手动改文案了!我用 Python 做了一个多平台内容分发工具
正文约2000字,包含工具介绍、代码演示、效果对比...
朋友圈:
今天折腾了一个小脚本,把一篇文章自动改成5种风格。小红书、微博、知乎、公众号、朋友圈一次性搞定。
省下来的时间够多喝两杯咖啡☕️
优化方向
基础版已经能跑,想更好用的话可以加这些功能:
- 模板化:预设不同行业的内容模板(科技、美妆、教育),改写时更精准
- 图片生成:搭配 DALL·E 或 Stable Diffusion,为每个平台生成适配尺寸的图片
- 定时发布:对接各平台 API,到点自动发布(微博、知乎有开放 API)
- 数据回流:抓取各平台发布后的阅读量、点赞数,反哺优化 prompt
- A/B 测试:同一内容生成两个版本,先在朋友圈测试再决定主推哪个
- 多语言:一键翻译成英文/日文,同步发到 Medium、Twitter 等平台
内容创作的成本正在下降,但好内容的门槛并没有降低。
工具只是帮你省时间,真正打动人的还是你对行业的理解和独特的观点。
把你的第一篇内容丢进去试试,看看五个平台的版本哪个效果最好。
这篇文章对你有帮助吗?