Open g-aaroncruz opened 9 months ago
I have the same problem. Tried setting with the userAgent
parameter as per the "General Remarks" API but nothing worked. Would appreciate someone's help on this.
Update for anyone else with this issue:
The Problem
The problem is, in fact, due to incorrect setting of the HTTP User-Agent during the request. As per the general remarks we need to set the userAgent of the Nominatim
at instantiation. Doing so adds a prefix to the packages default, which is OSMPythonTools/X.Y.Z (https://github.com/mocnik-science/osm-python-tools)
. It turns out that the default string that the package provides is what causes the server to refuse the connection (i.e. it makes the server think that a bot is requesting information rather than a human with good intentions).
The Solution
I agree with the general remarks that a userAgent
is required. It should be something identifiable such as a name and email and should not include any weird package settings or urls. I suggest the contributors change the default string to not include these items. In the meantime, though, end-users can hack a solution together by overriding the method that causes the problem (namely, CacheObject._userAgent(self)). I have a minimal working example below:
from OSMPythonTools.internal.cacheObject import CacheObject
from OSMPythonTools.nominatim import Nominatim
'''
Define a function to override the current implementation
Inputs: self
Output: a valid string to be provided to OSM.
'''
def _myUserAgent(self):
return '[your name] [your email]'
if __name__ == '__main__':
CacheObject._userAgent = _myUserAgent # override the current implementation with my working function
nominatim = Nominatim()
areaId = nominatim.query('Vienna, Austria').areaId()
print(areaId)
Note If this does not work right away, delete your python cache directory and try running the script again. Hope this helps!
Why am I getting this error while following the README examples?
I was able to use the overpass module and the Api module but cannot use the Nominatim class. I'm not on any VPN or any funny proxy business.