2

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

我感谢任何帮助,谢谢。

4

1 回答 1

4

我解决了这个问题。Twitter 给出的错误非常具有误导性且不准确。

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

所以这是解决方案:

client.update_with_media(message_link, open(url))

其中 url 是您需要的任何地方的图像 URL。就我而言,是存储在 AWS 上的 Flip 模型中的图像 url。

于 2014-06-24T19:22:40.567 回答