al_papi 0.0.15 → 1.0.0
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.
- data/README.md +116 -9
- data/lib/al_papi.rb +31 -7
- data/lib/al_papi/account.rb +17 -0
- data/lib/al_papi/config.rb +11 -9
- data/lib/al_papi/engines.rb +6 -1
- data/lib/al_papi/http.rb +2 -4
- data/lib/al_papi/keyword.rb +45 -0
- data/lib/al_papi/locales.rb +13 -214
- data/lib/al_papi/request_error.rb +1 -1
- data/lib/al_papi/response.rb +21 -3
- data/lib/al_papi/web_insight.rb +18 -37
- metadata +75 -11
- data/lib/al_papi/request.rb +0 -75
data/README.md
CHANGED
@@ -9,19 +9,62 @@ A wrapper around the Partner API calls. Allows post, priority post and get calls
|
|
9
9
|
|
10
10
|
gem install 'al_papi'
|
11
11
|
|
12
|
-
##
|
12
|
+
## Configuration
|
13
13
|
|
14
|
-
|
14
|
+
Set configuration options to be used on requests:
|
15
15
|
|
16
16
|
require 'al_papi'
|
17
17
|
|
18
|
-
|
18
|
+
AlPapi.configure do |config|
|
19
|
+
config.api_key = 'yR43BtBDjadfavMy6a6aK0'
|
20
|
+
end
|
21
|
+
|
22
|
+
## Account
|
23
|
+
|
24
|
+
Account endpoint lets you get basic info about your account, current queue times and any system messages.
|
25
|
+
|
26
|
+
# Pass your account ID into the info method
|
27
|
+
res = AlPapi::Account.info '1'
|
28
|
+
|
29
|
+
# Response body will be JSON response
|
30
|
+
res.body
|
31
|
+
|
32
|
+
# You can use the parsed_body method for convenience to access data
|
33
|
+
account_info = @res.parsed_body
|
34
|
+
account_info.user.current_balance # 500.00
|
35
|
+
account_info.queue.bing_time # 15
|
36
|
+
account_info.messages.system # ['The system is back online!']
|
37
|
+
|
38
|
+
Example response in JSON
|
39
|
+
|
40
|
+
{
|
41
|
+
"messages": {
|
42
|
+
"system": ['The system is back online!']
|
43
|
+
},
|
44
|
+
"queue": {
|
45
|
+
"bing_time": 15,
|
46
|
+
"google_time": 3,
|
47
|
+
"yahoo_time": 2
|
48
|
+
},
|
49
|
+
"user": {
|
50
|
+
"current_balance": 500.00,
|
51
|
+
"current_get_count": 2000,
|
52
|
+
"current_post_count": 1000,
|
53
|
+
"hourly_get_limit": 2000,
|
54
|
+
"hourly_post_limit": 1000
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
## Keywords
|
59
|
+
|
60
|
+
Keywords endpoint allows you to POST keywords you want SERPs for and to GET those results
|
61
|
+
when they are ready.
|
19
62
|
|
20
63
|
### POST
|
21
64
|
|
22
65
|
Post your keyword-engine-locale combination to the API:
|
23
66
|
|
24
|
-
res =
|
67
|
+
res = AlPapi::Keyword.post keyword: "Centaur Love'n", engine: 'google', locale: 'en-us'
|
25
68
|
|
26
69
|
if res.success?
|
27
70
|
p 'Centaur High Hoof'
|
@@ -33,7 +76,7 @@ Post your keyword-engine-locale combination to the API:
|
|
33
76
|
|
34
77
|
Post your keyword to the priority queue if you need results in a more timely manner:
|
35
78
|
|
36
|
-
res =
|
79
|
+
res = AlPapi::Keyword.priority_post keyword: "Mad Scientist", engine: 'bing', locale: 'en-ca'
|
37
80
|
|
38
81
|
if res.success?
|
39
82
|
p 'Canadian Bing Scientist Time'
|
@@ -45,7 +88,7 @@ Post your keyword to the priority queue if you need results in a more timely man
|
|
45
88
|
|
46
89
|
When you are ready to get your results you can do a GET request for your keyword-engine-locale combo:
|
47
90
|
|
48
|
-
res =
|
91
|
+
res = AlPapi::Keyword.get keyword: "Mad Scientist", engine: 'bing', locale: 'en-ca'
|
49
92
|
|
50
93
|
if res.success?
|
51
94
|
p 'Canadian Bing Scientist Time'
|
@@ -82,6 +125,11 @@ When making an API request a response object is returned with any errors, http r
|
|
82
125
|
# On GET requests the body will be a hash of your results if successful.
|
83
126
|
res.body
|
84
127
|
|
128
|
+
# Parsed Body:
|
129
|
+
# Returns the parsed JSON body, if present, as a Hashie::Mash object.
|
130
|
+
# This can be useful to get an object with methods to call instead of
|
131
|
+
# indexing into nested hashes.
|
132
|
+
|
85
133
|
# Code:
|
86
134
|
# Returns http response code.
|
87
135
|
# 204: On GET requests when no data is available yet
|
@@ -98,6 +146,30 @@ When making an API request a response object is returned with any errors, http r
|
|
98
146
|
# Returns true or false if your account has been suspended
|
99
147
|
res.suspended?
|
100
148
|
|
149
|
+
## Web Insight
|
150
|
+
|
151
|
+
### Description
|
152
|
+
|
153
|
+
Web Insight queue takes a URL for the Partner API to scrape and parse out high level insight about the page
|
154
|
+
and return the results to your callback URL passed in or set for your account.
|
155
|
+
|
156
|
+
### POST
|
157
|
+
|
158
|
+
Post the URL of the page you want to gain insight into and the callback URL knowing when your results are
|
159
|
+
ready to get.
|
160
|
+
|
161
|
+
res = AlPapi::WebInsight.post url: 'http://www.qwiki.com', callback: 'http://your-callback-url.com'
|
162
|
+
|
163
|
+
### GET
|
164
|
+
|
165
|
+
When your results are ready to get you will receive a callback that contains the information on how
|
166
|
+
to get the insight on your URL. In the callback you should receive a date_created and time_created to use
|
167
|
+
in your get request. You will also use your original URL posted.
|
168
|
+
|
169
|
+
res = AlPapi::WebInsight.get url: 'http://www.qwiki.com', date_created: '2012-06-14', time_created: '01:50'
|
170
|
+
|
171
|
+
## Extras
|
172
|
+
|
101
173
|
### Engines
|
102
174
|
|
103
175
|
Supported engines are Google, Yahoo and Bing. To get a list of supported engines run the following:
|
@@ -109,9 +181,44 @@ Supported engines are Google, Yahoo and Bing. To get a list of supported engines
|
|
109
181
|
Supported locales differ by the engine being used. In order to make sure you are using a supported locale
|
110
182
|
for the engine you are posting a keyword to there is a locales class to help you:
|
111
183
|
|
112
|
-
|
113
|
-
|
114
|
-
|
184
|
+
### Supported
|
185
|
+
|
186
|
+
A way to see all the supported locales for a specified engine
|
187
|
+
|
188
|
+
AlPapi::Locales.supported # defaults to google
|
189
|
+
|
190
|
+
Example response
|
191
|
+
|
192
|
+
{
|
193
|
+
engine: google
|
194
|
+
locales: {
|
195
|
+
ko-kr: {
|
196
|
+
description: Korea - Korean
|
197
|
+
tld: http://www.google.co.kr
|
198
|
+
},
|
199
|
+
...
|
200
|
+
el-gr: {
|
201
|
+
description: Greece - Greek
|
202
|
+
tld: http://www.google.gr
|
203
|
+
}
|
204
|
+
}
|
205
|
+
supported: true
|
206
|
+
}
|
207
|
+
|
208
|
+
### Description
|
209
|
+
|
210
|
+
You can query the API to see if a specific locale is supported for an engine and get a description of that locale.
|
211
|
+
|
212
|
+
AlPapi::Locales.description 'google', 'ko-kr'
|
213
|
+
|
214
|
+
Example response
|
215
|
+
|
216
|
+
{
|
217
|
+
locale: ko-kr
|
218
|
+
description: Korea - Korean
|
219
|
+
supported: true
|
220
|
+
engine: google
|
221
|
+
}
|
115
222
|
|
116
223
|
## License
|
117
224
|
|
data/lib/al_papi.rb
CHANGED
@@ -3,15 +3,39 @@ require 'rest-client'
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'hashie'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
6
|
+
require File.dirname(__FILE__) + '/al_papi/account'
|
10
7
|
require File.dirname(__FILE__) + '/al_papi/config'
|
8
|
+
require File.dirname(__FILE__) + '/al_papi/engines'
|
11
9
|
require File.dirname(__FILE__) + '/al_papi/http'
|
12
|
-
require File.dirname(__FILE__) + '/al_papi/
|
10
|
+
require File.dirname(__FILE__) + '/al_papi/keyword'
|
11
|
+
require File.dirname(__FILE__) + '/al_papi/locales'
|
13
12
|
require File.dirname(__FILE__) + '/al_papi/request_error'
|
14
13
|
require File.dirname(__FILE__) + '/al_papi/response'
|
15
|
-
require File.dirname(__FILE__) + '/al_papi/locales'
|
16
|
-
require File.dirname(__FILE__) + '/al_papi/engines'
|
17
14
|
require File.dirname(__FILE__) + '/al_papi/web_insight'
|
15
|
+
|
16
|
+
module AlPapi
|
17
|
+
|
18
|
+
extend self
|
19
|
+
|
20
|
+
##
|
21
|
+
# @example Configure takes block to set API key to be used in API calls.
|
22
|
+
# AlPapi.configure do |config|
|
23
|
+
# config.api_key = 'my-key'
|
24
|
+
# end
|
25
|
+
|
26
|
+
def configure
|
27
|
+
yield config
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# @return [AlPapi::Config]
|
32
|
+
|
33
|
+
def config
|
34
|
+
@config ||= Config.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def http # @private
|
38
|
+
Http.new(config)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module AlPapi
|
2
|
+
|
3
|
+
class Account
|
4
|
+
|
5
|
+
##
|
6
|
+
# Details for your account including hourly POST/GET limits, current queue times and current balance.
|
7
|
+
# Also includes any system messages posted about the API.
|
8
|
+
#
|
9
|
+
# @param account_id [String] *Required* - Your account ID in the Partner API
|
10
|
+
|
11
|
+
def self.info(account_id)
|
12
|
+
AlPapi.http.get "/account/#{account_id}"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/lib/al_papi/config.rb
CHANGED
@@ -1,23 +1,25 @@
|
|
1
1
|
module AlPapi
|
2
2
|
|
3
|
+
##
|
4
|
+
#
|
5
|
+
# Config class used internally.
|
6
|
+
# Configure API calls using AlPapi.configure
|
7
|
+
|
3
8
|
class Config
|
4
9
|
|
5
10
|
DEFAULT_HOST = 'http://api.authoritylabs.com'
|
6
|
-
DEFAULT_PORT = 80
|
11
|
+
DEFAULT_PORT = 80 # @private
|
7
12
|
|
8
13
|
attr_accessor :api_key
|
9
|
-
attr_reader :host, :port
|
14
|
+
attr_reader :host, :port # @private
|
10
15
|
|
11
16
|
##
|
12
17
|
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# [auth_key] Your Partner API api key. Required to make any API requests
|
18
|
+
# @private
|
16
19
|
|
17
|
-
def initialize
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@port = DEFAULT_PORT
|
20
|
+
def initialize
|
21
|
+
@host = DEFAULT_HOST
|
22
|
+
@port = DEFAULT_PORT
|
21
23
|
end
|
22
24
|
|
23
25
|
end
|
data/lib/al_papi/engines.rb
CHANGED
data/lib/al_papi/http.rb
CHANGED
@@ -16,10 +16,8 @@ module AlPapi
|
|
16
16
|
request 'post', path, build_params(params)
|
17
17
|
end
|
18
18
|
|
19
|
-
def build_params(params =
|
20
|
-
|
21
|
-
return nil unless params.is_a?(Hash)
|
22
|
-
params.merge(auth_token: @config.api_key, format: 'json')
|
19
|
+
def build_params(params = {})
|
20
|
+
params.merge(:auth_token => @config.api_key, :format => 'json')
|
23
21
|
end
|
24
22
|
|
25
23
|
def request(http_verb, path, params = nil)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module AlPapi
|
2
|
+
|
3
|
+
class Keyword
|
4
|
+
|
5
|
+
##
|
6
|
+
#
|
7
|
+
# POST a keyword/engine/locale combination to get SERP for.
|
8
|
+
#
|
9
|
+
# @param keyword [String] *Required* - The keyword you are ready to get results for.
|
10
|
+
# @param engine [String] _Optional_ - Defaults to google
|
11
|
+
# @param locale [String] _Optional_ - Defaults to en-us. See {AlPapi::Locales} for supported locales.
|
12
|
+
# @param pages_from [String] _Optional_ - Defaults is false. Google specific parameter to get results from locale passed in when set to true.
|
13
|
+
# @param callback [String] _Optional_ - Default is the callback you have set for your account. Set specific callbacks per request by using this paramerter. A POST is sent to this callback URL when results are returned.
|
14
|
+
|
15
|
+
def self.post(params = {}, priority = false)
|
16
|
+
path = priority ? '/keywords/priority' : '/keywords'
|
17
|
+
AlPapi.http.post path, params
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
#
|
22
|
+
# See post method {AlPapi::Keyword.post} for required params
|
23
|
+
|
24
|
+
def self.priority_post(params = {})
|
25
|
+
post params, true
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
#
|
30
|
+
# Get SERP results for keyword already POSTed or in Partner API already.
|
31
|
+
# See parameters for what can be passed in.
|
32
|
+
#
|
33
|
+
# @param keyword [String] *Required* - The keyword you are ready to get results for.
|
34
|
+
# @param engine [String] _Optional_ - Defaults to google
|
35
|
+
# @param locale [String] _Optional_ - Defaults to en-us. See {AlPapi::Locales} for supported locales.
|
36
|
+
# @param rank_date [String] _Optional_ - Defaults to today UTC time. Format of YYY-MM-DD ie. 2011-12-28
|
37
|
+
# @param data_format [String] _Optional_ - Default is JSON. If you want raw html pass "html" in for data_format
|
38
|
+
|
39
|
+
def self.get(params = {})
|
40
|
+
AlPapi.http.get '/keywords/get', params
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/al_papi/locales.rb
CHANGED
@@ -2,224 +2,23 @@ module AlPapi
|
|
2
2
|
|
3
3
|
class Locales
|
4
4
|
|
5
|
-
GOOGLE_LOCALES = [
|
6
|
-
'af-za',
|
7
|
-
'ar-ae',
|
8
|
-
'ar-bh',
|
9
|
-
'ar-il',
|
10
|
-
'ar-qa',
|
11
|
-
'ar-sa',
|
12
|
-
'ar-tn',
|
13
|
-
'bg-bg',
|
14
|
-
'ca-ct',
|
15
|
-
'cs-cz',
|
16
|
-
'da-dk',
|
17
|
-
'de-at',
|
18
|
-
'de-be',
|
19
|
-
'de-ch',
|
20
|
-
'de-de',
|
21
|
-
'de-ro',
|
22
|
-
'el-gr',
|
23
|
-
'en-ae',
|
24
|
-
'en-au',
|
25
|
-
'en-be',
|
26
|
-
'en-bh',
|
27
|
-
'en-ca',
|
28
|
-
'en-hk',
|
29
|
-
'en-id',
|
30
|
-
'en-ie',
|
31
|
-
'en-il',
|
32
|
-
'en-in',
|
33
|
-
'en-mt',
|
34
|
-
'en-my',
|
35
|
-
'en-ng',
|
36
|
-
'en-nz',
|
37
|
-
'en-ph',
|
38
|
-
'en-sa',
|
39
|
-
'en-sg',
|
40
|
-
'en-th',
|
41
|
-
'en-tw',
|
42
|
-
'en-ua',
|
43
|
-
'en-uk',
|
44
|
-
'en-us',
|
45
|
-
'en-vn',
|
46
|
-
'en-qa',
|
47
|
-
'en-za',
|
48
|
-
'es-ar',
|
49
|
-
'es-cl',
|
50
|
-
'es-co',
|
51
|
-
'es-es',
|
52
|
-
'es-mx',
|
53
|
-
'es-pe',
|
54
|
-
'es-pr',
|
55
|
-
'es-us',
|
56
|
-
'es-ve',
|
57
|
-
'et-ee',
|
58
|
-
'fi-fl',
|
59
|
-
'fr-be',
|
60
|
-
'fr-ca',
|
61
|
-
'fr-ch',
|
62
|
-
'fr-fr',
|
63
|
-
'fr-tn',
|
64
|
-
'fr-vn',
|
65
|
-
'ga-ie',
|
66
|
-
'ha-ng',
|
67
|
-
'he-il',
|
68
|
-
'hi-in',
|
69
|
-
'hr-hr',
|
70
|
-
'hu-hu',
|
71
|
-
'hu-ro',
|
72
|
-
'id-id',
|
73
|
-
'ie-en',
|
74
|
-
'ig-ng',
|
75
|
-
'it-ch',
|
76
|
-
'it-it',
|
77
|
-
'ja-jp',
|
78
|
-
'jw-id',
|
79
|
-
'ko-kr',
|
80
|
-
'lt-lt',
|
81
|
-
'lt-lv',
|
82
|
-
'lv-lv',
|
83
|
-
'mi-nz',
|
84
|
-
'ms-my',
|
85
|
-
'ms-sg',
|
86
|
-
'mt-mt',
|
87
|
-
'nl-be',
|
88
|
-
'nl-nl',
|
89
|
-
'no-no',
|
90
|
-
'pl-pl',
|
91
|
-
'pt-br',
|
92
|
-
'pt-pt',
|
93
|
-
'rm-ch',
|
94
|
-
'ro-ro',
|
95
|
-
'ru-et',
|
96
|
-
'ru-lv',
|
97
|
-
'ru-ru',
|
98
|
-
'ru-ua',
|
99
|
-
'sl-si',
|
100
|
-
'sk-sk',
|
101
|
-
'sr-rs',
|
102
|
-
'sv-fi',
|
103
|
-
'sv-se',
|
104
|
-
'ta-sg',
|
105
|
-
'th-th',
|
106
|
-
'tl-ph',
|
107
|
-
'tr-tr',
|
108
|
-
'uk-ua',
|
109
|
-
'vi-vn',
|
110
|
-
'xh-za',
|
111
|
-
'yo-ng',
|
112
|
-
'zh-cn-hk',
|
113
|
-
'zh-hk-hk',
|
114
|
-
'zh-cn-sg',
|
115
|
-
'zh-cn-tw',
|
116
|
-
'zh-cn-vn',
|
117
|
-
'zh-tw-tw',
|
118
|
-
'zu-za'
|
119
|
-
]
|
120
|
-
|
121
|
-
YAHOO_LOCALES = [
|
122
|
-
'da-dk',
|
123
|
-
'de-at',
|
124
|
-
'de-ch',
|
125
|
-
'de-de',
|
126
|
-
'el-gr',
|
127
|
-
'en-au',
|
128
|
-
'en-ca',
|
129
|
-
'en-ie',
|
130
|
-
'en-in',
|
131
|
-
'en-my',
|
132
|
-
'en-nz',
|
133
|
-
'en-ph',
|
134
|
-
'en-sg',
|
135
|
-
'en-tw',
|
136
|
-
'en-uk',
|
137
|
-
'en-us',
|
138
|
-
'es-ar',
|
139
|
-
'es-cl',
|
140
|
-
'es-co',
|
141
|
-
'es-es',
|
142
|
-
'es-mx',
|
143
|
-
'es-pe',
|
144
|
-
'es-us',
|
145
|
-
'es-ve',
|
146
|
-
'fi-fl',
|
147
|
-
'fr-ca',
|
148
|
-
'fr-ch',
|
149
|
-
'fr-fr',
|
150
|
-
'id-id',
|
151
|
-
'it-ch',
|
152
|
-
'it-it',
|
153
|
-
'ja-jp',
|
154
|
-
'ko-kr',
|
155
|
-
'kr-kr',
|
156
|
-
'nl-nl',
|
157
|
-
'no-no',
|
158
|
-
'pt-br',
|
159
|
-
'ro-ro',
|
160
|
-
'ru-ru',
|
161
|
-
'sv-se',
|
162
|
-
'th-th',
|
163
|
-
'tr-tr',
|
164
|
-
'vi-vn',
|
165
|
-
'zh-cn',
|
166
|
-
'zh-cn-tw',
|
167
|
-
'zh-hk'
|
168
|
-
]
|
169
|
-
|
170
|
-
BING_LOCALES = [
|
171
|
-
'ar-sa',
|
172
|
-
'de-at',
|
173
|
-
'de-ch',
|
174
|
-
'de-de',
|
175
|
-
'da-dk',
|
176
|
-
'en-au',
|
177
|
-
'en-ca',
|
178
|
-
'en-ch',
|
179
|
-
'en-ie',
|
180
|
-
'en-in',
|
181
|
-
'en-nz',
|
182
|
-
'en-sa',
|
183
|
-
'en-sg',
|
184
|
-
'en-uk',
|
185
|
-
'en-us',
|
186
|
-
'es-ar',
|
187
|
-
'es-co',
|
188
|
-
'es-cl',
|
189
|
-
'es-es',
|
190
|
-
'es-mx',
|
191
|
-
'es-pe',
|
192
|
-
'es-us',
|
193
|
-
'es-ve',
|
194
|
-
'fr-ca',
|
195
|
-
'fr-ch',
|
196
|
-
'fr-fr',
|
197
|
-
'it-ch',
|
198
|
-
'it-it',
|
199
|
-
'ja-jp',
|
200
|
-
'ms-my',
|
201
|
-
'nl-be',
|
202
|
-
'nl-nl',
|
203
|
-
'no-no',
|
204
|
-
'pt-br',
|
205
|
-
'rm-ch',
|
206
|
-
'ru-ru',
|
207
|
-
'sv-se',
|
208
|
-
'tl-ph',
|
209
|
-
'vi-vn',
|
210
|
-
'zh-cn',
|
211
|
-
'zh-cn-tw',
|
212
|
-
'zh-hk'
|
213
|
-
]
|
214
|
-
|
215
5
|
##
|
216
6
|
#
|
217
|
-
#
|
218
|
-
#
|
7
|
+
# Get supported locales for specified engine.
|
8
|
+
# @param engine [String] Defaults to google. Returns Partner API supported locales for engine or not supported message.
|
219
9
|
|
220
10
|
def self.supported(engine = 'google')
|
221
|
-
|
222
|
-
|
11
|
+
AlPapi.http.get "/supported/#{engine}"
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
#
|
16
|
+
# Get further metadata on a specific locale for an engine.
|
17
|
+
# @param engine [String] Defaults to google.
|
18
|
+
# @param locale [String] Defaults to en-us.
|
19
|
+
|
20
|
+
def self.description(engine = 'google', locale = 'en-us')
|
21
|
+
AlPapi.http.get "/supported/#{engine}/#{locale.downcase}"
|
223
22
|
end
|
224
23
|
|
225
24
|
end
|
data/lib/al_papi/response.rb
CHANGED
@@ -4,6 +4,11 @@ module AlPapi
|
|
4
4
|
|
5
5
|
attr_reader :success, :body, :errors, :code, :path, :params, :over_limit, :suspeneded
|
6
6
|
|
7
|
+
##
|
8
|
+
# Initializing response object to be returned from API calls, used internally.
|
9
|
+
#
|
10
|
+
# @private
|
11
|
+
|
7
12
|
def initialize(http, _code, _path, _params) # @private
|
8
13
|
@success, @body, @errors = http.success, http.response, http.errors
|
9
14
|
@over_limit, @suspended = http.over_limit, http.suspended
|
@@ -13,25 +18,38 @@ module AlPapi
|
|
13
18
|
##
|
14
19
|
#
|
15
20
|
# Convenience method to determine if request was successfull or not
|
21
|
+
# @return [Boolean]
|
16
22
|
|
17
23
|
def success?
|
18
|
-
|
24
|
+
!!@success
|
19
25
|
end
|
20
26
|
|
21
27
|
##
|
22
28
|
#
|
23
29
|
# Convenience method to see if you have reached your hourly limit
|
30
|
+
# @return [Boolean]
|
24
31
|
|
25
32
|
def over_limit?
|
26
|
-
|
33
|
+
!!@over_limit
|
27
34
|
end
|
28
35
|
|
29
36
|
##
|
30
37
|
#
|
31
38
|
# Convenience method to see if your account is supended
|
39
|
+
# @return [Boolean]
|
32
40
|
|
33
41
|
def suspended?
|
34
|
-
|
42
|
+
!!@suspended
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
#
|
47
|
+
# Parses JSON body of request and returns a Hashie::Mash
|
48
|
+
# @return [Hashie::Mash]
|
49
|
+
|
50
|
+
def parsed_body
|
51
|
+
hash = JSON.parse(@body) rescue {}
|
52
|
+
Hashie::Mash.new hash
|
35
53
|
end
|
36
54
|
|
37
55
|
end
|
data/lib/al_papi/web_insight.rb
CHANGED
@@ -2,64 +2,45 @@ module AlPapi
|
|
2
2
|
|
3
3
|
class WebInsight
|
4
4
|
|
5
|
-
attr_reader :config
|
6
|
-
|
7
5
|
##
|
8
|
-
#
|
9
|
-
# [config] * Hash { auth_key: 'your_auth_token' }
|
10
|
-
# * OR AlPapi::Config
|
11
|
-
|
12
|
-
def initialize(config)
|
13
|
-
@config = config.is_a?(AlPapi::Config) ? config : Config.new(config)
|
14
|
-
@success, @errors = false, []
|
15
|
-
end
|
16
|
-
|
17
|
-
def http # @private
|
18
|
-
Http.new(@config)
|
19
|
-
end
|
20
|
-
|
21
|
-
##
|
22
|
-
# == Params
|
23
6
|
#
|
24
7
|
# URL for the page you want insight into and the callback url you have implemented to know
|
25
8
|
# when results are ready to get.
|
26
9
|
#
|
27
|
-
# [
|
28
|
-
#
|
29
|
-
# [
|
30
|
-
# Default is set on your account through the website.
|
31
|
-
# Set specific callbacks here for each request. Callback a url that
|
32
|
-
# is sent a POST when results are returned.
|
10
|
+
# @param url [String] *Required* - The web page you want to gain insight on.
|
11
|
+
# @param callback [String] *Required* - Default is the callback you have set for your account. Set specific callbacks per request by using this paramerter. A POST is sent to this callback URL when results are returned.
|
12
|
+
# @raise [] When required parameter is not found.
|
33
13
|
|
34
|
-
def post(params = {}
|
14
|
+
def self.post(params = {})
|
35
15
|
check_params Hashie::Mash.new(params), *%w[url callback]
|
36
|
-
http.post '/web/insight', params
|
16
|
+
AlPapi.http.post '/web/insight', params
|
37
17
|
end
|
38
18
|
|
39
19
|
##
|
40
|
-
# == Params
|
41
20
|
#
|
42
|
-
# Parameters should be the same url as what was posted to the Partner API and the
|
21
|
+
# Parameters should be the same url as what was posted to the Partner API and the
|
43
22
|
# date_created and time_created values passed back to you via the callback posted.
|
44
23
|
#
|
45
|
-
# [
|
46
|
-
#
|
47
|
-
# [
|
48
|
-
# The date_created that was returned in the callback.
|
49
|
-
# [time_created] <em>Required</em> -
|
50
|
-
# The time_created that was returned in the callback.
|
24
|
+
# @param url [String] *Required* - The URL originally posted to Partner API
|
25
|
+
# @param date_created [String] *Required* - The date_created that was returned in the callback.
|
26
|
+
# @param time_created [String] *Required* - The time_created that was returned in the callback.
|
51
27
|
|
52
|
-
def get(params = {})
|
28
|
+
def self.get(params = {})
|
53
29
|
check_params Hashie::Mash.new(params), *%w[date_created time_created]
|
54
|
-
http.get '/web/insight', params
|
30
|
+
AlPapi.http.get '/web/insight', params
|
55
31
|
end
|
56
32
|
|
57
|
-
|
33
|
+
##
|
34
|
+
#
|
35
|
+
# Check if required params exist
|
36
|
+
# @private
|
37
|
+
|
38
|
+
def self.check_params(params, *param)
|
58
39
|
param.each do |p|
|
59
40
|
raise "#{p} parameter is required." if params[p].nil? || params[p.to_s].empty?
|
60
41
|
end
|
61
42
|
end
|
62
43
|
|
63
44
|
end
|
64
|
-
|
45
|
+
|
65
46
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: al_papi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.6.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.6.7
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: hashie
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '2.0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rspec
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,60 @@ dependencies:
|
|
43
53
|
version: '2.0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: simplecov
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.7.1
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.7.1
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: vcr
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 2.2.5
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.2.5
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: webmock
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.8.11
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.8.11
|
47
110
|
description: Wraps AuthorityLabs Partner API calls in a gem.
|
48
111
|
email: ''
|
49
112
|
executables: []
|
@@ -51,15 +114,16 @@ extensions: []
|
|
51
114
|
extra_rdoc_files:
|
52
115
|
- README.md
|
53
116
|
files:
|
54
|
-
- lib/al_papi.rb
|
117
|
+
- lib/al_papi/account.rb
|
55
118
|
- lib/al_papi/config.rb
|
56
119
|
- lib/al_papi/engines.rb
|
57
120
|
- lib/al_papi/http.rb
|
121
|
+
- lib/al_papi/keyword.rb
|
58
122
|
- lib/al_papi/locales.rb
|
59
123
|
- lib/al_papi/request_error.rb
|
60
|
-
- lib/al_papi/request.rb
|
61
124
|
- lib/al_papi/response.rb
|
62
125
|
- lib/al_papi/web_insight.rb
|
126
|
+
- lib/al_papi.rb
|
63
127
|
- README.md
|
64
128
|
homepage: http://github.com/mtchavez/al_papi
|
65
129
|
licenses: []
|
@@ -82,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
146
|
version: '0'
|
83
147
|
requirements: []
|
84
148
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.8.
|
149
|
+
rubygems_version: 1.8.24
|
86
150
|
signing_key:
|
87
151
|
specification_version: 3
|
88
152
|
summary: AuthorityLabs Partner API Wrapper
|
data/lib/al_papi/request.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
module AlPapi
|
2
|
-
|
3
|
-
class Request
|
4
|
-
|
5
|
-
attr_reader :config
|
6
|
-
|
7
|
-
##
|
8
|
-
#
|
9
|
-
# [config] * Hash { auth_key: 'your_auth_token' }
|
10
|
-
# * OR AlPapi::Config
|
11
|
-
|
12
|
-
def initialize(config)
|
13
|
-
@config = config.is_a?(AlPapi::Config) ? config : Config.new(config)
|
14
|
-
@success, @errors = false, []
|
15
|
-
end
|
16
|
-
|
17
|
-
def http # @private
|
18
|
-
Http.new(@config)
|
19
|
-
end
|
20
|
-
|
21
|
-
##
|
22
|
-
# == Params
|
23
|
-
#
|
24
|
-
# [keyword] <b>Required</b> -
|
25
|
-
# Your keyword you want to get results for
|
26
|
-
# [engine] <em>Optional</em> -
|
27
|
-
# Defaults to google. Allowed engines are google, yahoo, bing.
|
28
|
-
# [locale] <em>Optional</em> -
|
29
|
-
# Defaults to en-us. See AlPapi::Locales for supported locales.
|
30
|
-
# [pages_from] <em>Optional</em> -
|
31
|
-
# Default is false. Google specific parameter to get results from
|
32
|
-
# the locale passed in when set to true.
|
33
|
-
# [callback] <em>Optional</em> -
|
34
|
-
# Default is set on your account through the website.
|
35
|
-
# Set specific callbacks here for each request. Callback a url that
|
36
|
-
# is sent a POST when results are returned.
|
37
|
-
|
38
|
-
def post(params = {}, priority = false)
|
39
|
-
path = priority ? '/keywords/priority' : '/keywords'
|
40
|
-
http.post path, params
|
41
|
-
end
|
42
|
-
|
43
|
-
##
|
44
|
-
# == Params
|
45
|
-
#
|
46
|
-
# See post for required params
|
47
|
-
|
48
|
-
def priority_post(params = {})
|
49
|
-
post params, true
|
50
|
-
end
|
51
|
-
|
52
|
-
##
|
53
|
-
# == Params
|
54
|
-
#
|
55
|
-
# Parameters should be the same as what was posted to the Partner API where applies.
|
56
|
-
#
|
57
|
-
# [keyword] <b>Required</b> -
|
58
|
-
# The keyword you are ready to get results for.
|
59
|
-
# [engine] <em>Optional</em> -
|
60
|
-
# Defaults to google. Allowed engines are google, yahoo, bing.
|
61
|
-
# [locale] <em>Optional</em> -
|
62
|
-
# Defaults to en-us. See AlPapi::Locales for supported locales.
|
63
|
-
# [rank_date] <em>Optional</em> -
|
64
|
-
# Default is set to today UTC time.
|
65
|
-
# Date should be in format of YYYY-MM-DD ie. 2011-12-28
|
66
|
-
# [data_format] <em>Optional</em> -
|
67
|
-
# Default is JSON. Options are HTML or JSON.
|
68
|
-
|
69
|
-
def get(params = {})
|
70
|
-
http.get '/keywords/get', params
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|