我正在使用 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 上的错误吗? ?
感谢您的帮助,谢谢。
最佳答案
我发现了问题所在。 Twitter返回的错误非常具有误导性且不准确。
我的代码的问题是您不能使用 StringIO 文件的 update_with_media 方法,它必须是 File 对象(File 类)。
这就是解决方案:
client.update_with_media(message_link, open(url))
其中 url 是您需要的图像 URL。就我而言,是存储在 AWS 上的 Flip 模型的图像 URL。
关于ruby-on-rails - Twitter Rails gem Update_with_media 返回未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330953/