Slik sender du forespørsler til Google API med Python

Innholdsfortegnelse

I dag skal jeg undervise hvordan du sender forespørsler til Google API for å få informasjon fra en bestemt adresse, det mest interessante med opplæringen er læring hvordan du sender en forespørsel til et API, med Python er det ganske enkelt og intuitivt. Først skal vi se den komplette koden, og deretter forklarer jeg dens deler:

 #! / 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 \ Tilkobling: lukk \ r \ n \ \ r \ n \ "" "" def lokaliser (adresse): tilkobling = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adresse)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = tilkobling .recv (1024) mens d: data + = dd = tilkobling.recv (1024) print (data.decode ('utf-8')) hvis __name__ == '__main__': lokaliser ('Development Street, Móstoles')
Vi må importere socket -biblioteket for å etablere tilkoblingen, og funksjonen quote_plus som tilhører urllib.parse, bruken blir sett senere.
 import socket fra urllib.parse import quote_plus 
I begynnelsen vil vi lage en variabel der vi vil lage overskriften til forespørselen til 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 \ Tilkobling: lukk \ r \ n \ \ r \ n \ "" " 
I den første linjen vil du se {} etter adresse =, er det slik for å kunne passere gaten som vi ønsker informasjon om.

Denne overskriften har

  • Forespørselstype: GET
  • Forespørselsressursen: / maps / api / geocode / json? Address = {} & sensor = false
  • Typen HTTP vi bruker: HTTP 1.1
  • Verten der forespørselen blir fremsatt (inkluderer porten): maps.google.com:80
  • Brukeragenten som ikke er noe mer enn nettleseren det er gjort fra (la det stå tomt, i dette tilfellet er det ikke viktig)
  • Tilkoblingstype: Lukk. Med andre ord, etter forespørselen blir den stengt.

Vi har en funksjon som heter å lokalisere, som mottar en parameter, vil dette være adressen vi ønsker informasjon om. Vi skal forklare funksjonen trinn for trinn:

I de to første linjene vi oppretter kontakten og kobler den til ønsket adresse (Vær oppmerksom på at socket connect -funksjonen mottar en tupel, et enkelt argument).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
Den tredje kodelinjen brukes til fyll ut hullet {} i overskriften med adressen som sendes til funksjonen (legg merke til quote_plus, den brukes her).
 headerAux = header.format (quote_plus (adresse))
På neste linje forespørselen sendesVær oppmerksom på at vi bruker kodefunksjonen, det vi gjør er å sende dataene som er kodet i utf-8, hvis vi ikke gjorde det, ville du få en feil som du vil se i følgende bilde:
 connection.sendall (headerAux.encode ('utf-8'))

Den neste delen av koden lage en variabel av type byte, vil det hjelpe oss å samle inn dataene som kommer til oss fra internett hvis du ikke vil motta en feil som følgende:

 data = b ''

Nå er det vi gjør en løkke hvor vi mottar informasjonen fra Googles svar, og vi lagrer den i datavariabelen, er recv -funksjonen den som returnerer dataene (parameteren den mottar er den maksimale datamengden som funksjonen vil returnere). Sløyfen fortsetter til ingen flere data returneres, noe som vil gå ut av tiden.

 d = connection.recv (1024) mens d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Loop som mottar API -informasjonen [/ color]

MerkDenne sløyfen kan sees gjort på en annen måte, med en uendelig sløyfe og brudd når recv ikke returnerer mer informasjon.

Når vi er ferdig med å motta alle dataene, kan vi bare male dataene som interesserer oss eller alle, her returnerer jeg alle:

 print (data.decode ('utf-8')) 
Den siste delen av koden har ingenting å gjøre med forespørselen, det er en sjekk om alt den gjør er å se om det er filen som kjøres (i så fall blir funksjonen lansert) eller om den blir importert til en annen Python -fil (funksjonen vil ikke bli kalt), det er Python -ting som kan læres av dokumentasjonen:
 hvis __name__ == '__main__': lokaliser ('Development Street, Móstoles') 
Jeg forlater deg en del av utdataene fra programmet, det er flere data, for eksempel breddegrad og lengdegrad som ikke vises:

Merk
Dette er en av måtene forespørsler kan sendes på. Her er en kort kode for en måte å gjøre det på i Python 2 ved å bruke forespørsel og json, men du kan lage dine egne programmer med disse forespørslene.

 importforespørsler def lokaliser (adresse): parametere = {'adresse': adresse, 'sensor': 'falsk'} respons = forespørsler.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

Og hvis du vil laste ned koden:

geolocationPython.zip 833 byte 220 Nedlastinger

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave