速記メモのみ。
require 'open-uri' def get_favicon(domain) open(domain + "/favicon.ico") end
faviconが存在する場合
> yahoo = get_favicon("http://www.yahoo.co.jp") # => #<File:/var/folders/r8/t51gts3s5kb5b5qvskswx22c0000gn/T/open-uri20141120-3062-cb0tnc> > yahoo.base_uri => #<URI::HTTP:0x007fa233f49f98 URL:http://www.yahoo.co.jp/favicon.ico> > yahoo.status # => ["200", "OK"] > yahoo.content_type # => "image/x-icon" > yahoo.last_modified # => 2014-02-13 16:40:58 +0900 > yahoo.meta # => {"server"=>"nginx", "date"=>"Wed, 19 Nov 2014 15:12:52 GMT", "content-type"=>"image/x-icon", "content-length"=>"34686", "last-modified"=>"Thu, 13 Feb 2014 07:40:58 GMT", "connection"=>"close", "etag"=>"\"52fc770a-877e\"", "cache-control"=>"public, max-age=315360000", "accept-ranges"=>"bytes"}
faviconが存在しない場合1
> open("http://www.oml.city.osaka.lg.jp/favicon.ico") # OpenURI::HTTPError: 404 Not Found
> uri = URI.parse("http://www.oml.city.osaka.lg.jp/favicon.ico") # => #<URI::HTTP:0x007fa233c3b630 URL:http://www.oml.city.osaka.lg.jp/favicon.ico> > ocl = Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) } # => #<Net::HTTPNotFound 404 Not Found readbody=true> > ocl.code # => "404" > ocl.message # => "Not Found" > ocl.body # => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p>The requested URL /favicon.ico was not found on this server.</p>\n</body></html>\n"
faviconが存在しない場合2
> open("https://developer.mozilla.org/favicon.ico") # OpenURI::HTTPError: 404 Not Found
> uri = URI.parse("https://developer.mozilla.org/favicon.ico") # => #<URI::HTTPS:0x007fa23461f9f8 URL:https://developer.mozilla.org/favicon.ico> > result = Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) } # EOFError: end of file reached > result # => nil