我想从各个网址下载favicon,所以我这样做:
require 'mechanize'
agent = Mechanize.new
link = 'http://www.google.com/s2/favicons?domain_url=blog.ycombinator.com/'
agent.get(link).save "images/pic.png"
问题在于,我怎么知道http://www.google.com/s2/favicons?domain_url=blog.ycombinator.com/
返回的是.png
?不是.ico
,不是.jpg
?
将它保存为不同格式会产生任何问题吗?我应该如何相应地保存文件?
答案 0 :(得分:4)
通过调用Mechanize#get
收到的内容是Mechanize::Image
对象的实例,其中包含大量有关图像本身的信息。
▶ got = agent.get link
#⇒ #<Mechanize::Image:0x00000005315e48 ...>
▶ ext = got.response['content-type'].split('/').last
#⇒ "png"
▶ got.save "images/pic.#{ext}"
除了内容类型之外,返回的对象还有另一个要考虑的信息,例如: G。请求是否成功。
正如@Stefan在评论中指出的那样,应该使用gem /库来确定MIME类型的正确扩展名:
▶ require 'rack/mime'
▶ Rack::Mime::MIME_TYPES.key(got.response['content-type'])
#⇒ ".png"
但在这种特殊情况下,我相信case-when
足够了。