Twitter rails gem Update_with_media返回Unauthorized

时间:2014-06-20 15:37:57

标签: ruby-on-rails ruby twitter ruby-on-rails-4 twitter-gem

我使用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上的错误吗?

我赞成任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

我弄明白了这个问题。 Twitter提供的错误非常具有误导性且不准确。

我的代码的问题是您无法使用StringIO文件使用update_with_media方法,它必须是File对象(File类)。

所以这就是解决方案:

client.update_with_media(message_link, open(url))

其中网址是您需要的图片网址。在我的例子中,我的Flip模型中的图像网址存储在AWS上。