从HTTPS站点获取Skype状态图像

时间:2011-09-23 21:10:57

标签: ruby-on-rails https skype

我有一个Rails 3应用程序,我正在尝试显示包含用户及其各自Skype状态的页面。如果页面是HTTP,这很容易做到:只需将元素的背景URL设置为从http://mystatus.skype.com/mediumicon/USERNAME返回的图像。

但是,我的站点是HTTPS,并且通过HTTP从HTTPS加载资源会导致IE阻塞。 Skype显然不提供HTTPS版本的状态图标。

所以我通过使用Net :: HTTP调用上面的URL来获取Skype状态服务器端(即在控制器中)的方法。然后我可以使用send_data()将图像字节写回页面而不会出现问题。但我无法弄清楚如何将图像字节与所有其他页面数据一起流回视图。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是一个有效的代码段。我在sinatra中完成它只是为了使它独立工作,但get块的内容是重要的一行。

require 'sinatra'
require 'net/http'
require 'base64'

get '/' do
  base_image = Net::HTTP.get(URI.parse('http://mystatus.skype.com/mediumicon/Gazler'))
  "<img src=\"data:image/png;base64,#{Base64.encode64(base_image)}\">"
end

这利用了base64编码源代码。您可以阅读更多here

请注意,这可能不适用于旧版本的IE。

对此的一个解决方案是对上面返回的图像进行base64编码,并将所有可能的图像存储为状态,然后从结果中进行比较。显然每次这样做都会很慢,所以你想在本地存储图像的base64,然后在base64字符串上查找。

希望这是有道理的。

修改

作为辅助方法:

def skype_status(username)
  base_image = Net::HTTP.get(URI.parse("http://mystatus.skype.com/mediumicon/#{username}"))
  content_tag("img", :src =>"data:image/png;base64,#{Base64.encode64(base_image)}")
end