&pgid;
 ÊýË¡¤¬¸«Åö¤¿¤é¤Ê¤«¤Ã¤¿¤Î¤Ç¡¢ºî¤ê¤Þ¤·¤¿¡£
 
 http://okra.ark-web.jp/~konuma/cgi-bin/search.cgi
 
 #blikimore
 
 **¤É¤¦¤ä¤Ã¤Æ»È¤¦¤Î¡© [#h179b1c4]
 -¾åµ­¤Î¥Ú¡¼¥¸¤Ë¸¡º÷¥Õ¥©¡¼¥à¤¬¤¢¤ë¤Î¤Ç¡¢¤½¤³¤Ç¸¡º÷¤·¤Þ¤¹¡£
 -¤¹¤ë¤È¡¢¤Ï¤Æ¤Ê¤Ç¥Ö¥Ã¥¯¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¿ô¤Î¥é¥ó¥­¥ó¥°¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
 -¥é¥ó¥­¥ó¥°¤ÎÂоݤȤʤë¤Î¤Ï¡¢¤Ï¤Æ¤Ê¤Ç¸¡º÷¤ò¤ª¤³¤Ê¤Ã¤¿¤È¤­¤Ë¾å°Ì100¤Þ¤Ç¤Ëɽ¼¨¤µ¤ì¤ë¥Ú¡¼¥¸¤Î¤ß¤Ç¤¹¡£
 
 ***Î㤨¤Ð¤³¤ó¤Ê¸¡º÷¤¬¤Ç¤­¤Þ¤¹¡£ [#z8198fb8]
 -ruby¤Ë¤Ä¤¤¤Æ½ñ¤¤¤Æ¤¢¤ë¥Ú¡¼¥¸¤Ç¡¢ºÇ¤â¥Ö¥Ã¥¯¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ï¤É¤³¡©
 http://okra.ark-web.jp/~konuma/cgi-bin/search.cgi?keyword=ruby
 -www.ark-web.jp¤Ë¤¢¤ë¥Ú¡¼¥¸¤Ç¡¢ºÇ¤â¥Ö¥Ã¥¯¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ï¤É¤³¡©
 http://okra.ark-web.jp/~konuma/cgi-bin/search.cgi?keyword=site%3Awww.ark-web.jp
 Äɵ­¡¢¤³¤ì¤Ï[[¤³¤Ã¤Á:http://b.hatena.ne.jp/entrylist?sort=count&url=http%3A%2F%2F]]¤ò»È¤Ã¤¿¤Û¤¦¤¬¤¤¤¤¤Ç¤¹¡£
 http://b.hatena.ne.jp/entrylist?sort=count&url=http%3A%2F%2Fwww.ark-web.jp
 
 **Ãæ¿È¤É¤¦¤Ê¤Ã¤Æ¤ó¤Î¡© [#y5f01b09]
 ***³µÍ× [#occ04723]
 -ruby¤Ç¤¹¡£
 
 -¤Ï¤Æ¤Ê¤Î¸¡º÷·ë²Ì¤«¤é¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¤¤¤Þ¤¹¡£
 http://www.hatena.ne.jp/
 
 -»ÖÅĤµ¤ó¤Îºî¤Ã¤¿¢­¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
 [[YouTube¸¡º÷·ë²Ì¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¾¡¼êAPI²½]]
 --//»²¹Í¤Ë¤·¤Æ¤¤¤ë¤È¤¤¤¦¤«¡¢ÂçÉôʬ¥³¥Ô¡¼¤Ç¤¹¡£¡£¡£
 ***¾ÜºÙ [#k0ac4317]
 -¤³¤Î¥µ¡¼¥Ó¥¹¤Ï°Ê²¼¤Î»°¤Ä¤Î¥Õ¥¡¥¤¥ë¤«¤éÀ®¤êΩ¤Ã¤Æ¤Þ¤¹
  search.cgi -- ɽ¼¨Éôʬ
  Hatena/SearchResultScraper.rb -- ¸¡º÷¤ª¤è¤Ó¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤ò¤¹¤ëÉôʬ
  Hatena/page.rb -- ¸¡º÷·ë²Ì¤Î1¥Ú¡¼¥¸¤¢¤¿¤ê¤Î¥Ç¡¼¥¿¤òÊÝ»ý¤¹¤ëÉôʬ
 ¤½¤ó¤Ê¤ËŤ¤¥³¡¼¥É¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢Á´Éô·ÇºÜ¤·¤Þ¤¹¡£
 -''search.cgi''
  #!/usr/bin/ruby
  
  require 'cgi'
  require 'Hatena/SearchResultScraper'
  require 'Hatena/page'
  require 'kconv'
  
  #¤Ï¤Æ¤Ê¤Ç¤Î¸¡º÷·ë²Ì¤ò¼èÆÀ¤¹¤ë¡£
  def scrape keyword
    scraper = Hatena::SearchResultScraper.new(Kconv.toutf8(keyword), 10)
    scraper.open
    pages =  scraper.order_by_bookmark_count
  end
  
  #¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë
  def print_pages pages
    pages.each do |page|
     print "<a href="#{page.url}">#{page.title}</a>&nbsp;&nbsp;<strong><a href="http://b.hatena.ne.jp/entry/#{page.url}">#{page.bookmark_count}</a></strong><br>"
    end
  end
  
  print "Content-type: text/html\n\n"
  
  cgi = CGI.new
  keyword = cgi['keyword']
  
  print <<EOS
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
  <html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC_JP">
    <title>form</title>
  </head>
  <body>
  
  <form action="./search.cgi" method="get" charset=UTF-8">
  <input name="keyword" value="#{keyword}">
  <input type="submit" value="Search">
  </form>
  EOS
  
  print_pages(scrape(keyword)) unless keyword.empty?
  
  print <<EOS
  </body>
  </html>
  EOS
 
 
 -''Hatena/SearchResultScraper.rb''
  require 'open-uri'
  require 'cgi'
  require 'rubygems'
  require 'hpricot'
  require 'Hatena/page'
  
  module Hatena
  
    class SearchResultScraper
  
      @@search_base_url = "http://search.hatena.ne.jp/search?ie=utf8&word="
  
      def initialize keyword, count = 10
        @keyword = keyword
        @count = count
      end
  
      #URL¤ò³«¤­¡¢¸¡º÷¤ò¤ª¤³¤Ê¤¦¡£@count¤Ç»ØÄꤵ¤ì¤¿²ó¿ô¤À¤±¸¡º÷·ë²Ì¤òÆɤ߹þ¤à
      def open
        @pages = []
        @count.times do |i|
          page = open_page(i+1)
          break if page.size == 0
          @pages.concat(page)
        end
        @pages
      end
  
      #¥Ö¥Ã¥¯¥Þ¡¼¥¯·ï¿ô¤Ç¥½¡¼¥È¤¹¤ë¡£
      def order_by_bookmark_count
        @pages.sort!
        @pages.reverse!
      end
  
    private
  
      #pageÈÖÌܤθ¡º÷·ë²Ì¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤¹¤ë
      def open_page page
        url = @@search_base_url + CGI.escape(@keyword)  + "&page=" + CGI.escape(page.to_s)
  
        html = Kernel.open(url).read
        replace_document_write_javascript(html)
        scrape(Hpricot.parse(html))
      end
  
      #¸¡º÷·ë²Ì¤Î¥Ú¡¼¥¸¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤¹¤ë
      def scrape result
        pages = []
  
        result.search("div.hatena-search-result-item").each do |page_html|
  
          page = Hatena::Page.new
          page.title          = scrape_title(page_html)
          page.url            = scrape_url(page_html)
          page.bookmark_count = scrape_bookmark_count(page_html)
  
          pages << page
        end
  
        pages
      end
  
      #¼ÙËâ¤Êjavascript¤Îʸ»úÎó¤òÃÖ´¹¤¹¤ë
      def replace_document_write_javascript html
        html.gsub!(%r{<script language="javascript" type="text/javascript">.*?document.write\('(.*?)'\).*?</script>}m, '\1')
      end
  
      #¥¿¥¤¥È¥ë¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤¹¤ë
      def scrape_title page_html
        page_html.search("//h3//a").inner_html
      end
  
      #URL¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤¹¤ë 
      def scrape_url page_html
        page_html.search("//h3").inner_html.sub(/<a href="([^"]+)">.+/, '\1')
      end
  
      #¥Ö¥Ã¥¯¥Þ¡¼¥¯·ï¿ô¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤¹¤ë
      def scrape_bookmark_count page_html
        page_html.search("//span[@class='users']").inner_html.sub(/(<.+>)?<a.*?>(\d+) users?<\/a>(<\/.+>)?/, '\2')
      end
  
    end
  
  end
 
 -''Hatena/page.rb''
  module Hatena
  
    class Page
      attr_accessor :url
      attr_accessor :title
      attr_accessor :bookmark_count
  
      #¥Ö¥Ã¥¯¥Þ¡¼¥¯·ï¿ô¤ÇÈæ³Ó¤¹¤ë(¥Ö¥Ã¥¯¥Þ¡¼¥¯·ï¿ô¤Ç¥½¡¼¥È¤¹¤ë¤È¤­¤Î¤¿¤á¤Ë)
      def <=> another
        self.bookmark_count.to_i <=> another.bookmark_count.to_i
      end
    end
  
  end
 
 **À©¸Â»ö¹à [#qfe584fe]
 -ÆüËܸì¤Ç¸¡º÷¤Ç¤­¤Þ¤»¤ó¡£
 --%%¤¤¤º¤ìÂбþ¤¹¤ëͽÄê¤Ç¤¹¡£%%Âбþ¤·¤Þ¤·¤¿¡£
 -ÃÙ¤¤¤Ç¤¹¡£
 --¤Ï¤Æ¤Ê¤Î¸¡º÷²èÌ̤ò10¥Ú¡¼¥¸Ê¬¤â¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¤¤¤ë¤Î¤Ç¡£¡£¡£
 -¥é¥ó¥­¥ó¥°¤ÏÀµ³Î¤¸¤ã¤Ê¤¤¤«¤â
 --¥é¥ó¥­¥ó¥°¤ÎÂоݤȤʤë¤Î¤¬¡Ö¤Ï¤Æ¤Ê¤Î¸¡º÷·ë²Ì¤Î¾å°Ì100¤Þ¤Ç¡×¤Ê¤Î¤Ç¡¢¤½¤ì¤è¤ê²¼¤Î½ç°Ì¤Ë¤¢¤ë¥Ú¡¼¥¸¤¬Ìµ»ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
 
 **¥³¥á¥ó¥È [#b76cef3e]
 
 - ¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô¤Î¤È¤³¤í¤ò¥ê¥ó¥¯¤Ë¤·¤Æ¡¢¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Ú¡¼¥¸¡Ê¤Ã¤Æ¸À¤¦¤Î¤«¤Ê¡©¡Ë¤ØÈô¤Ö¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ -- [[¾®¾Â]] &new{2007-01-30 (²Ð) 12:14:39};
 - Hello! great idea of color of this siyte! -- [[Vilyamlm]] &new{2007-08-02 (ÌÚ) 11:47:42};
 
 #comment
 
 #blikifooter(¾®¾Â)
 
 tag: [[WebAPI>tag/WebAPI]],¡¡[[¥¹¥¯¥ì¥¤¥Ô¥ó¥°>tag/¥¹¥¯¥ì¥¤¥Ô¥ó¥°]]

¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS

¥¢¡¼¥¯¥¦¥§¥Ö¤Î¥µ¡¼¥Ó¥¹¤ä¥½¥ê¥å¡¼¥·¥ç¥ó¤Ï¤³¤Á¤é