Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add NetToolKit Support #1596

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions .idea/geocoder.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions README_API_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,27 @@ The [Google Places Search API](https://developers.google.com/maps/documentation/
* **Terms of Service**: https://www.melissa.com/terms
* **Limitations**: ?

### NetToolKit (`:net_tool_kit`)

* **API key**: required, but added to HTTP Headers (See below)
* **Key signup**: https://www.nettoolkit.com/pricing
* **Quota**: ?
* **HTTP Headers**: you can specify the API key and a referer like so:
```
Geocoder.configure(
http_headers: {
"X-NTK-KEY" => ENV["NET_TOOL_KIT_API_KEY"],
"Referer" => "http://foo.com"
}
)
```
* **Region**: world
* **SSL support**: yes
* **Languages**: English
* **Documentation**: https://www.nettoolkit.com/docs/overview
* **Terms of Service**: https://www.nettoolkit.com/terms
* **Limitations**: ?

### Nominatim (`:nominatim`)

* **API key**: none
Expand Down
1 change: 1 addition & 0 deletions lib/geocoder/lookup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def street_services
:geocoder_ca,
:yandex,
:nationaal_georegister_nl,
:net_tool_kit,
:nominatim,
:mapbox,
:mapquest,
Expand Down
65 changes: 65 additions & 0 deletions lib/geocoder/lookups/net_tool_kit.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
require 'geocoder/lookups/base'
require 'geocoder/results/net_tool_kit'

module Geocoder::Lookup
class NetToolKit < Base

def name
'NetToolKit'
end

def supported_protocols
[:https]
end

private # ---------------------------------------------------------------

def base_query_url(query)
"#{protocol}://api.nettoolkit.com/v1/geo/#{search_type(query)}?version=2&"
end

def search_type(query)
query.reverse_geocode? ? 'reverse-geocodes' : 'geocodes'
end

def query_url_params(query)
params = { address: query.sanitized_text }

[:provider].each do |option|
unless (option_value = query.options[option]).nil?
params[option] = option_value
end
end

params.merge(super)
end

def results(query)
return [] unless doc = fetch_data(query)
return doc['results'] if doc['code'] == 1000 || doc['code'] == 1001

messages = doc['message']
case doc['code']
when 2002, 2003, 2004, 2005
raise_error(Geocoder::ServiceUnavailable, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
when 3000
raise_error(Geocoder::RequestDenied, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
when 3001, 3003
raise_error(Geocoder::OverQueryLimitError, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
when 3002
raise_error(Geocoder::InvalidApiKey, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
when 4000, 4001, 4002
raise_error(Geocoder::InvalidRequest, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
else
raise_error(Geocoder::Error, messages) ||
Geocoder.log(:warn, "NetToolKit Geocoding API error: #{messages}")
end
end

end
end
62 changes: 62 additions & 0 deletions lib/geocoder/results/net_tool_kit.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
require 'geocoder/results/base'

module Geocoder::Result
class NetToolKit < Base

def address
@data['address']
end

def coordinates
%w[latitude longitude].map{ |l| @data[l] }
end

def house_number
@data['house_number']
end

def street
@data['street']
end

def street_name
@data['street_name']
end

def street_type
@data['street_type']
end

def city
@data['city']
end

def county
@data['county']
end

def state
@data['state']
end

def state_code
@data['state_code']
end

def postal_code
@data['postcode']
end

def precision
@data['precision']
end

def provider
@data['provider']
end

def ntk_geocode_time
@data['ntk_geocode_time']
end
end
end