読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

faviconのURIを探すクラス(scrAPI版)

Ruby

昨日作成したhpricot版faviconURIを探すクラスを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の表示に対応しました。

はてなブックマーク フロントエンドの新しいヤツを試作

ちょっと重いけど、解決したfaviconURIは1ヶ月キャッシュするので2回目以降は早くなるはず。