【问题标题】:Twython - How to update status with media urlTwython - 如何使用媒体 url 更新状态
【发布时间】:2013-05-07 06:55:22
【问题描述】:

在我的应用中,我让用户在 Twitter 上发帖。现在我想让他们通过媒体更新他们的状态。

twython.py 我看到一个方法update_status_with_media 从文件系统读取图像并上传到推特。我的图像不在文件系统中,而是在 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, Error creation status。

刚刚解决了

呸,终于开始工作了!也许它会帮助其他人节省我花费的几个小时。

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))})

【问题讨论】:

    标签: python twitter twython


    【解决方案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))
    })
    

    这不是对您问题的直接回答,所以我不期待任何投票或任何东西,但认为它对某些人似乎有用并且有些相关,所以我会记下。

    【讨论】:

    • 实际上这就是让我想到如何解决它的原因。我在回答后的追问中看到了它。但是我在使用urllib.urlopen().read()StringIO 时遇到了问题,在UnicodeDecodeError 上一直失败。最初的请求也是如此,因为我选择了requests.get(...).text,而我应该使用requests.get(...).content
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2014-03-01
    相关资源
    最近更新 更多