Python: делаем запросы в Google Geocoding API
В этом коротком руководстве мы покажем вам, как выполнять вызовы API для API геолокации Google. Цель состоит в том, чтобы иметь возможность быстро и легко получать данные адреса, почтового индекса или просто города с помощью API, который является важной частью Google Maps.
Чем больше мы используем сторонних API, тем лучше могут быть наши сервисы. API геолокации может очистить наши адресные данные без особых усилий.
Установка
Мы собираемся использовать Python requests, чтобы сделать наши вызовы API намного проще.
pip install requests
Google Geocoding API
Помните, что у API Google есть несколько бесплатных запросов, но после определенного момента они начинают взимать с вас плату.
- Зарегистрируйтесь в Google Cloud Compute (GCP)
- Войдите в консоль .
- Зайдите в API Geocoding, нажмите здесь «Включить». Если эта ссылка не работает, выполните поиск API Geocoding , откройте его и нажмите «Включить»
Возможно, вам придется создать проект и выполнить несколько других настроек, чтобы добраться до точки, где вы можете активировать API Geocoding
Получите свои учетные данные Google Cloud API:
- Выполните поиск «Credentials» в GCP
- Нажмите «Create Credentials» > «API Key»
- Скопируйте значение ключа, мое было
AIzaSyBSXMpu6lqd8kViIpy1GNWQ1symTXdMRzw
это ваш ключ API Google Cloud.
Ключи API Google Cloud Compute имеют неограниченные привилегии, поэтому настоятельно рекомендуется ограничить ключ API как API Geocoding, так и локальным IP-адресом.
Код
Ниже мы собираемся извлечь широту и долготу из любого заданного адреса, почтового индекса или города. Это действительно просто и легко.
GOOGLE_API_KEY = 'your_api_key_from_above' def extract_lat_long_via_address(address_or_zipcode): lat, lng = None, None api_key = GOOGLE_API_KEY base_url = "https://maps.googleapis.com/maps/api/geocode/json" endpoint = f"{base_url}?address={address_or_zipcode}&key={api_key}" # Посмотрите, как наша конечная точка включает наш ключ API? Да, это еще одна причина, чтобы ограничить ключ r = requests.get(endpoint) if r.status_code not in range(200, 299): return None, None try: ''' Этот блок try в случае, если любой из наших входов недействителен. Это делается вместо того, чтобы на самом деле писать обработчики для всех видов ответов. ''' results = r.json()['results'][0] lat = results['geometry']['location']['lat'] lng = results['geometry']['location']['lng'] except: pass return lat, lng