Kako slati zahtjeve google API -ju s Pythonom

Sadržaj

Danas ću predavati kako slati zahtjeve Google API -ju za dobivanje podataka s određene adrese, najzanimljivija stvar u vodiču je učenje kako podnijeti zahtjev za API, s Pythonom je prilično jednostavan i intuitivan. Prvo ćemo vidjeti cijeli kod, a zatim objašnjavam njegove dijelove:

 #! / usr / bin / env python3 uvozna utičnica iz 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 \ Veza: zatvori \ r \ n \ \ r \ n \ "" "def locate (adresa): connection = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adresa)) 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 if __name__ == '__main__': locate ('Development Street, Móstoles')
Moramo uvesti socket knjižnicu da bismo uspostavili vezu, a funkciju quote_plus koja pripada urllib.parse, njezina će se upotreba vidjeti kasnije.
 import socket iz urllib.parse import quote_plus 
Na početku ćemo stvoriti varijablu u kojoj ćemo stvoriti zaglavlje zahtjeva za API:
 header = "" "\ GET / maps / api / geocode / json? address = {} & sensor = false HTTP / 1.1 \ r \ n \ Domaćin: maps.google.com: 80 \ r \ n \ User-Agent: \ r \ n \ Veza: zatvori \ r \ n \ \ r \ n \ "" " 
U prvom retku vidjet ćete {} nakon adrese =, ovako je kad bismo mogli proći ulicom o kojoj želimo informacije.

Ovo zaglavlje ima

  • Vrsta zahtjeva: GET
  • Resurs zahtjeva: / maps / api / geocode / json? Adresa = {} & sensor = false
  • Vrsta HTTP -a koju koristimo: HTTP 1.1
  • Domaćin na kojem će se poslati zahtjev (uključuje port): maps.google.com:80
  • Korisnički agent koji nije ništa drugo nego preglednik iz kojeg je napravljen (ostavite prazno, u ovom slučaju to nije važno)
  • Vrsta veze: blizu. Drugim riječima, nakon zahtjeva bit će zatvoren.

Imamo funkciju koja se zove locirati, koji prima parametar, to će biti adresa o kojoj želimo informacije. Korak po korak ćemo objasniti funkciju:

U prva 2 retka stvaramo utičnicu i povezujemo je na željenu adresu (imajte na umu da funkcija socket connect prima tuple, jedan argument).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
Treći red koda se koristi za popuni prazninu {} zaglavlja s adresom koja se prosljeđuje funkciji (primjetite quote_plus, ovdje se koristi).
 headerAux = header.format (citat_plus (adresa))
Na sljedećem retku zahtjev je poslanImajte na umu da koristimo funkciju kodiranja, ono što radimo je slanje podataka kodiranih u utf-8, ako to ne učinimo, dobili biste pogrešku kao što ćete vidjeti na sljedećoj slici:
 connection.sendall (headerAux.encode ('utf-8'))

Sljedeći dio koda stvoriti varijablu tipa byte, pomoći će nam pri prikupljanju podataka koji nam dolaze s interneta ako nećete primiti pogrešku poput ove:

 podatak = b ''

Ono što mi sada radimo je petlja gdje informacije primamo iz Googleovog odgovora, i spremamo ga u podatkovnu varijablu, funkcija recv je ta koja vraća podatke (parametar koji prima je najveća količina podataka koju će funkcija vratiti). Petlja se nastavlja sve dok se ne vrate više podaci, što će izaći iz tog vremena.

 d = connection.recv (1024) dok je d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Petlja koja prima podatke o API -u [/ color]

BilješkaOva petlja se može vidjeti izvedena na drugačiji način, s beskonačnom petljom i prekidom kada recv ne vrati više informacija.

Kad završimo s primanjem svih podataka, možemo naslikati samo podatke koji nas zanimaju ili sve, ovdje vraćam sve:

 ispis (data.decode ('utf-8')) 
Posljednji dio koda nema nikakve veze sa zahtjevom, provjera je da samo provjerava izvršava li se datoteka (ako je tako, funkcija je pokrenuta) ili se uvozi u drugu datoteku Python datoteka (funkcija se ne bi mogla pozvati), to su Pythonove stvari koje se mogu naučiti iz njegove dokumentacije:
 if __name__ == '__main__': locate ('Ulica za razvoj, Móstoles') 
Ostavljam vam dio rezultata programa, ima još podataka, poput zemljopisne širine i dužine koji nisu prikazani:

Bilješka
Ovo je jedan od načina na koji se mogu slati zahtjevi, evo kratkog koda jednog od načina kako to učiniti u Pythonu 2 pomoću request i json, ali s tim zahtjevima možete stvoriti vlastite programe.

 zahtjevi za uvoz def locate (address): parameters = {'address': address, 'sensor': 'false'} response = requests.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parametri) print (response.json ()) if __name__ == '__main__': locate ('Ulica za razvoj, Móstoles')

A u slučaju da želite preuzeti kod:

geolocationPython.zip 833 bajta 220 preuzimanja

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave