Как делать запросы к Google API с помощью Python

{title}

Сегодня я научу, как отправлять запросы в API Google для получения информации с определенного адреса. Самая интересная часть учебника - научиться делать запросы к API, с Python это довольно просто и интуитивно понятно. Сначала мы увидим полный код, а затем объясним его части:

 #! / usr / bin / env python3 импортировать сокет из urllib.parse import quote_plus header = "" "\ GET / maps / api / geocode / json? address = {} & sensor = false HTTP / 1.1 \ r \ n \ Host: maps.google.com: 80 \ r \ n \ User-Agent: \ r \ n \ Соединение: закрыть \ r \ n \ \ r \ n \ "" "def locate (адрес): соединение = socket.socket () connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (address)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = соединение .recv (1024), в то время как d: data + = dd = connection.recv (1024) print (data.decode ('utf-8')) if __name__ == '__main__': locate ('Улица развития, Мостолес') 
Нам нужно импортировать библиотеку сокетов, чтобы установить соединение, и функцию quote_plus, которая принадлежит urllib.parse, ее использование будет показано позже.
 импортировать сокет из urllib.parse импортировать quote_plus 
В начале мы создадим переменную, в которой мы создадим заголовок запроса API:
 header = "" "\ GET / maps / api / geocode / json? address = {} & sensor = false HTTP / 1.1 \ r \ n \ Хост: maps.google.com: 80 \ r \ n \ Агент пользователя: \ r \ n \ Соединение: закрыть \ r \ n \ \ r \ n \ "" " 
В первой строке вы увидите {} после адреса =, это так, чтобы можно было пройти улицу, о которой мы хотим получить информацию.

Этот заголовок имеет

  • Тип запроса: GET
  • Ресурс запроса: / maps / api / geocode / json? Address = {} & sensor = false
  • Тип HTTP мы используем: HTTP 1.1
  • Хост, на который будет сделан запрос (включая порт): maps.google.com:80
  • Пользовательский агент, который не больше, чем браузер, из которого он сделан (оставьте это поле пустым, в этом случае это не важно)
  • Тип подключения: закрыть. То есть после запроса он закроется.

У нас есть функция с именем locate, которая получает параметр, это будет адрес, с которого мы хотим получить информацию. Мы объясним функцию шаг за шагом:

В первых двух строках мы создаем сокет и подключаем его к нужному адресу (обратите внимание, что функция подключения сокета получает кортеж, один аргумент).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
Третья строка кода используется для заполнения отверстия {} в заголовке адресом, который передается в функцию (посмотрите здесь, как использовано quote_plus).
 cabeceraAux = header.format (quote_plus (адрес)) 
В следующей строке запрос отправлен, обратите внимание, что мы используем функцию кодирования, мы отправляем данные, закодированные в utf-8, если мы этого не сделаем, вы получите ошибку, как вы увидите на следующем рисунке:
 connection.sendall (headerAux.encode ('utf-8')) 

{title}

Следующая часть кода создает байтовую переменную, которая поможет нам собирать данные, поступающие к нам из Интернета, если вы не получите сообщение об ошибке, подобное следующему:

 data = b '' 

{title}

Теперь мы делаем цикл, в котором мы получаем информацию из ответа Google и сохраняем ее в переменной data, функция recv - это та, которая возвращает данные (параметр, который она получает, - это максимальные данные, которые функция возвратит), Цикл продолжается до тех пор, пока не будет возвращено больше данных, что оставит время.

 d = connection.recv (1024), а d: data + = dd = connection.recv (1024) 
[color = # a9a9a9] Цикл, который получает информацию API [/ color]

примечание

Этот цикл можно увидеть выполненным по-другому, с бесконечным циклом и разрывом, когда recv не возвращает больше информации.

По окончании получения всех данных мы можем нарисовать только те данные, которые нас интересуют или всех, здесь я возвращаю все:

 печать (data.decode ('utf-8')) 
Последняя часть кода не имеет ничего общего с запросом, это проверка того, что единственное, что он делает, это видит, выполняется ли выполняемый файл (если так, функция запускается) или импортируется в другой файл Python (функция не будет вызвана), это вещи Python, которые можно узнать из ее документации:
 if __name__ == '__main__': locate ('Calle Desarrollo, Móstoles') 
Я оставляю часть вывода программы, там больше данных, таких как широта и долгота, которые не отображаются:

$config[ads_text5] not found

{title}

примечание
Это один из способов, с помощью которого вы можете делать запросы, а затем я оставлю вам краткий код способа сделать это в Python 2, используя request и json, но вы можете создавать свои собственные программы с этими запросами.

 запросы на импорт def locate (адрес): параметры = {'адрес': адрес, 'сенсор': 'ложь'} ответ = запросы.get ('http://maps.googleapis.com/maps/api/geocode/json', params = параметры) print (answer.json ()) if __name__ == '__main__': locate ('Улица развития, Мостолес') 

И если вы хотите скачать код:

geolocationPython.zip 833 байта 146 скачиваний

$config[ads_text5] not found

  • 0