Я отвечу на это как две части.
Часть 1: чтобы избежать вышеуказанной ошибки.
Конечно, вы можете использовать ключ API Google Places, но так как он предназначен для образовательных целей (Альтернатива есть в самом курсе, http://py4e-data.dr-chuck.net)
Вышеупомянутая ошибка возникает из-за неправильного ключа API. (Этот код отлично работает в моей системе.) Тем не менее, если вы столкнулись с той же проблемой, удалите следующий блок кода
api_key = False
if api_key is False:
api_key = 42
serviceurl = 'http://py4e-data.dr-chuck.net/json?'
else :
serviceurl = 'https://maps.googleapis.com/maps/api/geocode/json?'
и замените только следующими двумя строками
api_key = 42
serviceurl = 'http://py4e-data.dr-chuck.net/json?'
Таким образом, здесь будут использоваться только данные с этого веб-сайта (не из API Google Place).
Часть 2:
Для этого сначала проверьте, была ли это страна или нет. Затем выведите «краткое_имя» страны в «адрес_компонент». Найдите код ниже
import urllib.request, urllib.parse, urllib.error
import json
import ssl
api_key = False
if api_key is False:
api_key = 42
serviceurl = 'http://py4e-data.dr-chuck.net/json?'
else :
serviceurl = 'https://maps.googleapis.com/maps/api/geocode/json?'
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
while True:
address = input('Enter location: ')
if len(address) < 1: break
parms = dict()
parms['address'] = address
if api_key is not False: parms['key'] = api_key
url = serviceurl + urllib.parse.urlencode(parms)
print('Retrieving', url)
uh = urllib.request.urlopen(url, context=ctx)
data = uh.read().decode()
print('Retrieved', len(data), 'characters')
try:
js = json.loads(data)
except:
js = None
if not js or 'status' not in js or js['status'] != 'OK':
print('==== Failure To Retrieve ====')
print(data)
continue
lat = js['results'][0]['geometry']['location']['lat']
lng = js['results'][0]['geometry']['location']['lng']
# print('lat', lat, 'lng', lng)
location = js['results'][0]['formatted_address']
# print(location)
results = js['results'][0]
address_components = results["address_components"]
is_a_country = False
try:
for elem in address_components:
types = elem["types"]
if types == ["country", "political"]:
is_a_country = True
print("The two-character country code from the retrieved data is:", elem["short_name"])
if not is_a_country:
raise Exception
except:
print("There is no country code for that location.")
Для более наглядного понимания go по адресу, напечатанному этим кодом. Вы можете увидеть объект json текущего запроса. Ниже приведен образец Объект JSON места УРУВАХАЛ, ИНДИЯ
Просто выведите значение short_name для этого конкретного типа для вашего ответа.