Sinatra、Twitter 和 StringIO

kit*_*nky 2 twitter sinatra stringio

Twitter API允许你通过他们的媒体添加到您的鸣叫update_with_tweet方法。

我正在使用SinatraTwitter设置了所有配置。我能够成功地使用我的应用发布推文。

我的应用程序读取网页,从该页面提取照片,然后应该将它们单独发布到 Twitter。我成功地使用Nokogiri.

但是,我无法将这些照片转换为Twitter允许的媒体类型。因为我也在使用urigem,给出这个例子:photo_url = "placekitten.com/300/300",我可以调用media = open(photo_url),这会返回一个StringIO.

但是,当我尝试将新存储的媒体与我的帖子一起发布给Twitter我时,出现了The IO object for media must respond to to_io (Twitter::Error::UnacceptableIO).

我试图弄清楚如何正确格式化/调用图像,以便我可以成功地将其发布到 Twitter。

小智 6

我遇到了同样的问题,但使用的是 Rails。

问题在于图像大小:如果图像大小小于 10kb,open(photo_url)则将给您StringIO对象,如果大小大于 10kb ,则 -File保存在tmp/文件夹中的对象。File对象响应to_io方法而StringIO对象不响应。

您可以做什么 -tmp从您的文件在文件夹中创建文件,然后使用此文件发布到 TW。例如:

  img = open(url)
  if img.is_a?(StringIO)
    ext = File.extname(url)
    name = File.basename(url, ext)
    Tempfile.new([name, ext])
  else
    img
  end
Run Code Online (Sandbox Code Playgroud)