Class: Search::Sniffer::ReferringSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/search-sniffer/search-sniffer.rb

Overview

Module Controller Methods

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(referer) ⇒ ReferringSearch

Returns a new instance of ReferringSearch.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/search-sniffer/search-sniffer.rb', line 31

def initialize(referer)

  @search_referers = {
        :google     => [/^http:\/\/(www\.)?google.*/, 'q'],
        :yandex     => [/^http:\/\/(www\.)?yandex.*/, 'text'],
        :mail       => [/^http:\/\/go\.mail.*/, 'q'],
        :nigma      => [/^http:\/\/(www\.)?nigma.*/, 's'],
        :bing       => [/^http:\/\/(www\.)?bing.*/, 'q'],
        :ask        => [/^http:\/\/(www\.)?ask.*/, 'q'],
        :yahoo      => [/^http:\/\/search\.yahoo.*/, 'p'],
        :msn        => [/^http:\/\/search\.msn.*/, 'q'],
        :aol        => [/^http:\/\/search\.aol.*/, 'userQuery'],
        :altavista  => [/^http:\/\/(www\.)?altavista.*/, 'q'],
        :feedster   => [/^http:\/\/(www\.)?feedster.*/, 'q'],
        :lycos      => [/^http:\/\/search\.lycos.*/, 'query'],
        :alltheweb  => [/^http:\/\/(www\.)?alltheweb.*/, 'q']
      }

  @stop_words = /\b(\d+|\w|about|after|also|an|and|are|as|at|be|because|before|between|but|by|can|com|de|do|en|for|from|has|how|however|htm|html|if|i|in|into|is|it|la|no|of|on|or|other|out|since|site|such|than|that|the|there|these|this|those|to|under|upon|vs|was|what|when|where|whether|which|who|will|with|within|without|www|you|your)\b/i

  # Get query args
  query_args =
    begin
      URI.split(referer)[7]
    rescue URI::InvalidURIError
      nil
    end

  # Determine the referring search that was used
  unless referer.blank?
    @search_referers.each do |k, v|
      reg, query_param_name = v
      # Check if the referrer is a search engine we are targetting
      if (reg.match(referer))

        # set the search engine
        @engine = k

        unless query_args.empty?
          query_args.split("&").each do |arg|
            pieces = arg.split('=')
            if pieces.length == 2 && pieces.first == query_param_name
              unstopped_keywords = CGI.unescape(pieces.last)
              @raw = unstopped_keywords
              @search_terms = unstopped_keywords.gsub(@stop_words, '').squeeze(' ')
              #logger.info("Referring Search Keywords: #{search_terms}")
              return true
            end
          end
        end # unless

        return true # because we found a match
      end # if
    end # do
  end #unless
end

Instance Attribute Details

#engineObject (readonly)

search engine



29
30
31
# File 'lib/search-sniffer/search-sniffer.rb', line 29

def engine
  @engine
end

#rawObject (readonly)

original terms as typed by user



28
29
30
# File 'lib/search-sniffer/search-sniffer.rb', line 28

def raw
  @raw
end

#search_termsObject (readonly)

sanitized search terms



27
28
29
# File 'lib/search-sniffer/search-sniffer.rb', line 27

def search_terms
  @search_terms
end

Instance Method Details

#to_sObject

Return the referring search string instead of the object serialized into a string



89
90
91
# File 'lib/search-sniffer/search-sniffer.rb', line 89

def to_s
  @search_terms
end