alexa 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/{README.rdoc → README.markdown} +22 -11
- data/alexa.gemspec +15 -19
- data/lib/alexa/url_info.rb +24 -12
- data/lib/alexa/version.rb +1 -1
- data/test/url_info_test.rb +2 -2
- metadata +7 -7
@@ -1,28 +1,39 @@
|
|
1
|
-
|
1
|
+
# Alexa Web Information Service #
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
## Installation ##
|
4
|
+
|
5
|
+
```
|
6
|
+
gem install alexa
|
7
|
+
```
|
8
|
+
|
9
|
+
## Usage ##
|
10
|
+
|
11
|
+
``` ruby
|
12
|
+
Alexa.url_info(:access_key_id => "key", :secret_access_key => "secret", :host => "site.com")
|
8
13
|
|
9
14
|
returns object with methods:
|
10
15
|
:xml_response, :rank, :data_url, :site_title, :site_description, :language_locale, :language_encoding,
|
11
16
|
:links_in_count, :keywords, :related_links, :speed_median_load_time, :speed_percentile,
|
12
17
|
:rank_by_country, :rank_by_city, :usage_statistics
|
18
|
+
```
|
19
|
+
|
20
|
+
NOTE: You can specify option `:response_group => "Rank,ContactInfo"` or any other valid group.
|
21
|
+
See: [Docs](http://docs.amazonwebservices.com/AlexaWebInfoService/latest/)
|
22
|
+
Default response group takes all the available options.
|
13
23
|
|
14
24
|
You can set configuration in block like this:
|
25
|
+
|
26
|
+
``` ruby
|
15
27
|
Alexa.config do |c|
|
16
28
|
c.access_key_id = "key"
|
17
29
|
c.secret_access_key = "secret"
|
18
30
|
end
|
31
|
+
```
|
19
32
|
|
20
|
-
|
21
|
-
gem install alexa
|
33
|
+
## Contributors ##
|
22
34
|
|
23
|
-
|
24
|
-
* rmoriz[http://github.com/rmoriz]
|
35
|
+
* [rmoriz](https://github.com/rmoriz)
|
25
36
|
|
26
|
-
|
37
|
+
## Copyright ##
|
27
38
|
|
28
39
|
Copyright (c) 2011 Wojciech Wnętrzak. See LICENSE for details.
|
data/alexa.gemspec
CHANGED
@@ -1,25 +1,21 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require "alexa/version"
|
2
|
+
require File.expand_path('../lib/alexa/version', __FILE__)
|
4
3
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
s.homepage = "https://github.com/morgoth/alexa"
|
12
|
-
s.summary = %q{Alexa Web Information Service library}
|
13
|
-
s.description = %q{Alexa Web Information Service library (AWIS)}
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Wojciech Wnętrzak"]
|
6
|
+
gem.email = ["w.wnetrzak@gmail.com"]
|
7
|
+
gem.description = %q{Alexa Web Information Service library (AWIS)}
|
8
|
+
gem.summary = %q{Alexa Web Information Service library}
|
9
|
+
gem.homepage = "https://github.com/morgoth/alexa"
|
14
10
|
|
15
|
-
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "alexa"
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
gem.version = Alexa::VERSION
|
16
17
|
|
17
|
-
|
18
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
s.require_paths = ["lib"]
|
18
|
+
gem.add_dependency "xml-simple"
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
s.add_development_dependency "mocha"
|
20
|
+
gem.add_development_dependency "mocha"
|
25
21
|
end
|
data/lib/alexa/url_info.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Alexa
|
2
2
|
class UrlInfo
|
3
3
|
API_VERSION = "2005-07-11"
|
4
|
+
HOST = "awis.amazonaws.com"
|
4
5
|
RESPONSE_GROUP = "Rank,ContactInfo,AdultContent,Speed,Language,Keywords,OwnedDomains,LinksInCount,SiteData,RelatedLinks,RankByCountry,RankByCity,UsageStats"
|
5
6
|
|
6
7
|
attr_accessor :host, :response_group, :xml_response,
|
@@ -79,21 +80,32 @@ module Alexa
|
|
79
80
|
end
|
80
81
|
|
81
82
|
def signature
|
82
|
-
|
83
|
+
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha1"), Alexa.config.secret_access_key, sign)).strip
|
83
84
|
end
|
84
85
|
|
85
86
|
def url
|
86
|
-
URI.parse("http
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
87
|
+
URI.parse("http://#{HOST}/?" + query + "&Signature=" + CGI::escape(signature))
|
88
|
+
end
|
89
|
+
|
90
|
+
def params_without_signature
|
91
|
+
{
|
92
|
+
"Action" => "UrlInfo",
|
93
|
+
"AWSAccessKeyId" => Alexa.config.access_key_id,
|
94
|
+
"ResponseGroup" => response_group,
|
95
|
+
"SignatureMethod" => "HmacSHA1",
|
96
|
+
"SignatureVersion" => "2",
|
97
|
+
"Timestamp" => timestamp,
|
98
|
+
"Url" => host,
|
99
|
+
"Version" => API_VERSION
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def sign
|
104
|
+
"GET\n" + HOST + "\n/\n" + query
|
105
|
+
end
|
106
|
+
|
107
|
+
def query
|
108
|
+
params_without_signature.map { |key, value| "#{key}=#{CGI::escape(value)}" }.sort.join("&")
|
97
109
|
end
|
98
110
|
end
|
99
111
|
end
|
data/lib/alexa/version.rb
CHANGED
data/test/url_info_test.rb
CHANGED
@@ -11,14 +11,14 @@ describe "Alexa::UlrInfo" do
|
|
11
11
|
|
12
12
|
it "should Generate signature" do
|
13
13
|
@alexa.stubs(:timestamp).returns("2009-07-03T07:22:24.000Z")
|
14
|
-
assert_equal "
|
14
|
+
assert_equal "5Jql3rds3vL9hyijnYtUIVv1H8Q=", @alexa.send(:signature)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should Generate url" do
|
18
18
|
@alexa.stubs(:timestamp).returns("2009-07-03T07:22:24.000Z")
|
19
19
|
@alexa.response_group = "Rank,ContactInfo,AdultContent,Speed,Language,Keywords,OwnedDomains,LinksInCount,SiteData,RelatedLinks"
|
20
20
|
@alexa.host = "heroku.com"
|
21
|
-
expected_uri = "/?AWSAccessKeyId=12345678901234567890&Action=UrlInfo&ResponseGroup=Rank%2CContactInfo%2CAdultContent%2CSpeed%2CLanguage%2CKeywords%2COwnedDomains%2CLinksInCount%2CSiteData%2CRelatedLinks&
|
21
|
+
expected_uri = "/?AWSAccessKeyId=12345678901234567890&Action=UrlInfo&ResponseGroup=Rank%2CContactInfo%2CAdultContent%2CSpeed%2CLanguage%2CKeywords%2COwnedDomains%2CLinksInCount%2CSiteData%2CRelatedLinks&SignatureMethod=HmacSHA1&SignatureVersion=2&Timestamp=2009-07-03T07%3A22%3A24.000Z&Url=heroku.com&Version=2005-07-11&Signature=H9VtDwXGXT5O8NodLOlsc2wIfv8%3D"
|
22
22
|
assert_equal expected_uri, @alexa.send(:url).request_uri
|
23
23
|
assert_equal "awis.amazonaws.com", @alexa.send(:url).host
|
24
24
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: alexa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Wojciech Wn\xC4\x99trzak"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-06-22 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: xml-simple
|
@@ -47,7 +47,7 @@ files:
|
|
47
47
|
- .gitignore
|
48
48
|
- Gemfile
|
49
49
|
- LICENSE
|
50
|
-
- README.
|
50
|
+
- README.markdown
|
51
51
|
- Rakefile
|
52
52
|
- alexa.gemspec
|
53
53
|
- lib/alexa.rb
|
@@ -73,7 +73,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
hash:
|
76
|
+
hash: 3945594913730495291
|
77
77
|
segments:
|
78
78
|
- 0
|
79
79
|
version: "0"
|
@@ -82,14 +82,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
requirements:
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
hash:
|
85
|
+
hash: 3945594913730495291
|
86
86
|
segments:
|
87
87
|
- 0
|
88
88
|
version: "0"
|
89
89
|
requirements: []
|
90
90
|
|
91
|
-
rubyforge_project:
|
92
|
-
rubygems_version: 1.8.
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.8.5
|
93
93
|
signing_key:
|
94
94
|
specification_version: 3
|
95
95
|
summary: Alexa Web Information Service library
|