Sådan fremsættes anmodninger til Google API med Python

Indholdsfortegnelse

I dag skal jeg undervise hvordan man sender anmodninger til Google API om at få oplysninger fra en bestemt adresse, det mest interessante ved øvelsen er læring hvordan man sender en anmodning til en API, med Python er det ret let og intuitivt. Først skal vi se den komplette kode, og derefter forklarer jeg dens dele:

 #! / usr / bin / env python3 import socket fra 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 \ Forbindelse: luk \ r \ n \ \ r \ n \ "" "def lokaliser (adresse): forbindelse = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adresse)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = forbindelse .recv (1024) mens d: data + = dd = forbindelse.recv (1024) udskrives (data.decode ('utf-8')) hvis __navn__ == '__main__': lokaliser ('Development Street, Móstoles')
Vi er nødt til at importere socket -biblioteket for at etablere forbindelsen, og funktionen quote_plus, der tilhører urllib.parse, dets anvendelse ses senere.
 import socket fra urllib.parse import quote_plus 
I begyndelsen opretter vi en variabel, hvor vi vil oprette overskriften på anmodningen til API'et:
 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 \ Forbindelse: luk \ r \ n \ \ r \ n \ "" " 
I den første linje vil du se {} efter adresse =, er det sådan her at kunne passere gaden, som vi ønsker information om.

Denne overskrift har

  • Anmodningstype: GET
  • Anmodningsressourcen: / maps / api / geocode / json? Address = {} & sensor = false
  • Den type HTTP, vi bruger: HTTP 1.1
  • Værten, hvor anmodningen vil blive fremsat (inkluderer porten): maps.google.com:80
  • Brugeragenten, der ikke er mere end den browser, hvorfra den er udført (lad den stå tom, i dette tilfælde er det ikke vigtigt)
  • Forbindelsestype: luk. Med andre ord vil det blive lukket efter anmodningen.

Vi har en funktion kaldet at lokalisere, som modtager en parameter, vil dette være den adresse, som vi ønsker information om. Vi vil forklare funktionen trin for trin:

I de første 2 linjer vi opretter stikket og slutter det til den ønskede adresse (Bemærk, at socket -forbindelsesfunktionen modtager en tuple, et enkelt argument).

 forbindelse = socket.socket () forbindelse.connect (('maps.google.com', 80)) 
Den tredje kodelinje bruges til at udfyld hullet {} af overskriften med den adresse, der sendes til funktionen (bemærk quote_plus, den bruges her).
 headerAux = header.format (quote_plus (adresse))
På den næste linje anmodningen sendesBemærk, at vi bruger kodningsfunktionen, det vi gør er at sende dataene, der er kodet i utf-8, hvis vi ikke gjorde det, ville du få en fejl, som du vil se i følgende billede:
 connection.sendall (headerAux.encode ('utf-8'))

Den næste del af koden oprette en variabel af typen byte, det vil hjælpe os med at indsamle de data, der kommer til os fra internettet, hvis du ikke modtager en fejl som følgende:

 data = b ''

Nu, hvad vi gør, er en loop hvor vi modtager oplysningerne fra Googles svar, og vi gemmer det i datavariablen, er recv -funktionen den, der returnerer dataene (parameteren, den modtager, er den maksimale datamængde, som funktionen vil returnere). Sløjfen fortsætter, indtil der ikke returneres flere data, hvilket forlader mens.

 d = forbindelse.recv (1024) mens d: data + = d d = forbindelse.recv (1024) 
[color = # a9a9a9] Loop, der modtager API -oplysninger [/ color]

BemærkDenne sløjfe kunne ses udført på en anden måde med en uendelig sløjfe og brud, når recv ikke returnerer flere oplysninger.

Når vi er færdige med at modtage alle data, kan vi kun male de data, der interesserer os eller alle, her returnerer jeg alle:

 print (data.decode ('utf-8')) 
Den sidste del af koden har intet at gøre med anmodningen, det er en kontrol af, at alt det gør er at se, om det er filen, der udføres (hvis ja, funktionen startes), eller om den importeres til en anden Python -fil (funktionen ville ikke blive kaldt), det er Python -ting, der kan læres af dens dokumentation:
 hvis __name__ == '__main__': find ('Development Street, Móstoles') 
Jeg efterlader dig en del af programmets output, der er flere data, såsom breddegrad og længdegrad, der ikke vises:

Bemærk
Dette er en af ​​de måder, hvorpå anmodninger kan fremsættes, her er en kort kode til en måde at gøre det på i Python 2 ved hjælp af anmodning og json, men du kan oprette dine egne programmer med disse anmodninger.

 importanmodninger def lokaliseres (adresse): parametre = {'adresse': adresse, 'sensor': 'falsk'} svar = forespørgsler.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parametre) print (response.json ()) hvis __name__ == '__main__': find ('Development Street, Móstoles')

Og hvis du vil downloade koden:

geolocationPython.zip 833 bytes 220 downloads

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave