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 件のコメント:
コメントを投稿