2011年6月5日日曜日

検索からきた人に向けて、関連記事のリンクを出す

ITmediaとかで使われてる↓これのことです。正式名称なんていうんでしょうか?


面倒なのでとりあえずGoogleだけ対応。
あと複数キーワードがあったら、最初のキーワードだけ優先するようにしています。

リファラーの情報から、検索キーワードの部分だけを正規表現で取ってきて、

複数ヶ所で呼び出すことも考えて、applicationhelperに記述。

 def search_result(request)
  @request_name = Array.new
  @request_num = 0
   unless request == nil
    ref = request
    ref = URI.decode(ref).to_s
    if /google\./ =~ ref && ref != nil
     ref = ref.scan(/&q=(.*?)$|\?q=(.*?)$/).to_s
     ref = ref.scan(/^(.*?)&/).to_s if /&/ =~ ref
     ref = ref.gsub(/\+| /, ':?').to_s if /\+| / =~ ref
     ref = ref.to_s.split(':?') if /:?/ =~ ref
     @request_name = ref[0]
     ref = "%" + ref[0] + "%"
     @request_num = Entry.find(:all, :conditions => ["title like ? or discription like ?", ref, ref]).size
   end
  end
  end

コントローラーで呼び出す。
このときヘルパーのメソッドを呼び出せるようにincludeする。
request.refererにリファラー情報がある。

class EntriesController < ApplicationController
 include ApplicationHelper
 def index
 search_result(request.referer)
 @entries = Entry.all
 end
end

最後にビュー
<% if @request_num > 0 %>
 <%= link_to "#{@request_name}の関連記事:#{@request_num}件。", :controller => 'search', :id=>"#{@request_name}" %>
<% end %>

こんな感じです。

0 件のコメント:

コメントを投稿