keyword_ranking 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ v1.0. First draft
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source :gemcutter
2
+
3
+ gemspec
4
+
5
+ group 'development' do
6
+ gem 'echoe'
7
+ gem 'rspec'
8
+ gem 'nokogiri'
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ keyword_ranking (1.0)
5
+ nokogiri
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ echoe (4.3.1)
11
+ gemcutter
12
+ rubyforge
13
+ gemcutter (0.6.1)
14
+ json_pure (1.4.6)
15
+ nokogiri (1.4.3.1)
16
+ rspec (1.3.0)
17
+ rubyforge (2.0.4)
18
+ json_pure (>= 1.1.7)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ bundler
25
+ echoe
26
+ keyword_ranking!
27
+ nokogiri
28
+ rspec
data/LICENSE ADDED
File without changes
data/README ADDED
@@ -0,0 +1,19 @@
1
+ Keyword Ranking
2
+
3
+ Use this gem to calculate the keyword ranking in Bing, Yahoo or Google as follows:
4
+
5
+ get_ranking(:keyword => 'one_keyword', :url => 'www.mydomain.com', :engine => :bing, :limit => 100)
6
+
7
+ Note:
8
+
9
+ * :engine can receive any of these values --> :google, :yahoo or :bing
10
+ * :limit by default is 200 (defined in RES_LIMIT constant)
11
+ * You can change the results per page desired changing the value of RES_PER_PAGE having in mind that not all the 3 engines support more than 10 results per page with this utility
12
+
13
+ More updates coming
14
+
15
+ TODO:
16
+
17
+ * Testing code
18
+ * GEM for Rails structure
19
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'echoe'
2
+ Echoe.new('keyword_ranking')
@@ -0,0 +1,37 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{keyword_ranking}
5
+ s.version = "1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Luis Alberto Velasco"]
9
+ s.date = %q{2010-08-17}
10
+ s.description = %q{Create keyword rankings from the 3 major browsers}
11
+ s.email = %q{whizkas@hotmail.com}
12
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/keyword_ranking.rb"]
13
+ s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "LICENSE", "README", "Rakefile", "lib/keyword_ranking.rb", "spec/keyword_ranking_spec.rb", "spec/spec.opts", "keyword_ranking.gemspec"]
14
+ s.homepage = %q{http://github.com/whizkas/keyword_ranking}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Keyword_ranking", "--main", "README"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{keyword_ranking}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{Get keyword rankings from Google, Yahoo and Bing}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.3.1"])
27
+ s.add_development_dependency(%q<bundler>, [">= 0.9.26"])
28
+ else
29
+ s.add_dependency(%q<nokogiri>, [">= 1.4.3.1"])
30
+ s.add_dependency(%q<bundler>, [">= 0.9.26"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<nokogiri>, [">= 1.4.3.1"])
34
+ s.add_dependency(%q<bundler>, [">= 0.9.26"])
35
+ end
36
+ end
37
+
@@ -0,0 +1,60 @@
1
+ require 'singleton'
2
+ require 'nokogiri'
3
+
4
+ class Array
5
+ def extract_options!
6
+ last.is_a?(::Hash) ? pop : {}
7
+ end
8
+ end
9
+
10
+ module KeywordRanking
11
+ class Ranking
12
+
13
+ RES_LIMIT = 200
14
+ RES_PER_PAGE = 10 #careful, it doesn't work with more than 10 for all search engines!
15
+
16
+ include Singleton
17
+
18
+ def get(*args) # keyword, url, engine, limit
19
+ options = args.extract_options!
20
+ limit = options[:limit] ? options[:limit].to_i : RES_LIMIT
21
+ site_uri = options[:url].gsub(/(http:\/\/|https:\/\/)/, '').gsub(/^www/, '')
22
+ validate_arguments options
23
+ find_ranking(options[:keyword], site_uri, limit, options[:engine])
24
+ end
25
+
26
+ protected
27
+
28
+ def validate_arguments(options)
29
+ raise "Keyword and site parameters must be Strings" unless options[:keyword].is_a?(String) and options[:url].is_a?(String)
30
+ raise "Limit of #{RES_LIMIT} results at most" if options[:limit] > RES_LIMIT
31
+ raise "Engine should be 'bing', 'google' or 'yahoo'" unless [:bing, :google, :yahoo].include?(options[:engine].to_sym)
32
+ end
33
+
34
+ def find_ranking(keyword, site, limit, engine)
35
+ request_url, results_container, cite_container = case engine.to_sym
36
+ when :bing
37
+ ["http://www.bing.com/search?q=#{keyword}&count=#{RES_PER_PAGE}&first=", '#wg0 > li', 'cite']
38
+ when :google
39
+ ["http://www.google.com/search?q=#{keyword}&num=#{RES_PER_PAGE}&start=", '#ires > ol > li', 'cite']
40
+ when :yahoo
41
+ ["http://search.yahoo.com/search?p=#{keyword}&n=#{RES_PER_PAGE}&b=", '#web > ol > li', 'span']
42
+ end
43
+ count, rank = 0, nil
44
+ loop {
45
+ results = Nokogiri.parse(%x{ curl -A Mozilla "#{request_url}#{count}" }).css(results_container)
46
+ rank = results.index(results.detect{ |result| result.css(cite_container).text.match Regexp.new(site) })
47
+ if count > RES_LIMIT
48
+ break
49
+ elsif rank.present?
50
+ rank = count + rank
51
+ break
52
+ end
53
+ count += RES_PER_PAGE
54
+ }
55
+ rank.try(:next)
56
+ end
57
+
58
+ end
59
+ end
60
+
@@ -0,0 +1,20 @@
1
+ $LOAD_PATH << File.expand_path('../../lib' , __FILE__)
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ Bundler.setup(:development)
6
+ require 'keyword_ranking'
7
+
8
+ module KeywordRanking
9
+
10
+ describe Ranking do
11
+
12
+ describe "#start" do
13
+ it "creates a ranking instance" do
14
+ Ranking.instance.should_not be(nil)
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,5 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
5
+ --drb
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: keyword_ranking
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ version: "1.0"
10
+ platform: ruby
11
+ authors:
12
+ - Luis Alberto Velasco
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-08-17 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: nokogiri
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 113
29
+ segments:
30
+ - 1
31
+ - 4
32
+ - 3
33
+ - 1
34
+ version: 1.4.3.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 15
46
+ segments:
47
+ - 0
48
+ - 9
49
+ - 26
50
+ version: 0.9.26
51
+ type: :development
52
+ version_requirements: *id002
53
+ description: Create keyword rankings from the 3 major browsers
54
+ email: whizkas@hotmail.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - CHANGELOG
61
+ - LICENSE
62
+ - README
63
+ - lib/keyword_ranking.rb
64
+ files:
65
+ - CHANGELOG
66
+ - Gemfile
67
+ - Gemfile.lock
68
+ - LICENSE
69
+ - README
70
+ - Rakefile
71
+ - lib/keyword_ranking.rb
72
+ - spec/keyword_ranking_spec.rb
73
+ - spec/spec.opts
74
+ - keyword_ranking.gemspec
75
+ has_rdoc: true
76
+ homepage: http://github.com/whizkas/keyword_ranking
77
+ licenses: []
78
+
79
+ post_install_message:
80
+ rdoc_options:
81
+ - --line-numbers
82
+ - --inline-source
83
+ - --title
84
+ - Keyword_ranking
85
+ - --main
86
+ - README
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ hash: 3
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 11
104
+ segments:
105
+ - 1
106
+ - 2
107
+ version: "1.2"
108
+ requirements: []
109
+
110
+ rubyforge_project: keyword_ranking
111
+ rubygems_version: 1.3.7
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: Get keyword rankings from Google, Yahoo and Bing
115
+ test_files: []
116
+