Как да правите заявки към google API с Python

Съдържание

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

 #! / usr / bin / env python3 гнездо за импортиране от urllib.parse внос 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 \ Connection: close \ r \ n \ \ r \ n \ "" "def locate (address): connection = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (адрес)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = connection .recv (1024) while d: data + = dd = connection.recv (1024) print (data.decode ('utf-8'))) if __name__ == '__main__': locate ('Street Development, Móstoles')
Трябва да импортираме библиотеката на сокета, за да установим връзката, а функцията quote_plus, която принадлежи на urllib.parse, нейното използване се вижда по -късно.
 гнездо за импортиране от urllib.parse внос quote_plus 
В началото ще създадем променлива, където ще създадем заглавката на заявката към API:
 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 \ "" " 
В първия ред ще видите {} след адрес =, това е така, за да можем да преминем улицата, за която искаме информация.

Тази заглавка има

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

Имаме функция, наречена за локализиране, който получава параметър, това ще бъде адресът, за който искаме информация. Ще обясним функцията стъпка по стъпка:

В първите 2 реда създаваме гнездото и го свързваме с желания адрес (имайте предвид, че функцията за свързване на гнездо получава кортеж, единичен аргумент).

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

Следващата част от кода създайте променлива от тип байт, ще ни помогне да съберем данните, които идват при нас от интернет, ако няма да получите грешка като следната:

 данни = b "

Това, което правим, е цикъл, където получаваме информацията от отговора на Google, и ние го съхраняваме в променливата с данни, функцията recv е тази, която връща данните (параметърът, който получава, е максималното количество данни, което функцията ще върне). Цикълът продължава, докато не се върнат повече данни, което ще излезе от while.

 d = връзка.recv (1024), докато d: данни + = d d = връзка.recv (1024) 
[color = # a9a9a9] Цикъл, който получава информацията за API [/ color]

ЗабележкаТози цикъл може да се види направен по различен начин, с безкраен цикъл и прекъсване, когато recv не връща повече информация.

Когато приключим с получаването на всички данни, можем да нарисуваме само данните, които ни интересуват или всички, тук връщам всички:

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

Забележка
Това е един от начините, по които могат да се правят заявки, ето кратък код на един начин да го направите в Python 2 с помощта на request и json, но можете да създадете свои собствени програми с тези заявки.

 заявки за импортиране def locate (адрес): параметри = {'адрес': адрес, 'сензор': 'невярно'} отговор = requests.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = параметри) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

И в случай, че искате да изтеглите кода:

geolocationPython.zip 833 байта 220 изтегляния

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave