You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅持有GIF链接时如何使用Tweepy发布带文本与GIF的推特动态

核心结论
  • tweepy的update_status_with_media方法不支持直接传入网络URL作为媒体参数,该参数仅接受本地文件路径或已打开的本地文件对象。你遇到的FileNotFoundError,就是因为方法将传入的URL字符串识别为本地文件路径,在本地找不到对应文件才触发的报错。
  • 不需要长期将GIF存储在本地,通过「拉取GIF文件内容→写入本地临时文件→调用接口发布→自动清理临时文件」的流程即可实现需求,全程无需手动管理本地文件。
原有代码问题说明

你代码里传入的https://giphy.com/gifs/WJjLyXCVvro2I是Giphy的网页展示链接,不是GIF文件的直链地址,就算接口支持传入网络URL,这个链接也无法直接获取到GIF原始二进制内容,需要先拿到对应GIF的真实资源直链才能正常拉取文件。

可行实现方案

用Python标准库的tempfile创建临时GIF文件,不需要手动管理文件存储路径,配合finally代码块可以保证无论发布成功还是报错,临时文件都会被自动清理,不会在本地残留垃圾文件,完整实现代码如下:

import tweepy
import requests
import tempfile
import os

# 替换为你自己的平台密钥信息
auth = tweepy.OAuthHandler("你的API Key", "你的API Key Secret")
auth.set_access_token("你的Access Token", "你的Access Token Secret")
api = tweepy.API(auth)

def post_tweet_with_gif(tweet_content, gif_direct_url):
    # 拉取GIF二进制内容
    gif_resp = requests.get(gif_direct_url, stream=True)
    gif_resp.raise_for_status() # 拉取失败直接抛错,避免传入无效内容
    
    # 创建临时GIF文件,设置delete=False支持文件关闭后被tweepy读取
    with tempfile.NamedTemporaryFile(suffix='.gif', delete=False) as temp_gif:
        for chunk in gif_resp.iter_content(chunk_size=8192):
            temp_gif.write(chunk)
        temp_file_path = temp_gif.name
    
    try:
        # 调用发布接口
        post_result = api.update_status_with_media(status=tweet_content, filename=temp_file_path)
        print("发布成功,推文ID:", post_result.id)
        return post_result
    finally:
        # 无论发布结果如何,最后都删除临时文件
        if os.path.exists(temp_file_path):
            os.remove(temp_file_path)

if __name__ == "__main__":
    # 注意这里要替换为GIF的真实文件直链,不要传网页展示链接
    gif_real_url = "你的GIF文件直链地址"
    tweet_text = "hihihihuhihi"
    post_tweet_with_gif(tweet_text, gif_real_url)
注意事项
  • 传入的链接必须是GIF文件直链,即浏览器打开后直接展示动图、不会跳转到其他网页的资源链接,类似Giphy的/gifs/xxx格式的网页链接无法直接使用,需要先解析出真实资源地址。
  • 推特平台对GIF文件大小有限制,目前要求单文件不超过15MB,拉取前可以先判断请求返回头的content-length字段,避免上传超大文件触发接口报错。

内容的提问来源于stack exchange,提问作者Simon Vlach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:21:18