Twython - 如何使用媒体网址更新状态

时间:2013-05-13 09:25:00

标签: python twitter twython

在我的应用中,我让用户发布到Twitter。现在我想让他们用媒体更新他们的状态。

twython.py我看到一个方法update_status_with_media,它从文件系统读取图像并上传到twitter。我的图像不在文件系统中,而是在S3存储桶中。

如何使用S3存储桶网址进行此操作?

file_变量中传递url,IO错误失败,没有这样的文件或目录。

在UnicodeDecode错误上传递StringIO失败。

传递urllib.urlopen(url).read()file() argument 1 must be encoded string without NULL bytes, not str

我也尝试使用post方法,从twitter api获得403 Forbidden,创建状态时出错。

刚刚解决了

呸,终于让它上班了!也许它会帮助别人节省几个小时的费用。

twitter = Twython(
        app_key=settings.TWITTER_CONSUMER_KEY, app_secret=settings.TWITTER_CONSUMER_SECRET,
        oauth_token=token.token, oauth_token_secret=token.secret
    )
img = requests.get(url=image_obj.url).content
tweet = twitter.post('statuses/update_with_media',
                                 params={'status': msg},
                                 files={'media': (image_obj.url,
                                                  BytesIO(img))})

1 个答案:

答案 0 :(得分:1)

很高兴看到你找到了答案!我们最近在 repo issue 中处理了类似的问题 - 基本上,您可以使用StringIO执行以下操作,并将其直接传递给twitter.post,如下所示:

from StringIO import StringIO
from twython import Twython

t = Twython(...)
img = open('img_url').read()
t.post('/statuses/update_with_media', params = {'status': 'Testing New Status'}, files = {
    'media': StringIO(img)
    # 'media': ('OrThisIfYouWantToNameTheFile.lol', StringIO(img))
})

这不是你问题的直接答案,所以我不期待任何投票或任何事情,但认为它对某些人来说似乎有用,而且有些相关,所以我会删掉一张便条。