使用Tweepy调用Twitter API v1上传媒体时遭遇403禁止错误及JSONDecodeError问题求助
使用Tweepy调用Twitter API v1上传媒体时遭遇403禁止错误及JSONDecodeError问题求助
大家好,我现在碰到了一个使用Tweepy上传媒体到Twitter的棘手问题,希望能得到大家的帮助!
我当前的实现逻辑是用Tweepy的v2 Client对象创建推文,用v1.1的API对象处理媒体上传,相关代码如下:
# 创建OAuth 2.0的Client对象 client = tweepy.Client( consumer_key=self.twitter_consumer_key, consumer_secret=self.twitter_consumer_secret, access_token=self.twitter_access_token, access_token_secret=self.twitter_access_token_secret ) # 创建用于媒体上传的API v1.1对象 auth = tweepy.OAuth1UserHandler( self.twitter_consumer_key, self.twitter_consumer_secret, self.twitter_access_token, self.twitter_access_token_secret ) api = tweepy.API(auth) try: # 不使用分块选项的简单媒体上传 print("Attempting media upload...") with open(image_path, 'rb') as image_file: media = api.simple_upload(filename=image_path, file=image_file) print(f"Media uploaded successfully. Media ID:{media.media_id}")
但程序在执行媒体上传步骤时总是失败,还出现了两种不同的错误:
- 第一次运行程序时,直接抛出
403 Forbidden error - 第二次运行时,会出现
<class 'simplejson.errors.JSONDecodeError'>类型错误,错误信息为Expecting value: line 1 column 1 (char 0),而且看起来API没有返回任何响应对象
我试过media_upload和simple_upload两个API函数,结果都是一样的错误。其中media_upload的调用代码是:
media = api.media_upload(filename=image_path, chunked=True)
我的Twitter开发者账号里的应用配置包含以下两部分:
- 应用权限及应用类型设置
- 应用信息设置
为了解决问题,我已经尝试了这些办法:
- 更换过多个不同的媒体文件,确保文件存在且能正常打开,甚至在调用上传函数前检查了文件大小(大概1-2MB),都没有问题
- 尝试过降级和升级Tweepy版本,先后试过4.14.0、4.9.0和4.12.0,但所有版本都出现相同的错误
下面是两种错误的完整回溯信息:
1. 403 Forbidden错误回溯
Traceback (most recent call last): File "/home/user/test.py", line 540, in <module> main() File "/home/user/test.py", line 532, in main publisher.post_to_twitter(temp_path, description) File "/home/user/test.py", line 391, in post_to_twitter media = self.twitter_v1.media_upload(image_path) File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 3566, in media_upload return self.simple_upload( File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 46, in wrapper return method(*args, **kwargs) File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 3610, in simple_upload return self.request( File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 265, in request raise Forbidden(resp) tweepy.errors.Forbidden: 403 Forbidden
2. JSONDecodeError错误回溯
Traceback (most recent call last): File "/home/user/test.py", line 540, in <module> main() File "/home/user/test.py", line 532, in main publisher.post_to_twitter(temp_path, description) File "/home/user/test.py", line 391, in post_to_twitter media = self.twitter_v1.media_upload(image_path) File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 3566, in media_upload return self.simple_upload( File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 46, in wrapper return method(*args, **kwargs) File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 3610, in simple_upload return self.request( File "/home/user/.local/lib/python3.10/site-packages/tweepy/api.py", line 265, in request raise Forbidden(resp) File "/home/user/.local/lib/python3.10/site-packages/tweepy/errors.py", line 54, in __init__ response_json = response.json() File "/home/user/.local/lib/python3.10/site-packages/requests/models.py", line 974, in json return complexjson.loads(self.text, **kwargs) File "/usr/local/lib/python3.10/site-packages/simplejson/__init__.py", line 525, in loads return _default_decoder.decode(s) File "/usr/local/lib/python3.10/site-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/local/lib/python3.10/site-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我期望的结果是能成功上传媒体文件,不知道有没有朋友遇到过类似的问题,或者知道怎么解决?提前感谢大家的帮助!
备注:内容来源于stack exchange,提问作者Shivs S
相关产品推荐
相关产品推荐

