ralexa 0.0.5 → 0.0.6

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.
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: []