我使用Twitter gem来验证和分享内容到twitter。 我还需要包含一张图片,以便我使用" update_with_media"方法,如:
def tweet
client = Twitter::REST::Client.new do |config|
config.consumer_key = "my consumer key"
config.consumer_secret = "my consumer secret"
config.access_token = "my access token"
config.access_token_secret = "my secret access token"
end
url = @flip.image_urls[:normal].to_s
r = open(url)
bytes = r.read
img = Magick::Image.from_blob(bytes).first
fmt = img.format
data = StringIO.new(bytes)
data.class.class_eval { attr_accessor :original_filename, :content_type }
data.original_filename = @flip.slug + "." + fmt unless @flip.slug.nil?
data.content_type='image.jpg'
client.update_with_media(personal_message, data)
end
我收到了这个回复:
Twitter::Error::Unauthorized (Could not authenticate you):
对于与Twitter的每次其他互动,获取关注者或推文(更新没有媒体),它使用相同的帐户工作正常,所以我的凭据是正确的。
有什么想法?这是Twitter的API或Twitter Gem上的错误吗?
我赞成任何帮助,谢谢。
答案 0 :(得分:3)
我弄明白了这个问题。 Twitter提供的错误非常具有误导性且不准确。
我的代码的问题是您无法使用StringIO文件使用update_with_media方法,它必须是File对象(File类)。
所以这就是解决方案:
client.update_with_media(message_link, open(url))
其中网址是您需要的图片网址。在我的例子中,我的Flip模型中的图像网址存储在AWS上。