google_search_results 1.2.0 → 1.3.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.
- checksums.yaml +4 -4
- data/lib/baidu_search_results.rb +33 -0
- data/lib/bing_search_results.rb +32 -0
- data/lib/ebay_search_results.rb +35 -0
- data/lib/google_search_results.rb +12 -107
- data/lib/serp_api_client.rb +178 -0
- data/lib/yahoo_search_results.rb +35 -0
- data/lib/yandex_search_results.rb +35 -0
- metadata +45 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 37245404ba2b79b279c3719ed9b0142aa8914d80564cd6cfd70af9a2dcd4f56d
|
|
4
|
+
data.tar.gz: ae3bec079837ac373d4ffa4ff862b32212d914bde417184e5cb3627de38762ea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b4e94b1c4902bc506e03c0b1461564ace6052925cb286a7e135634f76fdc81e9ed62833a440d77d8a32e0699745314f4cd1e4e72e22f14499dffa4fbee9dc935
|
|
7
|
+
data.tar.gz: d3199c0440f4f68ae947617c867e5a68ec516b2d60870c763fef538762f93f88d695660f5dad98fe18100b096396941fd5d2e49e59d0c8bec709f22e2ab08078
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require_relative 'serp_api_client'
|
|
2
|
+
|
|
3
|
+
# Baidu Search Result for Ruby powered by SerpApi
|
|
4
|
+
#
|
|
5
|
+
# Search API Usage
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
8
|
+
# parameter = {
|
|
9
|
+
# q: "query",
|
|
10
|
+
# api_key: "Serp API Key"
|
|
11
|
+
# }
|
|
12
|
+
#
|
|
13
|
+
# client = BaiduSearchResults.new(parameter)
|
|
14
|
+
#
|
|
15
|
+
# html_results = client.get_html
|
|
16
|
+
# hash_results = client.get_hash
|
|
17
|
+
# json_results = client.get_json
|
|
18
|
+
#
|
|
19
|
+
# ```
|
|
20
|
+
# doc: https://serpapi.com/baidu-search-api
|
|
21
|
+
|
|
22
|
+
class BaiduSearchResults < SerpApiClient
|
|
23
|
+
|
|
24
|
+
def initialize(params = {})
|
|
25
|
+
super(params, BING_ENGINE)
|
|
26
|
+
check_params([:q, :engine])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def get_location
|
|
30
|
+
raise 'location is not supported by Baidu'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require_relative '../lib/bing_search_results'
|
|
2
|
+
|
|
3
|
+
# Bing Search Result for Ruby powered by SerpApi
|
|
4
|
+
#
|
|
5
|
+
# Search API Usage
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
8
|
+
# parameter = {
|
|
9
|
+
# q: "query",
|
|
10
|
+
# location: "city,state,country",
|
|
11
|
+
# api_key: "Your SERP API Key"
|
|
12
|
+
# }
|
|
13
|
+
#
|
|
14
|
+
# client = BingSearchResults.new(parameter)
|
|
15
|
+
# client.params[:location] = "Portland"
|
|
16
|
+
#
|
|
17
|
+
# html_results = client.get_html
|
|
18
|
+
# hash_results = client.get_hash
|
|
19
|
+
# json_results = client.get_json
|
|
20
|
+
#
|
|
21
|
+
# ```
|
|
22
|
+
#
|
|
23
|
+
# doc: https://serpapi.com/bing-search-api
|
|
24
|
+
|
|
25
|
+
class BingSearchResults < SerpApiClient
|
|
26
|
+
|
|
27
|
+
def initialize(params = {})
|
|
28
|
+
super(params, BING_ENGINE)
|
|
29
|
+
check_params([:q, :engine])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative 'serp_api_client'
|
|
2
|
+
|
|
3
|
+
# Ebay Search Result for Ruby powered by SerpApi
|
|
4
|
+
#
|
|
5
|
+
# Search API Usage
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
8
|
+
# parameter = {
|
|
9
|
+
# _nkw: "query",
|
|
10
|
+
# api_key: "Your SERP API Key"
|
|
11
|
+
# }
|
|
12
|
+
#
|
|
13
|
+
# client = EbaySearchResults.new(parameter)
|
|
14
|
+
# client.params[:ebay_domain] = "ebay.com"
|
|
15
|
+
#
|
|
16
|
+
# html_results = client.get_html
|
|
17
|
+
# hash_results = client.get_hash
|
|
18
|
+
# json_results = client.get_json
|
|
19
|
+
#
|
|
20
|
+
# ```
|
|
21
|
+
#
|
|
22
|
+
# doc: https://serpapi.com/ebay-search-api
|
|
23
|
+
|
|
24
|
+
class EbaySearchResults < SerpApiClient
|
|
25
|
+
|
|
26
|
+
def initialize(params = {})
|
|
27
|
+
super(params, EBAY_ENGINE)
|
|
28
|
+
check_params([:_nkw, :engine])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def get_location
|
|
32
|
+
raise 'location is not supported by ' + EBAY_ENGINE
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative 'serp_api_client'
|
|
2
|
+
|
|
3
|
+
# Google Search Result for Ruby powered by SerpApi
|
|
2
4
|
#
|
|
3
5
|
# Search API Usage
|
|
4
|
-
#
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
5
8
|
# parameter = {
|
|
6
9
|
# q: "query",
|
|
7
10
|
# google_domain: "Google Domain",
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
# start: "Pagination Offset",
|
|
15
18
|
# tbm: "to be matched field",
|
|
16
19
|
# tbs: "to be searched field",
|
|
17
|
-
#
|
|
20
|
+
# api_key: "Your SERP API Key"
|
|
18
21
|
# }
|
|
19
22
|
#
|
|
20
23
|
# client = GoogleSearchResults.new(parameter)
|
|
@@ -24,111 +27,13 @@
|
|
|
24
27
|
# hash_results = client.get_hash
|
|
25
28
|
# json_results = client.get_json
|
|
26
29
|
# ```
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
require 'json'
|
|
31
|
-
|
|
32
|
-
class GoogleSearchResults
|
|
33
|
-
|
|
34
|
-
VERSION = "1.2.0"
|
|
35
|
-
BACKEND = "serpapi.com"
|
|
36
|
-
|
|
37
|
-
@@serp_api_key = nil
|
|
38
|
-
|
|
39
|
-
class << self
|
|
40
|
-
attr_accessor :serp_api_key
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
attr_accessor :params
|
|
30
|
+
#
|
|
31
|
+
# doc: https://serpapi.com/search-api
|
|
32
|
+
class GoogleSearchResults < SerpApiClient
|
|
44
33
|
|
|
45
|
-
# constructor
|
|
46
|
-
#
|
|
47
|
-
# Usage
|
|
48
|
-
# ---
|
|
49
|
-
# ```require 'google_search_results'
|
|
50
|
-
# client = GoogleSearchResults.new({q: "coffee", serp_api_key: "Your SERP API Key")
|
|
51
|
-
# result = client.get_json```
|
|
52
|
-
#
|
|
53
34
|
def initialize(params = {})
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
# get_json
|
|
58
|
-
# @return [Hash] search result "json like"
|
|
59
|
-
# where keys are String
|
|
60
|
-
def get_json
|
|
61
|
-
@params[:output] = "json"
|
|
62
|
-
get_results('/search')
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# get_html
|
|
66
|
-
# @return [String] raw html
|
|
67
|
-
def get_html
|
|
68
|
-
@params[:output] = "html"
|
|
69
|
-
get_results('/search')
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# get_html
|
|
73
|
-
# @return [Hash] search result Ruby hash
|
|
74
|
-
# where keys are Symbol
|
|
75
|
-
def get_hash
|
|
76
|
-
JSON.parse(get_json, {symbolize_names: true})
|
|
35
|
+
super(params, GOOGLE_ENGINE)
|
|
36
|
+
check_params([:q, :engine])
|
|
77
37
|
end
|
|
78
38
|
|
|
79
|
-
|
|
80
|
-
# @deprecated
|
|
81
|
-
def get_hash_with_images
|
|
82
|
-
get_hash
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# alias for get_json
|
|
86
|
-
# @deprecated
|
|
87
|
-
def get_json_with_images
|
|
88
|
-
get_json
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Get location using Location API
|
|
92
|
-
def get_location
|
|
93
|
-
JSON.parse(get_results('/locations.json'), {symbolize_names: true})
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Retrieve search result from the Search Archive API
|
|
97
|
-
def get_search_archive(search_id, format = 'json')
|
|
98
|
-
raise 'format must be json or html' if format !~ /^(html|json)$/
|
|
99
|
-
JSON.parse(get_results("/searches/#{search_id}.#{format}"), {symbolize_names: true})
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Get account information using Account API
|
|
103
|
-
def get_account
|
|
104
|
-
JSON.parse(get_results('/account'), {symbolize_names: true})
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def construct_url(path)
|
|
108
|
-
@params[:source] = "ruby"
|
|
109
|
-
if GoogleSearchResults.serp_api_key
|
|
110
|
-
@params[:serp_api_key] ||= GoogleSearchResults.serp_api_key
|
|
111
|
-
end
|
|
112
|
-
if @params[:serp_api_key].nil?
|
|
113
|
-
@params.delete(:serp_api_key)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
URI::HTTPS.build(host: BACKEND, path: path, query: URI.encode_www_form(@params))
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
private
|
|
120
|
-
|
|
121
|
-
def get_results(path)
|
|
122
|
-
begin
|
|
123
|
-
open(construct_url(path), read_timeout: 600).read
|
|
124
|
-
rescue OpenURI::HTTPError => e
|
|
125
|
-
if error = JSON.load(e.io.read)["error"]
|
|
126
|
-
raise error
|
|
127
|
-
else
|
|
128
|
-
raise e
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
end
|
|
134
|
-
|
|
39
|
+
end
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
require 'open-uri'
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
GOOGLE_ENGINE = 'google'
|
|
5
|
+
BAIDU_ENGINE = 'baidu'
|
|
6
|
+
BING_ENGINE = 'bing'
|
|
7
|
+
YAHOO_ENGINE = 'yahoo'
|
|
8
|
+
YANDEX_ENGINE = 'yandex'
|
|
9
|
+
EBAY_ENGINE = 'ebay'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Generic serpapi.com client
|
|
13
|
+
# which allow to custom cutting edge search service
|
|
14
|
+
# by setting the engine paremeter.
|
|
15
|
+
class SerpApiClient
|
|
16
|
+
|
|
17
|
+
VERSION = "1.3.0"
|
|
18
|
+
BACKEND = "serpapi.com"
|
|
19
|
+
|
|
20
|
+
attr_accessor :params
|
|
21
|
+
|
|
22
|
+
# constructor
|
|
23
|
+
#
|
|
24
|
+
# Usage
|
|
25
|
+
# ---
|
|
26
|
+
#
|
|
27
|
+
# ```ruby
|
|
28
|
+
# require 'google_search_results'
|
|
29
|
+
# client = SerpApiClient.new({q: "coffee", api_key: "secure API key"}, "google")
|
|
30
|
+
# result = client.get_json
|
|
31
|
+
# ```
|
|
32
|
+
#
|
|
33
|
+
# @param [Hash] params contains requested parameter
|
|
34
|
+
# @param [String] engine google|baidu|google|bing|ebay|yandex
|
|
35
|
+
def initialize(params, engine)
|
|
36
|
+
@params = params
|
|
37
|
+
@params[:engine] ||= engine
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# get_json
|
|
41
|
+
# @return [Hash] search result "json like"
|
|
42
|
+
# where keys are String
|
|
43
|
+
def get_json
|
|
44
|
+
@params[:output] = "json"
|
|
45
|
+
get_results('/search')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# get_html
|
|
49
|
+
# @return [String] raw html
|
|
50
|
+
def get_html
|
|
51
|
+
@params[:output] = "html"
|
|
52
|
+
get_results('/search')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# get_html
|
|
56
|
+
# @return [Hash] search result Ruby hash
|
|
57
|
+
# where keys are Symbol
|
|
58
|
+
def get_hash
|
|
59
|
+
JSON.parse(get_json, {symbolize_names: true})
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# alias for get_hash
|
|
63
|
+
# @deprecated
|
|
64
|
+
def get_hash_with_images
|
|
65
|
+
get_hash
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# alias for get_json
|
|
69
|
+
# @deprecated
|
|
70
|
+
def get_json_with_images
|
|
71
|
+
get_json
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Get location using Location API
|
|
75
|
+
def get_location
|
|
76
|
+
as_json(get_results('/locations.json'))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Retrieve search result from the Search Archive API
|
|
80
|
+
def get_search_archive(search_id, format = 'json')
|
|
81
|
+
raise 'format must be json or html' if format !~ /^(html|json)$/
|
|
82
|
+
as_json(get_results("/searches/#{search_id}.#{format}"))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Get account information using Account API
|
|
86
|
+
def get_account
|
|
87
|
+
as_json(get_results('/account'))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# @return [String] current search engine
|
|
91
|
+
def engine
|
|
92
|
+
@params[:engine]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def construct_url(path)
|
|
96
|
+
@params[:source] = "ruby"
|
|
97
|
+
if !$serp_api_key.nil?
|
|
98
|
+
@params[:api_key] = $serp_api_key
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
@params.delete_if { |_, value| value.nil? }
|
|
102
|
+
|
|
103
|
+
URI::HTTPS.build(host: BACKEND, path: path, query: URI.encode_www_form(@params))
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# serp_api_key
|
|
107
|
+
# legacy implementation.
|
|
108
|
+
#
|
|
109
|
+
# @param [String] api_key set user secret API key (copy/paste from https://serpapi.com/dashboard)
|
|
110
|
+
def self.serp_api_key=(api_key)
|
|
111
|
+
self.api_key = api_key
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# api_key
|
|
115
|
+
# @param [String] api_key set user secret API key (copy/paste from https://serpapi.com/dashboard)
|
|
116
|
+
def self.api_key=(api_key)
|
|
117
|
+
$serp_api_key = api_key
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# @return [String] api_key for this client
|
|
121
|
+
def api_key
|
|
122
|
+
@params[:api_key] || @params[:serp_api_key] || $serp_api_key
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
private
|
|
126
|
+
|
|
127
|
+
def as_json(data)
|
|
128
|
+
JSON.parse(data, symbolize_names: true)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def get_results(path)
|
|
132
|
+
begin
|
|
133
|
+
url = construct_url(path)
|
|
134
|
+
URI::open(url, read_timeout: 600).read
|
|
135
|
+
rescue OpenURI::HTTPError => e
|
|
136
|
+
if error = JSON.load(e.io.read)["error"]
|
|
137
|
+
puts "server returns error for url: #{url}"
|
|
138
|
+
raise error
|
|
139
|
+
else
|
|
140
|
+
puts "fail: fetch url: #{url}"
|
|
141
|
+
raise e
|
|
142
|
+
end
|
|
143
|
+
rescue => e
|
|
144
|
+
puts "fail: fetch url: #{url}"
|
|
145
|
+
raise e
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def check_params(keys = [])
|
|
150
|
+
return if @params.keys == [:engine]
|
|
151
|
+
|
|
152
|
+
raise 'keys must be a list of String or Symbol' unless keys.class == Array
|
|
153
|
+
missing = []
|
|
154
|
+
keys.each do |key|
|
|
155
|
+
case key.class.to_s
|
|
156
|
+
when 'String'
|
|
157
|
+
if @params[key].nil?
|
|
158
|
+
if @params[key.to_sym].nil?
|
|
159
|
+
missing << key.to_s
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
when 'Symbol'
|
|
163
|
+
if @params[key].nil?
|
|
164
|
+
if @params[key.to_s].nil?
|
|
165
|
+
missing << key.to_s
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
else
|
|
169
|
+
raise 'keys must contains Symbol or String'
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
if !missing.empty?
|
|
173
|
+
raise "missing required keys in params.\n #{missing.join(',')}"
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative 'serp_api_client'
|
|
2
|
+
|
|
3
|
+
# Yahoo Search Result for Ruby powered by SerpApi
|
|
4
|
+
#
|
|
5
|
+
# Search API Usage
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
8
|
+
# parameter = {
|
|
9
|
+
# p: "query",
|
|
10
|
+
# api_key: "Your SERP API Key"
|
|
11
|
+
# }
|
|
12
|
+
#
|
|
13
|
+
# client = YahooSearchResults.new(parameter)
|
|
14
|
+
# client.params[:yahoo_domain] = "fr"
|
|
15
|
+
#
|
|
16
|
+
# html_results = client.get_html
|
|
17
|
+
# hash_results = client.get_hash
|
|
18
|
+
# json_results = client.get_json
|
|
19
|
+
#
|
|
20
|
+
# ```
|
|
21
|
+
#
|
|
22
|
+
# doc: https://serpapi.com/yahoo-search-api
|
|
23
|
+
|
|
24
|
+
class YahooSearchResults < SerpApiClient
|
|
25
|
+
|
|
26
|
+
def initialize(params = {})
|
|
27
|
+
super(params, YAHOO_ENGINE)
|
|
28
|
+
check_params([:p, :engine])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def get_location
|
|
32
|
+
raise 'location is not supported by ' + YAHOO_ENGINE
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative 'serp_api_client'
|
|
2
|
+
|
|
3
|
+
# Yandex Search Result for Ruby powered by SerpApi
|
|
4
|
+
#
|
|
5
|
+
# Search API Usage
|
|
6
|
+
#
|
|
7
|
+
# ```ruby
|
|
8
|
+
# parameter = {
|
|
9
|
+
# text: "query",
|
|
10
|
+
# api_key: "Your SERP API Key"
|
|
11
|
+
# }
|
|
12
|
+
#
|
|
13
|
+
# client = YandexSearchResults.new(parameter)
|
|
14
|
+
# client.params[:yandex_domain] = "yandex.com"
|
|
15
|
+
#
|
|
16
|
+
# html_results = client.get_html
|
|
17
|
+
# hash_results = client.get_hash
|
|
18
|
+
# json_results = client.get_json
|
|
19
|
+
#
|
|
20
|
+
# ```
|
|
21
|
+
#
|
|
22
|
+
# doc: https://serpapi.com/yandex-search-api
|
|
23
|
+
|
|
24
|
+
class YandexSearchResults < SerpApiClient
|
|
25
|
+
|
|
26
|
+
def initialize(params = {})
|
|
27
|
+
super(params, YANDEX_ENGINE)
|
|
28
|
+
check_params([:text, :engine])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def get_location
|
|
32
|
+
raise 'location is not supported by ' + YAHOO_ENGINE
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: google_search_results
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- hartator
|
|
8
|
+
- jvmvik
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 2020-03-31 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: rake
|
|
@@ -16,35 +17,70 @@ dependencies:
|
|
|
16
17
|
requirements:
|
|
17
18
|
- - "~>"
|
|
18
19
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
20
|
+
version: 13.0.1
|
|
20
21
|
type: :development
|
|
21
22
|
prerelease: false
|
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
24
|
requirements:
|
|
24
25
|
- - "~>"
|
|
25
26
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
27
|
+
version: 13.0.1
|
|
27
28
|
- !ruby/object:Gem::Dependency
|
|
28
29
|
name: rspec
|
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
|
30
31
|
requirements:
|
|
31
32
|
- - "~>"
|
|
32
33
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '3.
|
|
34
|
+
version: '3.9'
|
|
34
35
|
type: :development
|
|
35
36
|
prerelease: false
|
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
38
|
requirements:
|
|
38
39
|
- - "~>"
|
|
39
40
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '3.
|
|
41
|
-
|
|
41
|
+
version: '3.9'
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: yard
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - "~>"
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 0.9.24
|
|
49
|
+
type: :development
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - "~>"
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 0.9.24
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: rubocop
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - "~>"
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: 0.39.0
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - "~>"
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 0.39.0
|
|
70
|
+
description: Scape localized search results from search engine using SerpApi.com and
|
|
71
|
+
returns Hash, JSON, raw HTML
|
|
42
72
|
email: hartator@gmail.com
|
|
43
73
|
executables: []
|
|
44
74
|
extensions: []
|
|
45
75
|
extra_rdoc_files: []
|
|
46
76
|
files:
|
|
77
|
+
- lib/baidu_search_results.rb
|
|
78
|
+
- lib/bing_search_results.rb
|
|
79
|
+
- lib/ebay_search_results.rb
|
|
47
80
|
- lib/google_search_results.rb
|
|
81
|
+
- lib/serp_api_client.rb
|
|
82
|
+
- lib/yahoo_search_results.rb
|
|
83
|
+
- lib/yandex_search_results.rb
|
|
48
84
|
homepage: https://github.com/serpapi/google-search-results-ruby
|
|
49
85
|
licenses:
|
|
50
86
|
- MIT
|
|
@@ -65,8 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
65
101
|
- !ruby/object:Gem::Version
|
|
66
102
|
version: '0'
|
|
67
103
|
requirements: []
|
|
68
|
-
rubygems_version: 3.
|
|
104
|
+
rubygems_version: 3.1.2
|
|
69
105
|
signing_key:
|
|
70
106
|
specification_version: 4
|
|
71
|
-
summary: Google Search Results via
|
|
107
|
+
summary: Get Google, Bing, Baidu, Ebay, Yahoo, Yandex Search Results via SerpApi.com
|
|
72
108
|
test_files: []
|