-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathgeocoder_reverse_api.py
77 lines (67 loc) · 2.48 KB
/
geocoder_reverse_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env python
import json
import sys
from typing import List, Optional
import requests
from herepy.error import HEREError, UnauthorizedError
from herepy.here_api import HEREApi
from herepy.models import GeocoderReverseResponse
from herepy.utils import Utils
class GeocoderReverseApi(HEREApi):
"""A python interface into the HERE Geocoder Reverse API"""
def __init__(self, api_key: str = None, timeout: int = None):
"""Returns a GeocoderApi instance.
Args:
api_key (str):
API key taken from HERE Developer Portal.
timeout (int):
Timeout limit for requests.
"""
super(GeocoderReverseApi, self).__init__(api_key, timeout)
self._base_url = "https://revgeocode.search.hereapi.com/v1/revgeocode"
def __get(self, data):
url = Utils.build_url(self._base_url, extra_params=data)
response = requests.get(url, timeout=self._timeout)
try:
json_data = json.loads(response.content.decode("utf8"))
if json_data.get("items") != None:
return GeocoderReverseResponse.new_from_jsondict(json_data)
elif "error" in json_data:
if json_data["error"] == "Unauthorized":
raise UnauthorizedError(json_data["error_description"])
else:
raise HEREError(
json_data.get(
"Details",
"Error occurred on function " + sys._getframe(1).f_code.co_name,
)
)
except ValueError as err:
raise HEREError(
"Error occurred on function "
+ sys._getframe(1).f_code.co_name
+ " "
+ str(err)
)
def retrieve_addresses(
self, prox: List[float], limit: int = 1, lang: str = "en-US"
) -> Optional[GeocoderReverseResponse]:
"""Gets the address information of a point.
Args:
prox (lat/lon):
latitude longitude of the point
limit (int):
Limits items to return, with default value 1. Max value 100.
lang (str):
BCP47 compliant Language Code.
Returns:
GeocoderReverseResponse
Raises:
HEREError"""
data = {
"at": str.format("{0},{1}", prox[0], prox[1]),
"limit": limit,
"lang": lang,
"apiKey": self._api_key,
}
return self.__get(data)