python - Why are responses from nomatim different when accessing page with browser or with requests? -


i'm fetching json data url

http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1

this output when viewed on web browser

[{"display_name":"san francisco city , county, california, united states of america","class":"boundary","type":"administrative","importance":0.88836369596997,"icon":"http:\/\/nominatim.openstreetmap.org\/images\/mapicons\/poi_boundary_administrative.p.20.png","address":{"county":"san francisco city , county","state":"california","country":"united states of america","country_code":"us"}}] 

when fetch same url simple python program

import requests  r = requests.get('http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1') json_data = r.json()  print json_data 

this get,

[{u'display_name': u'sf, california, united states of america', u'importance': 0.68836369596997, u'place_id': u'127766562', u'lon': u'-122.4629897', u'lat': u'37.7647993', u'osm_type': u'relation', u'licence': u'data \xa9 openstreetmap contributors, odbl 1.0. http://www.openstreetmap.org/copyright', u'osm_id': u'396487', u'boundingbox': [u'37.63983', u'37.9298443', u'-123.1738249', u'-122.2817799'], u'type': u'administrative', u'class': u'boundary', u'address': {u'county': u'sf', u'country': u'united states of america', u'state': u'california', u'country_code': u'us'}, u'icon': u'http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png'}] 

notice display_name starts sf,california, unite.....

i've tried deleting history/cookies/cache , restarting computer

what going on?

the server looks accept-language header; don't send 1 , abbreviation, send 1 stating accept english , full name:

>>> import requests >>> url = 'http://nominatim.openstreetmap.org/' >>> params = {'q': 'san francisco', 'format': 'json', 'addressdetails': 1, 'limit': 1} >>> requests.get(url, params=params).json()[0]['display_name'] u'sf, california, united states of america' >>> requests.get(url, params=params, headers={'accept-language': 'en'}).json()[0]['display_name'] u'san francisco city , county, california, united states of america' 

the nomatim documentation mention header used, can overridden specifying accept-language parameter in query string:

>>> print requests.get(url, params=dict(params, **{'accept-language': 'pt'})).json()[0]['display_name'] sf, califórnia, estados unidos da américa 

Comments