ralexa 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7cf3a967f413ff08f51c5becbe7df4e6bc20fda3
4
+ data.tar.gz: 92d1e853bcd2bbadb4862ef25d3461e7c1631412
5
+ SHA512:
6
+ metadata.gz: 848a42c1b198bb0b482f455c14376e657d463069d8320d18faca74e6d1238bc54cfbc3bbefa6cd2cd0c63d5c46ab0e86c6833d3dab996db071ca70523c145783
7
+ data.tar.gz: ac3c77176cdc9df7299baed7d3fa94d2059e8302af6853cfb46124be4c050c05d528636f95a766c38aca02c2dfd38b2a7806a80ce5beaf4dfafb42ac03689e13
data/README.md CHANGED
@@ -58,6 +58,10 @@ session.top_sites.country("AU", 10).each do |s|
58
58
  puts "#{s.url} (#{s.page_views} pageviews)"
59
59
  end
60
60
 
61
+ # rank of an individual site
62
+ puts "Rank of Flippa.com"
63
+ puts session.url_info.rank("http://flippa.com")
64
+
61
65
  puts "bam!"
62
66
  ```
63
67
 
@@ -73,46 +77,51 @@ Status
73
77
  <th>Supported</th>
74
78
  </tr>
75
79
  <tr>
76
- <td rowspan="3">Alexa Top Sites</th>
77
- <td>TopSites</th>
78
- <td>Global</th>
79
- <td>Yes</th>
80
+ <td rowspan="3">Alexa Top Sites</td>
81
+ <td>TopSites</td>
82
+ <td>Global</td>
83
+ <td>Yes</td>
84
+ </tr>
85
+ <tr>
86
+ <td></td>
87
+ <td>Country</td>
88
+ <td>Yes</td>
80
89
  </tr>
81
90
  <tr>
82
- <td></th>
83
- <td>Country</th>
84
- <td>Yes</th>
91
+ <td></td>
92
+ <td>ListCountries</td>
93
+ <td>Yes</td>
85
94
  </tr>
86
95
  <tr>
87
- <td></th>
88
- <td>ListCountries</th>
89
- <td>Yes</th>
96
+ <td rowspan="7">Alexa Web Information Services</td>
97
+ <td>UrlInfo</td>
98
+ <td>Rank</td>
99
+ <td>Yes</td>
90
100
  </tr>
91
101
  <tr>
92
- <td rowspan="5">Alexa Web Information Services</th>
93
- <td>UrlInfo</th>
94
- <td>*</th>
95
- <td>Send a pull request!</th>
102
+ <td></td>
103
+ <td>*</td>
104
+ <td>Send a pull request!</td>
96
105
  </tr>
97
106
  <tr>
98
- <td>TrafficHistory</th>
99
- <td>*</th>
100
- <td>Send a pull request!</th>
107
+ <td>TrafficHistory</td>
108
+ <td>*</td>
109
+ <td>Send a pull request!</td>
101
110
  </tr>
102
111
  <tr>
103
- <td>CategoryBrowse</th>
104
- <td>*</th>
105
- <td>Send a pull request!</th>
112
+ <td>CategoryBrowse</td>
113
+ <td>*</td>
114
+ <td>Send a pull request!</td>
106
115
  </tr>
107
116
  <tr>
108
- <td>CategoryListings</th>
109
- <td>*</th>
110
- <td>Send a pull request!</th>
117
+ <td>CategoryListings</td>
118
+ <td>*</td>
119
+ <td>Send a pull request!</td>
111
120
  </tr>
112
121
  <tr>
113
- <td>SitesLinkingIn</th>
114
- <td>*</th>
115
- <td>Send a pull request!</th>
122
+ <td>SitesLinkingIn</td>
123
+ <td>*</td>
124
+ <td>Send a pull request!</td>
116
125
  </tr>
117
126
  </table>
118
127
 
@@ -7,6 +7,17 @@ module Ralexa
7
7
 
8
8
  private
9
9
 
10
+ # a single result value
11
+ def result(*params, &parser)
12
+ Result.new(
13
+ @client,
14
+ host,
15
+ path,
16
+ merged_params(*params),
17
+ &parser
18
+ ).result
19
+ end
20
+
10
21
  # A lazy collection which fetches records on demand.
11
22
  def collection(*params, &parser)
12
23
  LazyCollection.new(
@@ -1,16 +1,12 @@
1
1
  require "nokogiri"
2
2
 
3
3
  module Ralexa
4
- class LazyCollection
4
+ class LazyCollection < Result
5
5
 
6
6
  include Enumerable
7
7
 
8
8
  def initialize(client, host, path, parameters, &parser)
9
- @client = client
10
- @host = host
11
- @path = path
12
- @parameters = parameters
13
- @parser = parser
9
+ super(client, host, path, parameters, &parser)
14
10
  end
15
11
 
16
12
  def each
@@ -19,17 +15,5 @@ module Ralexa
19
15
  end
20
16
  end
21
17
 
22
- private
23
-
24
- def fetch(parameters)
25
- @client.get(@host, @path, parameters)
26
- end
27
-
28
- def parse(response_body)
29
- @parser.call(
30
- Nokogiri::XML.parse(response_body).remove_namespaces!
31
- )
32
- end
33
-
34
18
  end
35
19
  end
@@ -0,0 +1,30 @@
1
+ require "nokogiri"
2
+
3
+ module Ralexa
4
+ class Result
5
+
6
+ def initialize(client, host, path, parameters, &parser)
7
+ @client = client
8
+ @host = host
9
+ @path = path
10
+ @parameters = parameters
11
+ @parser = parser
12
+ end
13
+
14
+ def result
15
+ parse(fetch(@parameters))
16
+ end
17
+
18
+ private
19
+
20
+ def fetch(parameters)
21
+ @client.get(@host, @path, parameters)
22
+ end
23
+
24
+ def parse(response_body)
25
+ @parser.call(
26
+ Nokogiri::XML.parse(response_body).remove_namespaces!
27
+ )
28
+ end
29
+ end
30
+ end
@@ -11,5 +11,11 @@ module Ralexa
11
11
  TopSites.new(@client)
12
12
  end
13
13
 
14
+ # Provides a UrlInfo instance with an authenticated client.
15
+ # See: http://docs.amazonwebservices.com/AlexaWebInfoService/latest
16
+ def url_info
17
+ UrlInfo.new(@client)
18
+ end
19
+
14
20
  end
15
21
  end
@@ -0,0 +1,19 @@
1
+ module Ralexa
2
+ class UrlInfo < AbstractService
3
+
4
+ # The site's Alexa rank
5
+ def rank(url, params = {})
6
+ result({"ResponseGroup" => "Rank", "Url" => url}, params) do |document|
7
+ document.at("//UrlInfoResult/Alexa/TrafficData/Rank").text.to_i
8
+ end
9
+ end
10
+
11
+
12
+ private
13
+
14
+ def host; "awis.amazonaws.com" end
15
+ def path; "/" end
16
+ def default_params; {"Action" => "UrlInfo"}; end
17
+
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module Ralexa
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/ralexa.rb CHANGED
@@ -2,11 +2,13 @@
2
2
  abstract_service
3
3
  canonicalized_query_string
4
4
  client
5
+ result
5
6
  lazy_collection
6
7
  paginating_collection
7
8
  paginator
8
9
  session
9
10
  top_sites
11
+ url_info
10
12
  uri_signer
11
13
  version
12
14
  }.each do |file|
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <aws:UrlInfoResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11"><aws:OperationRequest><aws:RequestId>bb3746dc-fe13-aae7-8058-a98caf283873</aws:RequestId></aws:OperationRequest><aws:UrlInfoResult><aws:Alexa>
3
+
4
+ <aws:TrafficData>
5
+ <aws:DataUrl type="canonical">google.com/</aws:DataUrl>
6
+ <aws:Rank>1</aws:Rank>
7
+ </aws:TrafficData>
8
+ </aws:Alexa></aws:UrlInfoResult><aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"><aws:StatusCode>Success</aws:StatusCode></aws:ResponseStatus></aws:Response></aws:UrlInfoResponse>
data/spec/session_spec.rb CHANGED
@@ -9,5 +9,11 @@ module Ralexa
9
9
  end
10
10
  end
11
11
 
12
+ describe ".url_info" do
13
+ it "returns a Ralexa::UrlInfo instance" do
14
+ Session.new("id", "secret").url_info.must_be_kind_of ::Ralexa::UrlInfo
15
+ end
16
+ end
17
+
12
18
  end
13
19
  end
@@ -90,9 +90,9 @@ module Ralexa
90
90
  end
91
91
 
92
92
  it "fetches, parses and returns countries" do
93
- countries = top_sites.list_countries
94
- countries.to_a.size.must_equal 2
95
- a, u = countries.to_a
93
+ countries = top_sites.list_countries.to_a
94
+ countries.size.must_equal 2
95
+ a, u = countries
96
96
 
97
97
  u.name.must_equal "United States"
98
98
  u.code.must_equal "US"
@@ -0,0 +1,28 @@
1
+ require_relative "spec_helper"
2
+
3
+ module Ralexa
4
+ describe UrlInfo do
5
+
6
+ let(:url_info) { UrlInfo.new(client) }
7
+ let(:client) { MiniTest::Mock.new }
8
+
9
+ describe "#rank" do
10
+ def expected_params
11
+ {
12
+ "Action" => "UrlInfo",
13
+ "ResponseGroup" => "Rank",
14
+ "Url" => "google.com"
15
+ }
16
+ end
17
+ before do
18
+ client.expect :get, fixture("rank.xml"),
19
+ ["awis.amazonaws.com", "/", expected_params]
20
+ end
21
+ it "fetches, parses, and returns the site's rank" do
22
+ rank = url_info.rank("google.com")
23
+ rank.must_equal 1
24
+ end
25
+ end
26
+
27
+ end
28
+ end
metadata CHANGED
@@ -1,60 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ralexa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Paul Annesley
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-03-27 00:00:00.000000000 Z
11
+ date: 2013-05-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: addressable
16
- requirement: &70187430114040 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.2.7
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70187430114040
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.2.7
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: nokogiri
27
- requirement: &70187430113620 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70187430113620
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: minitest
38
- requirement: &70187430113160 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - '>='
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70187430113160
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: rake
49
- requirement: &70187430112740 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *70187430112740
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
58
69
  description: Ruby client for Amazon Alexa APIs.
59
70
  email:
60
71
  - paul@annesley.cc
@@ -74,9 +85,11 @@ files:
74
85
  - lib/ralexa/lazy_collection.rb
75
86
  - lib/ralexa/paginating_collection.rb
76
87
  - lib/ralexa/paginator.rb
88
+ - lib/ralexa/result.rb
77
89
  - lib/ralexa/session.rb
78
90
  - lib/ralexa/top_sites.rb
79
91
  - lib/ralexa/uri_signer.rb
92
+ - lib/ralexa/url_info.rb
80
93
  - lib/ralexa/version.rb
81
94
  - ralexa.gemspec
82
95
  - spec/canonicalized_query_string_spec.rb
@@ -85,47 +98,35 @@ files:
85
98
  - spec/fixtures/global-page2.xml
86
99
  - spec/fixtures/global-top10.xml
87
100
  - spec/fixtures/list_countries.xml
101
+ - spec/fixtures/rank.xml
88
102
  - spec/paginator_spec.rb
89
103
  - spec/ralexa_spec.rb
90
104
  - spec/session_spec.rb
91
105
  - spec/spec_helper.rb
92
106
  - spec/top_sites_spec.rb
93
107
  - spec/uri_signer_spec.rb
108
+ - spec/url_info_spec.rb
94
109
  homepage: https://github.com/flippa/ralexa
95
110
  licenses: []
111
+ metadata: {}
96
112
  post_install_message:
97
113
  rdoc_options: []
98
114
  require_paths:
99
115
  - lib
100
116
  required_ruby_version: !ruby/object:Gem::Requirement
101
- none: false
102
117
  requirements:
103
- - - ! '>='
118
+ - - '>='
104
119
  - !ruby/object:Gem::Version
105
120
  version: '0'
106
121
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
122
  requirements:
109
- - - ! '>='
123
+ - - '>='
110
124
  - !ruby/object:Gem::Version
111
125
  version: '0'
112
126
  requirements: []
113
127
  rubyforge_project:
114
- rubygems_version: 1.8.11
128
+ rubygems_version: 2.0.2
115
129
  signing_key:
116
- specification_version: 3
130
+ specification_version: 4
117
131
  summary: Ruby client for Amazon Alexa APIs such as TopSites.
118
- test_files:
119
- - spec/canonicalized_query_string_spec.rb
120
- - spec/client_spec.rb
121
- - spec/fixtures/global-page1.xml
122
- - spec/fixtures/global-page2.xml
123
- - spec/fixtures/global-top10.xml
124
- - spec/fixtures/list_countries.xml
125
- - spec/paginator_spec.rb
126
- - spec/ralexa_spec.rb
127
- - spec/session_spec.rb
128
- - spec/spec_helper.rb
129
- - spec/top_sites_spec.rb
130
- - spec/uri_signer_spec.rb
131
- has_rdoc:
132
+ test_files: []