¤Ï¤Æ¤Ê¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô½ç¤Ç¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë http://www.ark-web.jp/sandbox/wiki/194.html
¤Ï¤Æ¤Ê¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô½ç¤Ç¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë
ÊýË¡¤¬¸«Åö¤¿¤é¤Ê¤«¤Ã¤¿¤Î¤Ç¡¢ºî¤ê¤Þ¤·¤¿¡£
http://okra.ark-web.jp/~konuma/cgi-bin/search.cgi
¤É¤¦¤ä¤Ã¤Æ»È¤¦¤Î¡© †
- ¾åµ¤Î¥Ú¡¼¥¸¤Ë¸¡º÷¥Õ¥©¡¼¥à¤¬¤¢¤ë¤Î¤Ç¡¢¤½¤³¤Ç¸¡º÷¤·¤Þ¤¹¡£
- ¤¹¤ë¤È¡¢¤Ï¤Æ¤Ê¤Ç¥Ö¥Ã¥¯¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤ë¿ô¤Î¥é¥ó¥¥ó¥°¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
- ¥é¥ó¥¥ó¥°¤ÎÂоݤȤʤë¤Î¤Ï¡¢¤Ï¤Æ¤Ê¤Ç¸¡º÷¤ò¤ª¤³¤Ê¤Ã¤¿¤È¤¤Ë¾å°Ì100¤Þ¤Ç¤Ëɽ¼¨¤µ¤ì¤ë¥Ú¡¼¥¸¤Î¤ß¤Ç¤¹¡£
Î㤨¤Ð¤³¤ó¤Ê¸¡º÷¤¬¤Ç¤¤Þ¤¹¡£ †
- 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%2Fwww.ark-web.jp
Ãæ¿È¤É¤¦¤Ê¤Ã¤Æ¤ó¤Î¡© †
³µÍ× †
- ruby¤Ç¤¹¡£
- ¤Ï¤Æ¤Ê¤Î¸¡º÷·ë²Ì¤«¤é¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¤¤¤Þ¤¹¡£
http://www.teamerblog.com/wiki/
- »ÖÅĤµ¤ó¤Îºî¤Ã¤¿¢¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
YouTube¸¡º÷·ë²Ì¤ò¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¾¡¼êAPI²½- //»²¹Í¤Ë¤·¤Æ¤¤¤ë¤È¤¤¤¦¤«¡¢ÂçÉôʬ¥³¥Ô¡¼¤Ç¤¹¡£¡£¡£
¾ÜºÙ †
- ¤³¤Î¥µ¡¼¥Ó¥¹¤Ï°Ê²¼¤Î»°¤Ä¤Î¥Õ¥¡¥¤¥ë¤«¤éÀ®¤êΩ¤Ã¤Æ¤Þ¤¹
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> <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
À©¸Â»ö¹à †
- ÆüËܸì¤Ç¸¡º÷¤Ç¤¤Þ¤»¤ó¡£
¤¤¤º¤ìÂбþ¤¹¤ëͽÄê¤Ç¤¹¡£Âбþ¤·¤Þ¤·¤¿¡£
- ÃÙ¤¤¤Ç¤¹¡£
- ¤Ï¤Æ¤Ê¤Î¸¡º÷²èÌ̤ò10¥Ú¡¼¥¸Ê¬¤â¥¹¥¯¥ì¥¤¥Ô¥ó¥°¤·¤Æ¤¤¤ë¤Î¤Ç¡£¡£¡£
- ¥é¥ó¥¥ó¥°¤ÏÀµ³Î¤¸¤ã¤Ê¤¤¤«¤â
- ¥é¥ó¥¥ó¥°¤ÎÂоݤȤʤë¤Î¤¬¡Ö¤Ï¤Æ¤Ê¤Î¸¡º÷·ë²Ì¤Î¾å°Ì100¤Þ¤Ç¡×¤Ê¤Î¤Ç¡¢¤½¤ì¤è¤ê²¼¤Î½ç°Ì¤Ë¤¢¤ë¥Ú¡¼¥¸¤¬Ìµ»ë¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥³¥á¥ó¥È †
- ¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô¤Î¤È¤³¤í¤ò¥ê¥ó¥¯¤Ë¤·¤Æ¡¢¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Ú¡¼¥¸¡Ê¤Ã¤Æ¸À¤¦¤Î¤«¤Ê¡©¡Ë¤ØÈô¤Ö¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£ -- ¾®¾Â 2007-01-30 (²Ð) 12:14:39
tag: WebAPI,¡¡¥¹¥¯¥ì¥¤¥Ô¥ó¥°