从HTTPS站点获取Skype状态图像



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

然而,我的网站是HTTPS的,从HTTPS通过HTTP加载资源会导致IE阻塞。Skype显然没有提供HTTPS版本的状态图标。

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

任何想法?

下面是一个有效的代码片段。我在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编码源代码的优势。你可以在这里阅读更多。

请注意,这可能不适用于旧版本的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

最新更新