keyword_ranking 1.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{keyword_ranking}
5
- s.version = "1.1"
5
+ s.version = "1.1.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Luis Alberto Velasco"]
@@ -7,82 +7,76 @@ class Array
7
7
  end
8
8
  end
9
9
 
10
- module KeywordRanking
10
+ class Ranking
11
+ @@default_options = { :limit => 200, :res_per_page => 10, :supported_engines => [:bing, :google, :yahoo] } #careful, res_per_page doesn't work with more than 10 for all search engines!
11
12
 
13
+ attr_reader :options
12
14
 
13
- class Ranking
14
- @@default_options = { :limit => 200, :res_per_page => 10, :supported_engines => [:bing, :google, :yahoo] } #careful, res_per_page doesn't work with more than 10 for all search engines!
15
-
16
- attr_reader :options
17
-
18
- def initialize(*options) # keyword, url, limit
19
- self.options = options.extract_options!
20
- end
21
-
22
- def options=(options)
23
- @options = @@default_options.merge(options)
24
- @options[:url].gsub!(/(http:\/\/|https:\/\/)/, '')
25
- @options[:url].gsub!(/^www/, '')
26
- end
15
+ def initialize(*options) # keyword, url, limit
16
+ self.options = options.extract_options!
17
+ end
27
18
 
28
- def from
29
- validate_options
30
- @finder ||= Finder.new
31
- @finder.find(@options)
32
- end
19
+ def options=(options)
20
+ @options = @@default_options.merge(options)
21
+ @options[:url].gsub!(/(http:\/\/|https:\/\/)/, '')
22
+ @options[:url].gsub!(/^www/, '')
23
+ end
33
24
 
34
- def method_missing(method, *args, &block)
35
- engine = @@default_options[:supported_engines].find{ |name| ("from_" << name.to_s).match /#{method}/ }
36
- if engine
37
- @options.merge!({:engine => engine})
38
- send("from")
39
- else
40
- super(method, *args, &block)
41
- end
42
- end
25
+ def from
26
+ validate_options
27
+ Finder.find(@options)
28
+ end
43
29
 
44
- protected
45
- def validate_options
46
- raise "Keyword and site parameters must be Strings" unless @options[:keyword].is_a?(String) and @options[:url].is_a?(String)
47
- raise "Engine should be 'bing', 'google' or 'yahoo'" unless @@default_options[:supported_engines].include?(@options[:engine].to_sym)
30
+ def method_missing(method, *args, &block)
31
+ engine = @@default_options[:supported_engines].find{ |name| ("from_" << name.to_s).match /#{method}/ }
32
+ if engine
33
+ @options.merge!({:engine => engine})
34
+ send("from")
35
+ else
36
+ super(method, *args, &block)
48
37
  end
38
+ end
49
39
 
40
+ protected
41
+ def validate_options
42
+ raise "Keyword and site parameters must be Strings" unless @options[:keyword].is_a?(String) and @options[:url].is_a?(String)
43
+ raise "Engine should be 'bing', 'google' or 'yahoo'" unless @@default_options[:supported_engines].include?(@options[:engine].to_sym)
50
44
  end
51
45
 
52
- class Finder
53
-
54
- def find(options) #keyword, url, limit, engine, res_per_page
55
- options[:keyword].gsub!(/\s/, '+')
56
- request_url, results_selector, cite_selector = case options[:engine].to_sym
57
- when :bing
58
- ["http://www.bing.com/search?q=#{options[:keyword]}&count=#{options[:res_per_page]}&first=", '#wg0 > li', 'cite']
59
- when :google
60
- ["http://www.google.com/search?q=#{options[:keyword]}&num=#{options[:res_per_page]}&start=", '#ires > ol > li', 'cite']
61
- when :yahoo
62
- ["http://search.yahoo.com/search?p=#{options[:keyword]}&n=#{options[:res_per_page]}&b=", '#web > ol > li', 'span']
63
- end
46
+ end
64
47
 
65
- count, rank = 0, nil
48
+ class Finder
49
+
50
+ def self.find(options) #keyword, url, limit, engine, res_per_page
51
+ options[:keyword].gsub!(/\s/, '+')
52
+ request_url, results_selector, cite_selector = case options[:engine].to_sym
53
+ when :bing
54
+ ["http://www.bing.com/search?q=#{options[:keyword]}&count=#{options[:res_per_page]}&first=", '#wg0 > li', 'cite']
55
+ when :google
56
+ ["http://www.google.com/search?q=#{options[:keyword]}&num=#{options[:res_per_page]}&start=", '#ires > ol > li', 'cite']
57
+ when :yahoo
58
+ ["http://search.yahoo.com/search?p=#{options[:keyword]}&n=#{options[:res_per_page]}&b=", '#web > ol > li', 'span']
59
+ end
66
60
 
67
- loop {
68
- html_response = Net::HTTP.get_response(URI.parse("#{request_url}#{count}")).body
69
- html_results = Nokogiri.parse(html_response).css(results_selector)
70
- rank = html_results.index(html_results.detect{ |result| result.css(cite_selector).text.match Regexp.new(options[:url]) })
61
+ count, rank = 0, nil
71
62
 
72
- if count > options[:limit]
73
- break
74
- elsif rank
75
- rank += count
76
- break
77
- end
78
- count += options[:res_per_page]
79
- }
63
+ loop {
64
+ html_response = Net::HTTP.get_response(URI.parse("#{request_url}#{count}")).body
65
+ html_results = Nokogiri.parse(html_response).css(results_selector)
66
+ rank = html_results.index(html_results.detect{ |result| result.css(cite_selector).text.match Regexp.new(options[:url]) })
80
67
 
81
- rank ? rank.next : nil
68
+ if count > options[:limit]
69
+ break
70
+ elsif rank
71
+ rank += count
72
+ break
73
+ end
74
+ count += options[:res_per_page]
75
+ }
82
76
 
83
- end
77
+ rank ? rank.next : nil
84
78
 
85
- end
79
+ end
86
80
 
87
81
  end
88
82
 
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keyword_ranking
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 1
9
- version: "1.1"
4
+ version: 1.1.1
10
5
  platform: ruby
11
6
  authors:
12
7
  - Luis Alberto Velasco
@@ -19,37 +14,24 @@ default_executable:
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: nokogiri
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
25
20
  requirements:
26
21
  - - ">="
27
22
  - !ruby/object:Gem::Version
28
- hash: 113
29
- segments:
30
- - 1
31
- - 4
32
- - 3
33
- - 1
34
23
  version: 1.4.3.1
35
- type: :runtime
36
- version_requirements: *id001
24
+ version:
37
25
  - !ruby/object:Gem::Dependency
38
26
  name: bundler
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
42
30
  requirements:
43
31
  - - ">="
44
32
  - !ruby/object:Gem::Version
45
- hash: 15
46
- segments:
47
- - 0
48
- - 9
49
- - 26
50
33
  version: 0.9.26
51
- type: :development
52
- version_requirements: *id002
34
+ version:
53
35
  description: Create keyword rankings from the 3 major search engines
54
36
  email: whizkas@hotmail.com
55
37
  executables: []
@@ -86,28 +68,21 @@ rdoc_options:
86
68
  require_paths:
87
69
  - lib
88
70
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
71
  requirements:
91
72
  - - ">="
92
73
  - !ruby/object:Gem::Version
93
- hash: 3
94
- segments:
95
- - 0
96
74
  version: "0"
75
+ version:
97
76
  required_rubygems_version: !ruby/object:Gem::Requirement
98
- none: false
99
77
  requirements:
100
78
  - - ">="
101
79
  - !ruby/object:Gem::Version
102
- hash: 11
103
- segments:
104
- - 1
105
- - 2
106
80
  version: "1.2"
81
+ version:
107
82
  requirements: []
108
83
 
109
84
  rubyforge_project: keyword_ranking
110
- rubygems_version: 1.3.7
85
+ rubygems_version: 1.3.5
111
86
  signing_key:
112
87
  specification_version: 3
113
88
  summary: Get keyword rankings from Google, Yahoo and Bing