如何使用图片URL在Tweepy中更新Twitter状态?

24

这是我使用的代码,

#Twitter credentials
access_token = config.get('twitter_credentials', 'access_token')
access_token_secret = config.get('twitter_credentials', 'access_token_secret')
consumer_key = config.get('twitter_credentials', 'consumer_key')
consumer_secret = config.get('twitter_credentials', 'consumer_secret')

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = API(auth)

img = "http://animalia-life.com/data_images/bird/bird1.jpg"
api.update_with_media(img, status="Nice one")

这是我得到的错误

No such file or directory

我知道我必须使用本地目录中的文件来运行上述命令。在使用update_with_media时,有没有一种使用URL的方法?

3个回答

40

你需要使用本地文件通过tweepy上传。我建议首先使用像requests这样的库下载文件。

import requests
import os


def twitter_api():
    access_token = config.get('twitter_credentials', 'access_token')
    access_token_secret = config.get('twitter_credentials', 'access_token_secret')
    consumer_key = config.get('twitter_credentials', 'consumer_key')
    consumer_secret = config.get('twitter_credentials', 'consumer_secret')

    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = API(auth)
    return api


def tweet_image(url, message):
    api = twitter_api()
    filename = 'temp.jpg'
    request = requests.get(url, stream=True)
    if request.status_code == 200:
        with open(filename, 'wb') as image:
            for chunk in request:
                image.write(chunk)

        api.update_with_media(filename, status=message)
        os.remove(filename)
    else:
        print("Unable to download image")


url = "http://animalia-life.com/data_images/bird/bird1.jpg"
message = "Nice one"
tweet_image(url, message)

工作正常。操作完成后是否有办法删除临时下载的文件? - kane.zorfy
2
没错!只需使用 os.remove(filename)。我会编辑我的帖子以反映这一点。 - Brobin

2

Twython发布3.4.0版本

photo = open('/path/to/file/image.jpg', 'rb')
response = twitter.upload_media(media=photo)
twitter.update_status(status='看看这张很酷的图片!', media_ids=[response['media_id']])

0
为什么不在状态更新中包含链接呢?
img = "http://animalia-life.com/data_images/bird/bird1.jpg"
api.status(status="%s Nice one" % img)

我也试过了。Twitter只将其显示为纯文本。 - kane.zorfy
1
请注意:URL将占用您的推文字符限制。 - AtAFork

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接