faviconのURIを探すクラス(scrAPI版)
昨日作成したhpricot版faviconのURIを探すクラスをsakuraのレンタルサーバーにアップロードしようと画策するも、hpricotのインストールではまる。hpricotはバイナリの共有ライブラリを使用しているため、gemを使ってsakuraのサーバーでコンパイルしてインストールすると使えるようだが、ちょっとまて、ライトプランの人はシェルログインできないんですけど。PHPとか使わないよなー、とか思ってケチったのがまずかった。
仕方がないので、バイナリの共有ライブラリを使用しない(こともできる)scrAPIを使って書き直し。
require 'rubygems' require 'scrapi' require 'httpclient' class Favicon def initialize( proxy=nil ) @client = HTTPClient.new( proxy, "") end def get_favicon_uri( uri ) base = URI(uri).instance_eval {"#{scheme}://#{host}:#{port}/"} result = Scraper.define { process( 'head link[rel="shortcut icon"]', "shortcut_icon"=>"@href") process( 'head link[rel="icon"]', "icon"=>"@href" ) result( :shortcut_icon, :icon ) }.scrape( @client.get_content(uri), :parser => :html_parser) return URI.join( base, result.shortcut_icon ) if result.shortcut_icon != nil return URI.join( base, result.icon ) if result.icon != nil favicon_uri = URI.join( base, "favicon.ico" ).to_s @client.head( favicon_uri ).status == 200 ? favicon_uri : nil end end f = Favicon.new puts f.get_favicon_uri("http://d.hatena.ne.jp") puts f.get_favicon_uri("http://d.hatena.ne.jp/unageanu/")
実行結果です。
http://d.hatena.ne.jp/favicon.ico http://d.hatena.ne.jp/images/wh_favicon.ico
ということで
faviconの表示に対応しました。