我正在运行以下内容:
import geopy
geolocator = geopy.geocoders.OpenMapQuest(api_key='my_key_here')
location1 = geolocator.geocode('Madrid')
其中 my_key_here 是我的 mapquest 消费者密钥,我收到以下错误:
GeocoderInsufficientPrivileges:HTTP 错误 403:禁止
不知道我做错了什么。
谢谢!
我也尝试过相同的结果。在检查了库之后,我发现错误是指构建请求的行,并且似乎没有传输 API 密钥。如果在 init 语句中不添加任何键,则 api_key='' 所以我尝试在我自己的文件库中更改第 66 行:https ://github.com/geopy/geopy/blob/master/geopy/geocoders /openmapquest.py到我的钥匙。
还是没有成功!密钥本身有效,我通过调用库中也调用的 URL 对其进行了测试:http: //open.mapquestapi.com/nominatim/v1/search.php ?key= "MY_KEY"&format=json&json_callback=renderBasicSearchNarrative&q =威斯敏斯特+修道院
不知道为什么这不起作用……</p>
干杯.kg
我在修复这个问题上取得了一些进展。我能够正确编写查询,但它的 json 解析让我很难过。也许有人知道。我知道 url 发送正确(我在浏览器中检查它并返回一个 json 对象)。也许有人知道如何解析返回的 json 对象以使其最终工作。
无论如何,我不得不进入openmapquest.py
源代码,从第 66 行开始,我做了以下修改:
self.api_key = api_key
self.api = "http://www.mapquestapi.com/geocoding/v1/address?"
def geocode(self, query, exactly_one=True, timeout=None): # pylint: disable=W0221
"""
Geocode a location query.
:param string query: The address or query you wish to geocode.
:param bool exactly_one: Return one result or a list of results, if
available.
:param int timeout: Time, in seconds, to wait for the geocoding service
to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
exception. Set this only if you wish to override, on this call
only, the value set during the geocoder's initialization.
.. versionadded:: 0.97
"""
params = {
'key': self.api_key,
'location': self.format_string % query
}
if exactly_one:
params['maxResults'] = 1
url = "&".join((self.api, urlencode(params)))
print url # Print the URL just to make sure it's produced correctly
现在的任务仍然是让_parse_json
功能正常工作。