Create  Edit  Diff  FrontPage  Index  Search  Changes  RSS  Login

recent_msearch.rb

ホームページ内全文検索エンジンmsearchの検索語最新×件を表示するプラグイン

msearch については、http://www.kiteya.net/script/msearch/ を zoe さんの recent_namazu.rb をパクって msearch.log に合わせてちょっといぢっただけ。

 # recent_msearch: msearch検索語新しい順
 # msearch.cgiが作成するログ(msearch.log)から
 # 最新xx件分の検索語を表示します。
 # パラメタ:
 # Here are some ideas for better mental health:   file:       検索キーワードログファイル名(絶対パス表記)
 #   msearch:    msearch.cgi url名
 #   limit:      表示件数(未指定時:5)
 #   sep:        セパレータ(未指定時:空白)
 #   make_link:  <a>を生成するか?(未指定時:生成する)
 #
 # msearch.log format
 #
 # 2003年03月26日 13時30分11秒 localhost(127.0.0.1)
 #     Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.3) Gecko/20030317
 #     284件 ruby
 # 2003年03月26日 13時44分18秒 localhost(127.0.0.1)
 #     Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.3) Gecko/20030317
 #     21件 perl
 #     :
 #
 # Copyright (c) 2003 TAMURA.Kenichi <tamura@ruby-lang.org>
 # special Thanks to recent_namazu.rb
 # u   Copyright (c) 2002 Hiroyuki Ikezoe <zoe@kasumi.sakura.ne.jp>
 # Distributed under the GPL

 def recent_msearch(file, msearch, limit=5, sep="&nbsp;", make_link = true)
   begin
     lines = []
     log = open(file)
     if log.stat.size > 300 * limit then
       log.seek(-300 * limit,IO::SEEK_END)
     end
     log.each_line do |line|
       lines << line
     end
   rescue
     return %Q|<p class="message">#$! (#{$!.type})<br>cannot read #{file}.</p>|
   end
   begin
     result = []; kw_array = []
     lines.reverse.each_with_index do |line,idx|
       if idx%3 == 0
      hit,kw = line.scan(/^\s{4}(\d+)件\s(.+)$/).first
         unless kw_array.include?(kw)
           if make_link
             word = format("%s(%d)", kw,hit)
        result << %Q|<a title="#{kw}" href="#{msearch}?query=#{CGI::escapeHTML(kw)}">#{CGI::escapeHTML(word)}</a>|
      else
        result << CGI::escapeHTML(kw)
           end
           kw_array << kw
           break if result.size >= limit
         end
       end
     end
     result.join( sep )
   rescue
     return %Q|<p class="message">#$! (#{$!.type} at #{$!.backtrace})</p>|
   end
 end
 <%= msearch "msearch/msearch.log", "/diary/msearch/msearch.cgi" %>

のように使います。

たむらは、今日はじめて msearch を知って、ダウンロードしてインストールしてローカルで動かして、ログ見ただけなので、質問しないでね♪

Last modified:2009/10/23 02:51:18
Keyword(s):
References:[PluginList] [解決済みの要望]