whoisxmlapi 0.0.21 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ac00a12274c2c4684377a10db0f3a87bbcbc2ed0
4
- data.tar.gz: f421c29dc23151e97f24fa2658a50f573db263c2
2
+ SHA256:
3
+ metadata.gz: 19ef89481b853c23afd17b496d79abf4075a6ff4757ceafb33b67ee902b1ea6a
4
+ data.tar.gz: 35c3eeb9ac3ae90c776135f863a96812b2ec8ff65a0bff66b331a1bb1c5bf324
5
5
  SHA512:
6
- metadata.gz: f3a5f9cd436a2063035e9af20b59dc16c7fb2e470a9fb1f60a8228314935ea3bda8130a6ea434d6e1b3375cf75c09c223ccf2e1474d21649f37191866857ec93
7
- data.tar.gz: 5089ef2e920206344d69e0596297d5cc76812b5337a7315f360486793897e181e32c51529cab2e77d8c0b69bfd62a8ba565d971025cfdfbd266ebb02a670454d
6
+ metadata.gz: a6be70457f7c5291f1b23cbaf2210fd559df5bbdf7a1616ed9e92655859d11fb1ad20e2914c9efdd5c908769a9175fcb71244e4357ac772b543d3ec6a491bb0b
7
+ data.tar.gz: 79c9a1d03097cd8cb69ecf29714e189053a36420ae2177f3578d057eaab8407b4dddb20d23a3c2994b55c1d75537e4fd6c96ec088a4a5087c7079a0d121754b7
data/lib/whoisxmlapi.rb CHANGED
@@ -9,38 +9,43 @@ require_relative "./whoisxmlapi/client"
9
9
  require_relative "./whoisxmlapi/rwhois_result"
10
10
 
11
11
  module WhoisXMLAPI
12
- def self.domain
13
- @domain
12
+
13
+ def self.whois_path=(path)
14
+ @whois_path = path
14
15
  end
15
16
 
16
- def self.domain=(dom)
17
- @domain = dom
17
+ def self.whois_path
18
+ @whois_path ? @whois_path : "https://www.whoisxmlapi.com/whoisserver/WhoisService"
18
19
  end
19
20
 
20
- def self.username
21
- @username
21
+
22
+ def self.rwhois_path=(path)
23
+ @rwhois_path = path
22
24
  end
23
25
 
24
- def self.username=(uname)
25
- @username = uname
26
+ def self.rwhois_path
27
+ @rwhois_path ? @rwhois_path : "https://reverse-whois-api.whoisxmlapi.com/api/v2"
26
28
  end
27
29
 
28
- def self.password
29
- @password
30
+
31
+ def self.account_path=(path)
32
+ @account_path = path
30
33
  end
31
34
 
32
- def self.password=(pass)
33
- @password = pass
35
+ def self.account_path
36
+ @account_path ? @account_path : "https://user.whoisxmlapi.com/service/account-balance"
34
37
  end
35
-
38
+
39
+
36
40
  def self.api_key
37
41
  @api_key
38
42
  end
39
-
43
+
40
44
  def self.api_key=(key)
41
45
  @api_key = key
42
46
  end
43
47
 
48
+
44
49
  def self.cache_length=(leng)
45
50
  @cache_length = leng
46
51
  end
@@ -49,6 +54,7 @@ module WhoisXMLAPI
49
54
  @cache_length
50
55
  end
51
56
 
57
+
52
58
  def self.cache=(bool)
53
59
  @cache = bool
54
60
  end
@@ -57,6 +63,7 @@ module WhoisXMLAPI
57
63
  @cache.nil? or @cache.blank? ? true : @cache
58
64
  end
59
65
 
66
+
60
67
  def self.rwhois_mode=(mode)
61
68
  @rwhois_mode = mode
62
69
  end
@@ -65,6 +72,7 @@ module WhoisXMLAPI
65
72
  @rwhois_mode ? @rwhois_mode : 'sample_purchase'
66
73
  end
67
74
 
75
+
68
76
  def self.callbacks
69
77
  @callbacks ||= {}
70
78
  @callbacks[:whois] ||= []
@@ -72,6 +80,7 @@ module WhoisXMLAPI
72
80
  @callbacks
73
81
  end
74
82
 
83
+
75
84
  def self.logger
76
85
  @logger ||= Logger.new(STDOUT)
77
86
  @logger
@@ -81,7 +90,9 @@ module WhoisXMLAPI
81
90
  @logger = log
82
91
  end
83
92
 
93
+
84
94
  def self.configure
85
- yield self
95
+ yield self
86
96
  end
97
+
87
98
  end
@@ -7,6 +7,8 @@ module WhoisXMLAPI
7
7
 
8
8
  class Client
9
9
 
10
+ # https://whoisapi.whoisxmlapi.com/docs
11
+ # GET https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey=YOUR_API_KEY&domainName=google.com
10
12
  def whois(domain)
11
13
  unless PublicSuffix.valid?(domain)
12
14
  res = WhoisXMLAPI::BadDomain.new
@@ -15,33 +17,25 @@ module WhoisXMLAPI
15
17
  end
16
18
 
17
19
  query = WhoisXMLAPI::Result.where(:domain => domain)
18
-
19
- if WhoisXMLAPI.cache
20
- query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length))
21
- end
22
-
20
+ query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length)) if WhoisXMLAPI.cache
23
21
  res = query.first
24
22
 
25
- if res && res._type != "WhoisXMLAPI::Unavailable"
26
- return res
27
- else
28
- xquery = {
29
- :apiKey => WhoisXMLAPI.api_key,
30
- :domainName => domain,
31
- :outputFormat => 'JSON'
23
+ if res.nil? || res._type == "WhoisXMLAPI::Unavailable"
24
+ params = {
25
+ :apiKey => WhoisXMLAPI.api_key,
26
+ :domainName => domain,
27
+ :outputFormat => 'JSON'
32
28
  }
33
29
 
34
30
  begin
35
- r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery, :timeout => 120)
36
- rescue Exception => e
37
- WhoisXMLAPI.logger.info("Error getting Whois info for #{domain}: #{e}")
31
+ r = HTTParty.get(WhoisXMLAPI.whois_path, :query => params, :timeout => 120)
32
+ rescue StandardError => e
33
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#whois - Error getting Whois info for #{domain}: #{e}"
38
34
  res = WhoisXMLAPI::Unavailable.new
39
35
  res.parse(domain)
40
36
  return res
41
37
  end
42
38
 
43
- res = WhoisXMLAPI::Good.new
44
-
45
39
  if WhoisXMLAPI.callbacks[:whois]
46
40
  WhoisXMLAPI.callbacks[:whois].each do |cb|
47
41
  cb.call
@@ -51,94 +45,99 @@ module WhoisXMLAPI
51
45
  # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
52
46
  # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
53
47
  # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
54
- if r.parsed_response.is_a?(String)
55
- WhoisXMLAPI.logger.debug "WhoisXML Whois method passed back parsed_response as a String instead of a Hash for #{domain}."
56
- presponse = JSON.parse(r.parsed_response)
57
- else
58
- presponse = r.parsed_response
48
+ if r
49
+ if r.parsed_response.is_a?(String)
50
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#whois - WARNING: passed back parsed_response as a String instead of a Hash for #{domain}."
51
+ presponse = JSON.parse(r.parsed_response)
52
+ else
53
+ presponse = r.parsed_response
54
+ end
55
+ if presponse.key? 'ErrorMessage'
56
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#whois - Error getting Whois info: #{presponse['ErrorMessage']['msg']}"
57
+ res = WhoisXMLAPI::Unavailable.new
58
+ res.parse(domain)
59
+ elsif (200..299).include? r.code.to_i
60
+ res = WhoisXMLAPI::Good.new
61
+ res.parse(presponse['WhoisRecord'])
62
+ res.save
63
+ end
59
64
  end
60
65
 
61
- if (200..299).include? r.code.to_i and not presponse.key? 'ErrorMessage'
62
- res.parse(presponse['WhoisRecord'])
63
- res.save
64
- return res
65
- else
66
- WhoisXMLAPI.logger.info("Error getting Whois info: #{e}")
66
+ unless res
67
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#whois - Unable to get Whois info for : #{domain}"
67
68
  res = WhoisXMLAPI::Unavailable.new
68
69
  res.parse(domain)
69
- return res
70
70
  end
71
+
71
72
  end
73
+ return res
72
74
  end
73
75
 
74
76
 
77
+ def self.send_rwhois_request(entity_name)
78
+ params = {
79
+ :apiKey => WhoisXMLAPI.api_key,
80
+ :searchType => "current",
81
+ :mode => WhoisXMLAPI.rwhois_mode,
82
+ :responseFormat => 'json',
83
+ :basicSearchTerms => {
84
+ :include => [entity_name] # must be an array of strings!
85
+ },
86
+ }
87
+ begin
88
+ # To DEBUG add ":debug_output => $stdout"
89
+ r = HTTParty.post(WhoisXMLAPI.rwhois_path, :body => params.to_json, :timeout => 120, :headers => {'Content-Type' => 'application/json'})
90
+ rescue StandardError => e
91
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#rwhois - Error getting RWhois info for #{entity_name}: #{e}"
92
+ r = nil
93
+ end
94
+
95
+ if WhoisXMLAPI.callbacks[:rwhois]
96
+ WhoisXMLAPI.callbacks[:rwhois].each do |cb|
97
+ cb.call
98
+ end
99
+ end
100
+
101
+ return r
102
+ end
103
+
104
+
105
+ # https://reverse-whois-api.whoisxmlapi.com/docs
106
+ # POST https://reverse-whois-api.whoisxmlapi.com/api/v2
75
107
  def rwhois(entity_name)
76
108
  # entity_name is really the domain being passed in for Rwhois not the actual entity name
77
109
  return nil if entity_name.nil?
78
110
  query = WhoisXMLAPI::RWhoisResult.where(:entity_name => entity_name)
79
- if WhoisXMLAPI.cache
80
- query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length))
81
- end
111
+ query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length)) if WhoisXMLAPI.cache
82
112
  res = query.first
83
113
 
84
114
  if res
85
- WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - using cached rwhois data for #{entity_name}"
115
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#rwhois - using cached rwhois data for #{entity_name}"
86
116
  else
87
- WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - no cached rwhois data for #{entity_name}"
117
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#rwhois - no cached rwhois data for #{entity_name}"
88
118
  res = WhoisXMLAPI::RWhoisResult.create(:entity_name => entity_name)
89
119
 
90
- params_basic = {
91
- basicSearchTerms: {
92
- :include => [entity_name], # must be an array of strings!
93
- :search_type => "current"
94
- },
95
- :mode => WhoisXMLAPI.rwhois_mode,
96
- :apiKey => WhoisXMLAPI.api_key,
97
- }
98
-
99
- r = WhoisXMLAPI::Client.create_and_send_rwhois_request(params_basic)
100
-
101
- if WhoisXMLAPI.callbacks[:rwhois]
102
- WhoisXMLAPI.callbacks[:rwhois].each do |cb|
103
- cb.call
104
- end
105
- end
106
-
107
- if r && r.parsed_response && r.parsed_response['domains']
108
- res.domains = r.parsed_response['domains']
120
+ r = WhoisXMLAPI::Client.send_rwhois_request(entity_name)
121
+ if r && r.parsed_response && r.parsed_response['domainsList']
122
+ res.domains = r.parsed_response['domainsList']
109
123
  res.save
110
124
  elsif PublicSuffix.valid?(entity_name)
125
+ # if no luck with what was passed in and we have a valid domain with TLD, try just the second-level domain.
111
126
  domain = PublicSuffix.parse(entity_name)
112
127
  domain_sld = domain.sld
113
- Rails.logger.debug "WhoisXMLAPI rwhois - no domains found for domain #{entity_name}, trying #{domain_sld}"
128
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#rwhois - no domains found for domain #{entity_name}, trying #{domain_sld}"
114
129
  res = WhoisXMLAPI::RWhoisResult.create(:entity_name => domain_sld)
115
130
 
116
- params_basic = {
117
- basicSearchTerms: {
118
- :include => [domain_sld], #must be an array of strings!
119
- :search_type => "current"
120
- },
121
- :mode => WhoisXMLAPI.rwhois_mode,
122
- :apiKey => WhoisXMLAPI.api_key,
123
- }
124
-
125
- r = WhoisXMLAPI::Client.create_and_send_rwhois_request(params_basic)
126
-
127
- if WhoisXMLAPI.callbacks[:rwhois]
128
- WhoisXMLAPI.callbacks[:rwhois].each do |cb|
129
- cb.call
130
- end
131
- end
132
-
133
- if r && r.parsed_response && r.parsed_response['domains']
134
- res.domains = r.parsed_response['domains']
131
+ r = WhoisXMLAPI::Client.send_rwhois_request(domain_sld)
132
+ if r && r.parsed_response && r.parsed_response['domainsList']
133
+ res.domains = r.parsed_response['domainsList']
135
134
  res.save
136
135
  else
137
136
  res.domains = []
138
137
  res.save
139
138
  end
140
139
  else
141
- WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - no domains found for #{entity_name}!"
140
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#rwhois - no domains found for #{entity_name}!"
142
141
  res.domains = []
143
142
  res.save
144
143
  end
@@ -148,19 +147,26 @@ module WhoisXMLAPI
148
147
 
149
148
 
150
149
  def exists?(domain)
151
- xquery = {
152
- :cmd => 'GET_DN_AVAILABILITY',
153
- :domainName => domain,
154
- :outputFormat => 'JSON',
155
- :apiKey => WhoisXMLAPI.api_key
150
+ params = {
151
+ :cmd => 'GET_DN_AVAILABILITY',
152
+ :domainName => domain,
153
+ :outputFormat => 'JSON',
154
+ :apiKey => WhoisXMLAPI.api_key
156
155
  }
157
- r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery, :timeout => 120)
156
+ begin
157
+ r = HTTParty.get(WhoisXMLAPI.whois_path, :query => params, :timeout => 120)
158
+ rescue StandardError => e
159
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#whois - Error getting Whois info for #{domain}: #{e}"
160
+ res = WhoisXMLAPI::Unavailable.new
161
+ res.parse(domain)
162
+ return res
163
+ end
158
164
 
159
165
  # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
160
166
  # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
161
167
  # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
162
168
  if r.parsed_response.is_a?(String)
163
- Rails.logger.debug "WhoisXML passed back parsed_response as a String instead of a Hash for #{domain}. Exists? method"
169
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#exists? - passed back parsed_response as a String instead of a Hash for #{domain}."
164
170
  resp = JSON.parse(r.parsed_response)
165
171
  else
166
172
  resp = r.parsed_response
@@ -170,39 +176,29 @@ module WhoisXMLAPI
170
176
  end
171
177
 
172
178
 
179
+ #
180
+ # GET https://user.whoisxmlapi.com/service/account-balance?apiKey=YOUR_API_KEY
173
181
  def account_balance
174
- aquery = {
175
- :servicetype => 'accountbalance',
176
- :output_format => 'JSON',
177
- :apiKey => WhoisXMLAPI.api_key
182
+ params = {
183
+ :apiKey => WhoisXMLAPI.api_key
178
184
  }
179
- r = HTTParty.get("#{WhoisXMLAPI.domain}/accountServices.php", :query => aquery, :timeout => 120)
185
+
186
+ begin
187
+ r = HTTParty.get(WhoisXMLAPI.account_path, :query => params, :timeout => 120)
188
+ rescue StandardError => e
189
+ WhoisXMLAPI.logger.info "WhoisXMLAPI#account_balance - Error getting account_balance: #{e}"
190
+ r = nil
191
+ end
180
192
 
181
193
  # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
182
194
  # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
183
195
  # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
184
196
  if r.parsed_response.is_a?(String)
185
- Rails.logger.debug "WhoisXML passed back parsed_response as a String instead of a Hash. Account_balance method"
197
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI#account_balance - passed back parsed_response as a String instead of a Hash."
186
198
  JSON.parse(r.parsed_response)
187
- else
188
- r.parsed_response
189
199
  end
190
200
 
191
- end
192
-
193
- def self.create_and_send_rwhois_request(params_basic)
194
- uri = URI.parse('https://reverse-whois-api.whoisxmlapi.com/api/v2')
195
- http = Net::HTTP.new(uri.host, uri.port)
196
- http.use_ssl = true
197
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
198
- request = Net::HTTP::Post.new(uri.request_uri)
199
- request.add_field('Content-Type', 'application/json')
200
- request.add_field('Accept', 'application/json')
201
- request.body = params_basic.to_json
202
- r = http.request(request)
203
- # used for debugging
204
- # puts JSON.parse(r.body).to_yaml
205
- return r
201
+ r ? r.parsed_response : nil
206
202
  end
207
203
 
208
204
 
@@ -212,5 +208,5 @@ module WhoisXMLAPI
212
208
 
213
209
 
214
210
  end # of class Client
215
-
211
+
216
212
  end # of module WhoisXMLAPI
@@ -1,3 +1,3 @@
1
1
  module WhoisXMLAPI
2
- VERSION = "0.0.21"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoisxmlapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Maujean
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-03-15 00:00:00.000000000 Z
14
+ date: 2019-03-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  version: '0'
145
145
  requirements: []
146
146
  rubyforge_project:
147
- rubygems_version: 2.4.5.1
147
+ rubygems_version: 2.7.7
148
148
  signing_key:
149
149
  specification_version: 4
150
150
  summary: whoisxmlapi.com access