**别再手动发帖了!这款开源工具让你一次搞定所有社交平台,自动发布效率翻10倍**

**别再手动发帖了!这款开源工具让你一次搞定所有社交平台,自动发布效率翻10倍**

别再手动发帖了!这款开源工具让你一次搞定所有社交平台,自动发布效率翻10倍


为什么这个项目值得关注

当代内容创作者的核心痛点

你是否曾经为这些问题头疼过?

在当今社交媒体时代,内容创作者面临着一个巨大的挑战:需要在多个平台同步发布内容。从微信公众号到微博,从小红书到抖音,每个平台都有独特的发布规则和上传方式。手动一个个登录、编辑、上传,不仅耗时耗力,还容易出现发布时间不一致、内容格式不统一等问题。

DreamMis 团队开源的 social-auto-upload 项目,正是为解决这一痛点而生。这是一个专门用于自动化社交媒体内容发布的 Python 工具,它能够让你:

  • 一次性向多个平台发布相同内容,省去繁琐的重复操作
  • 支持主流社交媒体平台,包括微博、小红书、知乎等
  • 自动化处理媒体文件,图片、视频自动适配各平台要求
  • 配置简单、上手容易,即使不懂编程也能快速上手

如果你是一名需要管理多个社交账号的内容创作者、企业新媒体运营者,或者是一个技术爱好者想要探索自动化工具,这个项目绝对值得你花时间了解。


环境搭建:十分钟快速入门

系统要求

在开始之前,确认你的开发环境满足以下要求:

  • 操作系统:Windows、macOS 或 Linux 均可
  • Python 版本:推荐使用 Python 3.8 或更高版本
  • 网络环境:需要能够访问各社交平台的 API

安装步骤

第一步:检查 Python 环境

打开终端或命令提示符,输入以下命令检查 Python 是否已安装:

python --version

如果看到类似 Python 3.10.0 的输出,说明 Python 已经安装。如果显示”命令未找到”,你需要先安装 Python。建议访问 Python 官方网站下载安装包,或使用 Anaconda 进行安装。

第二步:克隆或下载项目

你可以通过以下方式获取项目代码:

方式一:使用 Git 克隆仓库

git clone https://github.com/dreammis/social-auto-upload.git
cd social-auto-upload

方式二:直接下载 ZIP 包

访问 GitHub 仓库页面,点击”Code”按钮,选择”Download ZIP”,然后解压到本地目录。

第三步:创建虚拟环境(推荐)

为了避免包版本冲突,建议创建一个独立的虚拟环境:

python -m venv venv

在 Windows 系统上激活虚拟环境:

venv\Scripts\activate

在 macOS 和 Linux 系统上激活虚拟环境:

source venv/bin/activate

激活成功后,终端提示符前面会出现 (venv) 标记。

第四步:安装依赖包

项目所需的依赖都在 requirements.txt 文件中定义,使用 pip 安装:

pip install -r requirements.txt

安装过程可能需要几分钟时间,耐心等待即可。如果遇到安装失败的情况,检查一下网络连接,或者尝试使用国内镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

第五步:验证安装

安装完成后,运行以下命令验证是否安装成功:

python -m social_auto_upload --version

如果看到版本号输出,说明安装成功,可以开始使用了。


核心功能详解

多平台支持

social-auto-upload 项目目前支持的主流社交媒体平台包括:

平台 主要功能 特殊支持
微博 文字、图文、视频发布 话题标签、@用户
小红书 图文笔记、视频笔记 话题、地理位置
知乎 文章、问答 匿名发布
微信公众号 图文消息 自动生成摘要
抖音/头条号 视频发布(字节系) 话题标签

每个平台都有其独特的 API 接口和发布规则,项目已经帮你封装好了这些细节,你只需要关注内容本身。

智能媒体处理

不同平台对图片和视频的要求各不相同:

  • 微博:图片最多 9 张,单张不超过 20MB
  • 小红书:图片建议 3:4 或 1:1 比例,单张不超过 20MB
  • 知乎:图片不超过 20MB,支持多种格式

项目内置了智能处理模块,能够自动完成以下操作:

  • 图片格式转换和压缩
  • 视频格式适配和分辨率调整
  • 自动裁剪和缩放以适应平台要求
  • EXIF 信息处理和隐私保护

配置管理

项目采用 YAML 格式的配置文件,让配置变得清晰易懂:

platforms:
  weibo:
    enabled: true
    cookies: "your_weibo_cookies_here"
    auto_reply: false

  xiaohongshu:
    enabled: true
    cookies: "your_xhs_cookies_here"
    device_id: "your_device_id"

配置与代码分离,便于管理和维护,也方便在不同环境间迁移。


实战教程:一步步掌握自动发布

第一课:配置你的第一个平台

让我们从最简单的配置开始,先让项目能够在单个平台上发布内容。

创建配置文件

在项目根目录下创建一个 config.yaml 文件,这是项目的核心配置文件。基础配置模板如下:

# 社交平台自动发布工具配置文件
# 请根据实际情况填写各平台的认证信息

# 全局设置
global:
  retry_times: 3          # 失败重试次数
  retry_interval: 5       # 重试间隔(秒)
  log_level: "INFO"       # 日志级别
  upload_timeout: 300     # 上传超时时间(秒)

# 微博配置
weibo:
  enabled: true
  # 微博使用 Cookie 进行认证
  # 获取方法:登录微博网页版,按 F12 打开开发者工具,
  # 在 Network 面板中找到任意请求,复制 Request Headers 中的 Cookie
  cookies: "SUB=_2A25K..."
  # 发布后是否自动转发(可选)
  auto_retweet: false
  # 默认可见性:public-公开/private-私密
  visibility: "public"

# 小红书配置
xiaohongshu:
  enabled: true
  # 小红书同样使用 Cookie 认证
  cookies: "webId=xxx; web_session=xxx"
  # 设备 ID,用于标识设备
  device_id: "a1b2c3d4e5f6"
  # 默认话题标签
  default_topics:
    - "#日常分享"
    - "#好物推荐"

获取平台认证信息

不同平台获取认证信息的方式略有不同,这里详细介绍最常用的微博和小红书:

微博 Cookie 获取步骤:

  1. 使用浏览器登录微博网页版(weibo.com)
  2. 按 F12 打开开发者工具
  3. 切换到”Network”(网络)标签页
  4. 刷新页面,在请求列表中找到任意一个请求
  5. 点击该请求,在右侧找到”Request Headers”
  6. 找到 “Cookie” 字段,复制其全部内容

小红书 Cookie 获取步骤:

  1. 登录小红书网页版(xiaohongshu.com)
  2. 同样按 F12 打开开发者工具
  3. 在 Network 面板中找到请求
  4. 复制 Cookie 值

重要提示:Cookie 包含敏感信息,请妥善保管,不要将其提交到代码仓库。建议将敏感信息存储在环境变量中,配置文件中只引用变量名。

第二课:发布你的第一条内容

配置完成后,让我们来发布第一条内容。项目支持多种内容格式,下面逐一介绍。

纯文本发布

最简单的发布场景,只包含文字内容:

from social_auto_upload import AutoUploader

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 准备内容
content = {
    "platform": "weibo",
    "text": "今天天气真好,适合出去走走!#周末愉快#",
}

# 发布
result = uploader.publish(content)
print(f"发布结果:{result}")

图文内容发布

这是最常用的发布方式,包含文字和图片:

from social_auto_upload import AutoUploader

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 准备图文内容
content = {
    "platform": "weibo",
    "text": "分享一组最近拍的照片,大家觉得怎么样?",
    "images": [
        "photos/landscape_01.jpg",
        "photos/landscape_02.jpg",
        "photos/landscape_03.jpg",
    ],
    # 可选:添加位置信息
    "location": "北京市朝阳区",
}

# 发布
result = uploader.publish(content)
print(f"发布结果:{result}")

小红书笔记发布

小红书有特殊的内容格式要求,图片比例建议使用 3:4:

from social_auto_upload import AutoUploader

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 准备小红书笔记内容
content = {
    "platform": "xiaohongshu",
    "title": "这款神器让我效率提升10倍|真实测评",
    "text": """今天要跟大家分享一款我最近一直在用的工具。

之前每次发布内容都要手动登录各个平台,浪费时间不说,还经常出错。

自从用了这个自动发布工具,我只需要准备一份内容,就能一键同步到所有平台!

【使用感受】
1. 配置简单,新手也能快速上手
2. 支持多个主流平台
3. 界面友好,操作流畅

强烈推荐给需要管理多平台账号的朋友们!""",
    "images": [
        "xiaohongshu/cover.jpg",
        "xiaohongshu/detail_01.jpg",
        "xiaohongshu/detail_02.jpg",
        "xiaohongshu/detail_03.jpg",
    ],
    # 小红书特殊参数
    "topics": ["#效率工具", "#好物分享", "#科技数码"],
    "category": "数码",
}

result = uploader.publish(content)
print(f"发布结果:{result}")

多平台同时发布

项目的核心优势在于一次内容,多平台分发:

from social_auto_upload import AutoUploader

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 准备统一的内容素材
content = {
    "title": "我的2024年度总结",
    "text": """2024年是不平凡的一年。

这一年我完成了:
- 学会了Python编程
- 独立开发了3个项目
- 阅读了20本书
- 坚持运动了200天

感谢每一个支持我的朋友,新的一年继续加油!""",
    "images": [
        "summary/photo_01.jpg",
        "summary/photo_02.jpg",
        "summary/photo_03.jpg",
    ],
}

# 为不同平台定制不同的内容表达
# 微博版本:简洁直接
weibo_content = {
    **content,
    "text": content["text"] + "#2024年度总结#",
}

# 小红书版本:详细生动
xiaohongshu_content = {
    **content,
    "title": "2024年度复盘|我是如何实现自我成长的",
    "topics": ["#年度总结", "#自我成长", "#2024"],
}

# 同时发布到多个平台
results = uploader.publish_multi([
    {"platform": "weibo", **weibo_content},
    {"platform": "xiaohongshu", **xiaohongshu_content},
])

# 打印各平台发布结果
for platform, result in results.items():
    print(f"{platform}: {result['status']}")

第三课:高级功能使用

定时发布功能

内容创作讲究时机,定时发布能帮你把握最佳发布时机:

from social_auto_upload import AutoUploader
from datetime import datetime, timedelta

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 设置发布时间为明天的上午10点
tomorrow = datetime.now() + timedelta(days=1)
schedule_time = tomorrow.replace(hour=10, minute=0, second=0)

# 准备内容
content = {
    "platform": "weibo",
    "text": "早安!新的一天,新的开始~",
    "images": ["morning/sunrise.jpg"],
}

# 设置定时发布
schedule = uploader.schedule(content, publish_time=schedule_time)

print(f"已安排发布,任务ID:{schedule['task_id']}")
print(f"预计发布时间:{schedule_time}")

批量发布功能

当需要发布大量内容时,可以使用批量发布功能:

from social_auto_upload import AutoUploader
import json

# 初始化发布器
uploader = AutoUploader(config_path="config.yaml")

# 从 JSON 文件读取内容列表
# 假设 content_list.json 格式如下:
# [
#     {"platform": "weibo", "text": "内容1", "images": ["img1.jpg"]},
#     {"platform": "weibo", "text": "内容2", "images": ["img2.jpg"]},
#     ...
# ]

with open("content_list.json", "r", encoding="utf-8") as f:
    content_list = json.load(f)

# 设置发布间隔(秒),避免发布过于频繁
batch_config = {
    "interval": 300,  # 每条内容间隔5分钟
    "retry_on_fail": True,
}

# 开始批量发布
results = uploader.publish_batch(content_list, **batch_config)

# 统计发布结果
success_count = sum(1 for r in results if r["status"] == "success")
fail_count = len(results) - success_count

print(f"批量发布完成:成功 {success_count} 条,失败 {fail_count} 条")

媒体文件智能处理

项目提供了强大的媒体处理功能,可以自动适配不同平台的要求:

from social_auto_upload.media import MediaProcessor

# 初始化媒体处理器
processor = MediaProcessor()

# 图片预处理示例
# 假设原图尺寸和格式不符合小红书要求

original_image = "photos/original.jpg"

# 处理图片:
# 1. 调整为 3:4 比例(小红书最佳尺寸)
# 2. 压缩到合适大小
# 3. 转换为 JPEG 格式

processed = processor.process_image(
    original_image,
    target_ratio="3:4",
    max_size=5 * 1024 * 1024,  # 5MB
    format="JPEG",
    platform="xiaohongshu",
)

# 保存处理后的图片
output_path = "processed/xiaohongshu_cover.jpg"
processed.save(output_path)

print(f"图片已处理完成:{output_path}")
print(f"原图大小:{processed.original_size / 1024 / 1024:.2f} MB")
print(f"处理后大小:{processed.output_size / 1024 / 1024:.2f} MB")

视频处理功能同样强大:

from social_auto_upload.media import MediaProcessor

processor = MediaProcessor()

# 视频预处理
# 不同平台对视频的要求不同:
# - 微博:最长15分钟,大小不超过 1GB
# - 小红书:最长5分钟,建议竖屏
# - 抖音:最长15分钟,建议9:16竖屏

original_video = "videos/raw_video.mp4"

# 处理为小红书适用的格式
processed_video = processor.process_video(
    original_video,
    platform="xiaohongshu",
    # 小红书建议参数
    aspect_ratio="9:16",
    max_duration=300,  # 5分钟
    max_file_size=100 * 1024 * 1024,  # 100MB
    codec="h264",
)

output_path = "processed/xiaohongshu_video.mp4"
processed_video.save(output_path)

print(f"视频已处理完成:{output_path}")
print(f"时长:{processed_video.duration} 秒")
print(f"分辨率:{processed_video.width}x{processed_video.height}")

第四课:自定义扩展开发

如果你需要支持项目默认不支持的平台,或者有特殊的需求,可以利用项目的扩展机制。

添加新平台支持

假设我们需要添加对某个新平台的支持,可以这样做:

from social_auto_upload.core import BasePlatform, PlatformRegistry

# 定义新平台类
class MyCustomPlatform(BasePlatform):
    """自定义社交平台"""

    platform_name = "my_custom_platform"

    def __init__(self, config):
        super().__init__(config)
        self.api_url = config.get("api_url", "https://api.example.com")
        self.access_token = config.get("access_token")

    def authenticate(self):
        """认证逻辑"""
        # 实现你的认证逻辑
        headers = {
            "Authorization": f"Bearer {self.access_token}",
            "Content-Type": "application/json",
        }
        return headers

    def publish(self, content):
        """发布内容"""
        headers = self.authenticate()

        # 构建 API 请求
        payload = {
            "text": content.get("text", ""),
            "images": content.get("images", []),
            "visibility": content.get("visibility", "public"),
        }

        response = self._make_request(
            method="POST",
            url=f"{self.api_url}/posts",
            headers=headers,
            json=payload,
        )

        return {
            "status": "success" if response.status_code == 200 else "failed",
            "post_id": response.json().get("id"),
            "url": response.json().get("url"),
        }

    def get_post_status(self, post_id):
        """获取帖子状态"""
        headers = self.authenticate()
        response = self._make_request(
            method="GET",
            url=f"{self.api_url}/posts/{post_id}",
            headers=headers,
        )
        return response.json()

# 注册新平台
PlatformRegistry.register("my_custom_platform", MyCustomPlatform)

# 现在可以在配置和代码中使用这个新平台了

常见使用场景

场景一:企业新媒体矩阵运营

对于同时运营多个品牌账号的企业来说,social-auto-upload 能够极大提升工作效率:

from social_auto_upload import AutoUploader

# 初始化发布器(配置好各品牌账号)
uploader = AutoUploader(config_path="enterprise_config.yaml")

# 统一的营销活动内容
campaign_content = {
    "title": "【限时优惠】新品上市,全场8折!",
    "text": """好消息!我们的新品正式上市啦~

即日起至本月底,全场商品享受8折优惠!

活动期间:
✓ 满199包邮
✓ 会员双倍积分
✓ 新客再减20元

快来选购吧,数量有限,先到先得!""",
    "images": [
        "campaign/banner.jpg",
        "campaign/product_01.jpg",
        "campaign/product_02.jpg",
        "campaign/product_03.jpg",
    ],
}

# 一次性发布到所有品牌账号
# 每个账号可以有不同的内容变体
brand_posts = [
    {
        "platform": "weibo",
        "account": "brand_official",
        **campaign_content,
        "text": campaign_content["text"] + "#品牌活动#",
    },
    {
        "platform": "xiaohongshu",
        "account": "brand_lifestyle",
        **campaign_content,
        "topics": ["#新品上市", "#限时优惠", "#时尚穿搭"],
    },
    {
        "platform": "weibo",
        "account": "brand_tech",
        **campaign_content,
        "text": campaign_content["text"] + "#科技新品#",
    },
]

results = uploader.publish_multi(brand_posts)

# 生成运营报告
report = uploader.generate_report(results)
print(report)

场景二:个人博主内容管理

个人博主通常需要在多个平台建立影响力,但时间有限:

from social_auto_upload import AutoUploader
from datetime import datetime

# 博主配置
uploader = AutoUploader(config_path="blogger_config.yaml")

# 规划一周的内容发布
weekly_schedule = [
    {
        "day": "Monday",
        "platform": "weibo",
        "type": "inspiration",
        "content": "新的一周,从早安开始...",
    },
    {
        "day": "Tuesday",
        "platform": "xiaohongshu",
        "type": "tutorial",
        "content": "教程:如何用手机拍出专业级照片...",
    },
    {
        "day": "Wednesday",
        "platform": "weibo",
        "type": "behind_scene",
        "content": "幕后花絮,带你看看我的工作台...",
    },
    {
        "day": "Thursday",
        "platform": "xiaohongshu",
        "type": "review",
        "content": "月度好物分享,这些真的很好用...",
    },
    {
        "day": "Friday",
        "platform": "weibo",
        "type": "interaction",
        "content": "周末话题互动:你这周最开心的事是什么?",
    },
]

# 为每天的内容设置定时发布
for schedule in weekly_schedule:
    # 根据星期几设置发布时间
    from datetime import timedelta

    today = datetime.now()
    days_until = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"].index(
        schedule["day"]
    )
    target_date = today + timedelta(days=days_until)

    # 设置不同的发布时间
    if schedule["type"] == "inspiration":
        publish_time = target_date.replace(hour=7, minute=0)
    elif schedule["type"] == "tutorial":
        publish_time = target_date.replace(hour=12, minute=0)
    elif schedule["type"] == "interaction":
        publish_time = target_date.replace(hour=20, minute=0)
    else:
        publish_time = target_date.replace(hour=18, minute=0)

    uploader.schedule(
        {
            "platform": schedule["platform"],
            "text": schedule["content"],
        },
        publish_time=publish_time,
    )

print("一周内容计划已安排完成!")

场景三:电商产品上新

电商从业者可以用这个工具快速将新品信息同步到各个平台:

from social_auto_upload import AutoUploader

uploader = AutoUploader(config_path="ecommerce_config.yaml")

# 产品信息
product = {
    "name": "智能无线耳机 Pro",
    "price": "299",
    "features": [
        "主动降噪技术",
        "30小时超长续航",
        "Hi-Fi级音质",
        "蓝牙5.3稳定连接",
    ],
    "images": [f"products/earphone_{i}.jpg" for i in range(1, 6)],
}

# 适配各平台的文案
platform_contents = [
    # 微博版本 - 简洁促销
    {
        "platform": "weibo",
        "text": f"""🎧 新品上市 | {product['name']}

💰 特价:¥{product['price']}

{product['features'][0]}
{product['features'][1]}
{product['features'][2]}

点击链接立即购买 → example.com/product

#数码好物# #新品首发#""",
        "images": product["images"],
    },
    # 小红书版本 - 种草风格
    {
        "platform": "xiaohongshu",
        "title": f"挖到宝了!这个耳机也太绝了😭 | {product['name']}测评",
        "text": f"""姐妹们!今天要给你们安利一款我刚入手的耳机!

就是这款 {product['name']},用了几天下来真的太满意了!

【亮点总结】
{' '.join(['• ' + f for f in product['features']])}

之前一直想找一款降噪效果好又续航给力的耳机,试了这款直接爱了!

💰 价格也很美丽,只要 ¥{product['price']}

推荐指数:⭐️⭐️⭐️⭐️⭐️""",
        "images": product["images"],
        "topics": ["#耳机推荐", "#蓝牙耳机", "#降噪耳机", "#数码测评"],
    },
    # 知乎版本 - 专业分析
    {
        "platform": "zhihu",
        "title": f"如何评价 {product['name']}?值不值得买?",
        "text": f"""作为一个数码爱好者,最近入手了 {product['name']},来分享下使用感受。

【核心参数】
- 降噪深度:支持主动降噪
- 续航时间:{product['features'][1]}
- 音频编码:支持 AAC、SBC
- 连接方式:{product['features'][3]}

【使用体验】
这几天深度使用下来,这款耳机在同价位产品中表现出色。特别是降噪效果,在地铁、办公室等场景下都能很好地隔绝噪音。

【总结】
结合 ¥{product['price']} 的售价,如果你需要一款日常使用的无线耳机,这是一个不错的选择。""",
        "images": product["images"][:3],
    },
]

# 发布到所有平台
results = uploader.publish_multi(platform_contents)

技巧与最佳实践

提升发布成功率

网络不稳定或平台接口限流可能导致发布失败,以下技巧能帮你提高成功率:

from social_auto_upload import AutoUploader

# 配置重试策略
config = {
    "global": {
        "retry_times": 3,           # 失败重试3次
        "retry_interval": 10,        # 每次重试间隔10秒
        "retry_backoff": "expo",     # 指数退避:10s, 20s, 40s...
        "timeout": 60,               # 单次请求超时60秒
    },
    "rate_limit": {
        "weibo": {
            "requests_per_minute": 10,
            "requests_per_hour": 60,
        },
        "xiaohongshu": {
            "requests_per_minute": 5,
            "requests_per_hour": 30,
        },
    },
}

uploader = AutoUploader(config=config)

# 发布时启用自动重试
content = {
    "platform": "weibo",
    "text": "测试内容",
    "images": ["test.jpg"],
}

result = uploader.publish(content, retry=True)

保护敏感信息

生产环境中,务必保护好你的认证信息:

import os
from social_auto_upload import AutoUploader

# 方式一:使用环境变量
# 在系统环境变量中设置:
# export WEIBO_COOKIES="your_weibo_cookies"
# export XHS_COOKIES="your_xhs_cookies"

config = {
    "weibo": {
        "enabled": True,
        # 从环境变量读取,而不是硬编码
        "cookies": os.environ.get("WEIBO_COOKIES", ""),
    },
    "xiaohongshu": {
        "enabled": True,
        "cookies": os.environ.get("XHS_COOKIES", ""),
    },
}

uploader = AutoUploader(config=config)

# 方式二:使用专门的密钥管理服务
# 适用于企业级应用
from social_auto_upload.security import SecretManager

secrets = SecretManager(
    provider="aws_secrets_manager",  # 或 "azure_key_vault", "gcp_secret_manager"
    secret_name="social-auto-upload/production",
)

config["weibo"]["cookies"] = secrets.get("weibo_cookies")
config["xiaohongshu"]["cookies"] = secrets.get("xhs_cookies")

内容排重策略

同一内容在多个平台发布时,为了获得更好的 SEO 效果,建议做一些本地化调整:

from social_auto_upload.utils import ContentAdapter

# 内容适配器 - 自动生成平台特定的内容变体
adapter = ContentAdapter()

base_content = {
    "title": "如何提升工作效率",
    "body": "分享5个提升工作效率的方法...",
    "hashtags": ["#效率", "#职场", "#成长"],
}

# 自动适配到不同平台
adapted = adapter.adapt(
    base_content,
    platforms=["weibo", "xiaohongshu", "zhihu"],
    # 内容变化程度:0-1,0表示完全相同,1表示完全重写
    variation_level=0.3,
)

# 查看适配结果
for platform, content in adapted.items():
    print(f"\n=== {platform} ===")
    print(f"标题: {content['title']}")
    print(f"正文: {content['body']}")
    print(f"标签: {content['hashtags']}")

日志与监控

建立完善的日志记录,方便排查问题和监控运营状态:

from social_auto_upload import AutoUploader
from social_auto_upload.logging import setup_logger

# 配置日志
logger = setup_logger(
    name="social-auto-upload",
    log_file="logs/upload.log",
    level="INFO",
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)

# 初始化发布器
uploader = AutoUploader(
    config_path="config.yaml",
    logger=logger,
)

# 设置发布结果回调
def on_publish_complete(result):
    """发布完成后的回调函数"""
    platform = result["platform"]
    status = result["status"]

    if status == "success":
        logger.info(
            f"发布成功 | 平台: {platform} | "
            f"帖子ID: {result['post_id']} | "
            f"链接: {result['url']}"
        )
    else:
        logger.error(
            f"发布失败 | 平台: {platform} | "
            f"错误: {result.get('error')}"
        )
        # 这里可以添加告警通知逻辑
        # send_alert(result)

uploader.on_publish = on_publish_complete

定期维护

社交平台的登录状态有有效期,需要定期维护:

from social_auto_upload import AutoUploader
from datetime import datetime, timedelta

uploader = AutoUploader(config_path="config.yaml")

# 检查 Cookie 有效期
def check_cookies_expiry():
    """定期检查并更新 Cookie"""
    config = uploader.load_config()

    for platform, settings in config.items():
        if platform == "global":
            continue

        cookies = settings.get("cookies", "")
        expiry = uploader.check_cookie_expiry(cookies, platform)

        if expiry:
            days_left = (expiry - datetime.now()).days

            if days_left < 7:
                print(f"警告:{platform} 的 Cookie 将在 {days_left} 天后过期!")
                # 这里可以发送通知邮件
                # send_expiry_alert(platform, days_left)

            if days_left <= 0:
                print(f"错误:{platform} 的 Cookie 已过期,需要重新登录获取!")

# 建议每周运行一次检查
check_cookies_expiry()

进阶功能与扩展

与其他工具集成

social-auto-upload 可以与其他自动化工具配合使用,实现更强大的工作流:

与 Notion 集成 – 内容管理

from social_auto_upload.integrations import NotionClient

# 连接 Notion 数据库
notion = NotionClient(
    api_key="your_notion_api_key",
    database_id="your_database_id",
)

# 获取待发布的内容
drafts = notion.get_items_with_status("待发布")

for draft in drafts:
    # 转换为发布格式
    content = {
        "platform": draft["platform"],
        "title": draft["title"],
        "text": draft["content"],
        "images": draft["images"],
        "scheduled_date": draft["scheduled_date"],
    }

    # 发布内容
    result = uploader.publish(content)

    # 更新 Notion 状态
    notion.update_item_status(draft["id"], "已发布")

与钉钉/飞书集成 – 通知提醒

from social_auto_upload.integrations import DingTalkBot

# 配置钉钉机器人
dingtalk = DingTalkBot(
    webhook_url="https://oapi.dingtalk.com/robot/send?access_token=xxx",
    secret="your_secret",
)

# 发布成功后发送通知
content = {
    "platform": "weibo",
    "text": "测试内容",
}

result = uploader.publish(content)

if result["status"] == "success":
    dingtalk.send(
        message=f"""✅ 内容发布成功!

平台:微博
帖子ID:{result['post_id']}
链接:{result['url']}
时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
""",
    )

自定义工作流

对于复杂的运营场景,可以构建自动化工作流:

from social_auto_upload.workflow import WorkflowBuilder

# 创建工作流
workflow = WorkflowBuilder(name="新品发布工作流")

# 第一步:内容准备
workflow.add_step(
    name="prepare_content",
    func=prepare_product_content,
    params={"product_id": "12345"},
)

# 第二步:图片处理
workflow.add_step(
    name="process_images",
    func=process_product_images,
    depends_on=["prepare_content"],
)

# 第三步:草稿件审
workflow.add_step(
    name="review_draft",
    func=send_for_review,
    depends_on=["process_images"],
    # 人工确认后继续
    requires_approval=True,
)

# 第四步:多平台发布
workflow.add_step(
    name="publish",
    func=publish_to_all_platforms,
    depends_on=["review_draft"],
)

# 第五步:效果追踪
workflow.add_step(
    name="track",
    func=track_performance,
    depends_on=["publish"],
    # 异步执行,不阻塞主流程
    async=True,
)

# 执行工作流
result = workflow.execute()

print(f"工作流执行完成:{result['status']}")

常见问题解答

Q1:发布时提示”登录状态失效”怎么办?

这是因为平台检测到 Cookie 过期或被踢出登录状态。解决方法:

  1. 重新在浏览器中登录该平台
  2. 按照前述步骤重新获取 Cookie
  3. 更新配置文件中的 Cookie 值

建议:定期(比如每周)检查并更新 Cookie,避免影响正常使用。

Q2:图片上传失败怎么解决?

可能的原因和解决方法:

  • 图片太大:使用 MediaProcessor 压缩图片
  • 图片格式不支持:转换为 JPG 或 PNG 格式
  • 网络问题:检查网络连接,或增加超时时间
  • 平台限制:某些平台对图片数量有限制,检查是否超出上限
# 示例:压缩图片后再上传
processor = MediaProcessor()
compressed = processor.process_image(
    original_path,
    max_size=5 * 1024 * 1024,  # 5MB
)
content = {
    "platform": "weibo",
    "images": [compressed.path],
}

Q3:如何处理发布频率限制?

每个平台都有 API 调用频率限制,项目内置了限流机制:

config = {
    "rate_limit": {
        "weibo": {
            "requests_per_minute": 10,
            "requests_per_hour": 60,
        },
    },
}

uploader = AutoUploader(config=config)

# 批量发布时自动遵守频率限制
results = uploader.publish_batch(
    content_list,
    respect_rate_limit=True,  # 启用限流
)

Q4:可以代理 IP 使用吗?

可以。某些情况下需要使用代理 IP:

config = {
    "proxy": {
        "http": "http://user:pass@proxy.example.com:8080",
        "https": "https://user:pass@proxy.example.com:8080",
    },
    "platforms": {
        "weibo": {
            "enabled": True,
            "cookies": "your_cookies",
        },
    },
}

uploader = AutoUploader(config=config)

Q5:如何排查发布失败的原因?

启用详细日志模式:

import logging

# 设置详细日志
logging.basicConfig(level=logging.DEBUG)

uploader = AutoUploader(config_path="config.yaml")

# 尝试发布,会输出详细的请求和响应信息
content = {
    "platform": "weibo",
    "text": "测试",
}

result = uploader.publish(content, verbose=True)

总结与资源链接

项目核心优势回顾

通过本教程的学习,你应该已经掌握了 social-auto-upload 的核心功能和使用方法:

  • 多平台支持:一站式管理微博、小红书、知乎等多个平台
  • 简单易用:配置友好,API 简洁,上手门槛低
  • 智能处理:自动处理图片和视频,适配各平台要求
  • 定时发布:支持定时任务,灵活安排发布时间
  • 批量操作:支持批量发布和内容变体,大幅提升效率
  • 高度可扩展:支持自定义平台和自定义工作流

相关资源链接

资源 链接
GitHub 仓库 https://github.com/dreammis/social-auto-upload
官方文档 https://dreammis.github.io/social-auto-upload/
问题反馈 https://github.com/dreammis/social-auto-upload/issues
讨论社区 https://github.com/dreammis/social-auto-upload/discussions

推荐学习路径

  1. 入门阶段:先配置一个平台,发布简单的文字内容
  2. 进阶阶段:尝试图文发布和定时发布功能
  3. 熟练阶段:使用多平台同时发布和批量发布
  4. 精通阶段:开发自定义插件,集成到现有工作流

结语

社交媒体运营从来不是一件轻松的事,但有了合适的工具,我们可以把时间花在真正重要的事情上——创作优质内容。希望 social-auto-upload 能够成为你内容创作路上的得力助手,让你从繁琐的发布工作中解放出来,专注于内容的价值本身。

如果你觉得这个项目有帮助,欢迎给 GitHub 仓库一个 Star,你的支持是开源项目持续发展的动力!

同时,也欢迎关注 DreamMis 的其他开源项目,相信总有一些能给你的工作和生活带来惊喜。

如果内容对您有帮助,欢迎打赏

您的支持是我继续创作的动力

前往打赏页面

评论区

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注