如何用Python借助Facebook开发者提供的Instagram API自动发帖?
使用Facebook Graph API结合requests通过Access Token发Instagram帖子
背景
你已经在Facebook开发者平台创建了应用,拿到了测试用户的Access Token,不想再用instagrapi(每次登录要输2FA验证码),想改用requests调用Graph API来发帖子到你的Instagram页面。
必要权限先确认
你的Access Token必须有这些权限,申请的时候要勾选:
pages_show_list:获取关联的Instagram页面信息pages_manage_posts:管理页面帖子instagram_basic:访问Instagram基础数据pages_read_engagement:读取页面互动数据
具体操作步骤+代码
1. 拿到Instagram业务账户ID
首先得通过你的Facebook页面ID,找到对应的Instagram业务账户ID:
import os import requests from dotenv import load_dotenv load_dotenv() access_token = os.getenv("INSTAGRAM_TOKEN") graph_url = "https://graph.facebook.com/v17.0/" # 换成你自己的Facebook页面ID(在Facebook页面设置里能找到) facebook_page_id = "你的Facebook页面ID" def get_instagram_account_id(page_id): url = f"{graph_url}{page_id}?fields=instagram_business_account&access_token={access_token}" res = requests.get(url) return res.json()["instagram_business_account"]["id"] ig_account_id = get_instagram_account_id(facebook_page_id)
2. 上传图片并发布
Graph API不能直接读本地图片,得先把图片传到公网(比如云存储、图床)拿到可访问的URL,然后分两步上传发布:
def post_to_instagram(account_id, image_url, caption): # 第一步:创建媒体容器 create_media_url = f"{graph_url}{account_id}/media" create_data = { "image_url": image_url, "caption": caption, "access_token": access_token } create_res = requests.post(create_media_url, data=create_data) media_id = create_res.json()["id"] # 第二步:发布媒体 publish_url = f"{graph_url}{account_id}/media_publish" publish_data = { "creation_id": media_id, "access_token": access_token } publish_res = requests.post(publish_url, data=publish_data) return publish_res.json()
3. 完整调用
替换成你的公网图片URL后,直接调用函数:
if __name__ == '__main__': # 本地图片先上传到公网,拿到这个URL public_image_url = "https://你的公网图片地址" test_caption = "Test!" post_result = post_to_instagram(ig_account_id, public_image_url, test_caption) print(post_result)
注意点
- 必须用公网图片URL,本地文件无法被Graph API访问
- 测试用户的Access Token可能有有效期,到期可以去开发者平台刷新
- 如果返回错误提示权限不足,直接去开发者平台的应用权限设置里申请对应权限
内容的提问来源于stack exchange,提问作者Dr. Dark Flames
相关产品推荐
相关产品推荐

