用 Python 秒发社媒:Facebook × Twitter × Instagram 自动发布全攻略

作者:API传播员 · 2025-10-26 · 阅读时间:5分钟
本文详细介绍了如何使用Python和社交媒体API(包括Facebook Graph API、Twitter API和Instagram Graph API)实现社交媒体自动发布功能。通过requests库发送HTTP请求,结合python-dotenv管理环境变量,开发者可以创建自动发布文字和图片内容的脚本。文章还展示了如何利用schedule库实现定时发布功能,帮助企业和营销人员提高社交媒体营销效率。

一. 环境 5 分钟搭好,先跑起来再说!⚙️

# 一键安装核心库
pip install requests python-dotenv requests-oauthlib schedule

把各平台凭证写进 .env,永不硬编码 👇

FACEBOOK_TOKEN=EAABwzLixnjYBA...
TWITTER_API_KEY=xxx
TWITTER_API_SECRET=xxx
TWITTER_ACCESS_TOKEN=xxx
TWITTER_ACCESS_TOKEN_SECRET=xxx
INSTAGRAM_TOKEN=EAABwzLixnjYBA...

👉 把变量加载完,顺手跑 python -c "import os; from dotenv import load_dotenv; load_dotenv(); print('ok')" 验证无 typo。

a. 立 Flag 前先立 KPI 📊

用「开发任务管理系统 KPI」把目标量化:

  • 单条发布耗时 ≤ 2 s
  • 7 天平均互动率 ≥ 3 %
  • 异常重试次数 ≤ 1 次/百条
    能量化才能迭代。

二. Facebook:Graph API 两步搞定 ✅

import os, requests
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('FACEBOOK_TOKEN')

def post_fb_text(message: str):
    url = f"https://graph.facebook.com/v19.0/me/feed"
    payload = {"message": message, "access_token": TOKEN}
    return requests.post(url, data=payload).json()

def post_fb_image(image_path: str, caption: str):
    url = f"https://graph.facebook.com/v19.0/me/photos"
    files = {"source": open(image_path, "rb")}
    payload = {"caption": caption, "access_token": TOKEN}
    return requests.post(url, files=files, data=payload).json()

写完怕有坑?把文件拖进「代码审查助手」,它会提示“文件句柄未关闭”“缺少异常捕获”,并给出 with open(...) 修复示例。


三. Twitter:OAuth1 签名别怕 🤝

from requests_oauthlib import OAuth1

oauth = OAuth1(
    os.getenv('TWITTER_API_KEY'),
    os.getenv('TWITTER_API_SECRET'),
    os.getenv('TWITTER_ACCESS_TOKEN'),
    os.getenv('TWITTER_ACCESS_TOKEN_SECRET')
)

def post_tweet(text: str):
    url = "https://api.twitter.com/1.1/statuses/update.json"
    return requests.post(url, auth=oauth, data={"status": text}).json()

def post_tweet_with_image(text: str, img_path: str):
    # 1. 上传图
    url_up = "https://upload.twitter.com/1.1/media/upload.json"
    with open(img_path, "rb") as f:
        media_id = requests.post(url_up, auth=oauth, files={"media": f}).json()["media_id_string"]
    # 2. 发推
    url_text = "https://api.twitter.com/1.1/statuses/update.json"
    return requests.post(url_text, auth=oauth, data={"status": text, "media_ids": media_id}).json()

想并行上传 4 张图?先用「代码优化」把单线程改 concurrent.futures,延迟立降 60 % ⚡️


四. Instagram:Graph API 二段式发布 📸

仅商业账号可用,需把 IG 号与 FB 主页绑定

def post_ig_image(image_url: str, caption: str):
    # 1. 创建媒体容器
    url_create = f"https://graph.facebook.com/v19.0/me/media"
    payload = {"image_url": image_url, "caption": caption, "access_token": TOKEN}
    creation_id = requests.post(url_create, data=payload).json()["id"]
    # 2. 发布
    url_pub = f"https://graph.facebook.com/v19.0/me/media_publish"
    return requests.post(url_pub, data={"creation_id": creation_id, "access_token": TOKEN}).json()

不会写异步轮询容器状态?用「代码生成」描述需求:“生成 async 函数,每 2 秒查询容器状态直到 READY”,AI 立即给出可运行代码,copy 即可用。


五. 定时发布:schedule 一行搞定 ⏰

import schedule, time, datetime as dt

def job():
    post_fb_text(f"早安 ☕ 现在时间:{dt.datetime.now():%H:%M}")

schedule.every().day.at("09:00").do(job)

if __name__ == "__main__":
    while True:
        schedule.run_pending()
        time.sleep(1)

生产环境建议换成 Linux systemd 或 Windows Task Scheduler,稳定不死机。


六. 常见坑 & 逃生指南 🕳️

逃生术
Facebook token 2 小时过期 用 Long-Lived Token(60 天),到期前 refresh
Twitter 280 字限制 len(text.encode('utf-8')) 判断,超长转线程
IG 图片比例不符 提前裁成 1:1,再传 S3 拿到公开 url
各平台 rate-limit 统一封装 time.sleep(1) + 指数退避

七. 总结:把重复劳动交给代码,把创意留给自己 🎯

.envschedule,30 分钟搭完“一键三发”流水线;再用「代码文档生成器」自动生成 SDK 文档,团队上手零成本。

注意:API 政策随时调整,上线前务必重新阅读官方 changelog。

原文链接: https://medium.com/@theethicsgeek/automating-social-media-posting-using-python-and-apis-f2db259bf277