faviconがあるかないか確認

速記メモのみ。

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