Come effettuare richieste all'API di Google con Python

Sommario

Oggi insegno come effettuare richieste all'API di Google per ottenere informazioni da un determinato indirizzo, la cosa più interessante del tutorial è imparare come fare una richiesta a un'API, con Python è abbastanza facile e intuitivo. Per prima cosa andiamo a vedere il codice completo e poi spiego le sue parti:

 #! / usr / bin / env python3 import socket from 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 \ Connection: close \ r \ n \ \ r \ n \ "" "def locate (address): connection = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (address)) 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 ('Development Street, Móstoles')
Abbiamo bisogno di importare la libreria socket per stabilire la connessione, e la funzione quote_plus che appartiene a urllib.parse, il suo utilizzo è visto in seguito.
 import socket da urllib.parse import quote_plus 
All'inizio creeremo una variabile dove creeremo l'intestazione della richiesta all'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 \ Connessione: chiudi \ r \ n \ \ r \ n \ "" " 
Nella prima riga vedrai {} dopo address =, è così per poter passare per la via di cui vogliamo informazioni.

Questa intestazione ha

  • Tipo di richiesta: GET
  • La risorsa richiesta: / maps / api / geocode / json? Address = {} & sensor = false
  • Il tipo di HTTP che utilizziamo: HTTP 1.1
  • L'host su cui verrà effettuata la richiesta (include la porta): maps.google.com:80
  • L'interprete che altro non è che il browser da cui si fa (lascialo vuoto, in questo caso non è importante)
  • Il tipo di connessione: chiudere. In altre parole, dopo la richiesta verrà chiusa.

Abbiamo una funzione chiamata localizzare, che riceve un parametro, questo sarà l'indirizzo di cui vogliamo informazioni. Spiegheremo la funzione passo dopo passo:

Nelle prime 2 righe creiamo il socket e lo colleghiamo all'indirizzo desiderato (nota che la funzione socket connect riceve una tupla, un singolo argomento).

 connection = socket.socket() connection.connect (('maps.google.com', 80)) 
La terza riga di codice viene utilizzata per colmare il vuoto {} dell'intestazione con l'indirizzo passato alla funzione (notare quote_plus, qui è usato).
 headerAux = header.format (quote_plus (indirizzo))
Sulla riga successiva la richiesta è inviataNota che usiamo la funzione di codifica, quello che facciamo è inviare i dati codificati in utf-8, se non lo facessimo, otterresti un errore come vedrai nell'immagine seguente:
 connection.sendall (headerAux.encode ('utf-8'))

La parte successiva del codice creare una variabile di tipo byte, ci aiuterà a raccogliere i dati che ci arrivano da Internet se non ricevi un errore come il seguente:

 dati = b ''

Ora quello che facciamo è un ciclo dove riceviamo le informazioni dalla risposta di Google, e lo stiamo memorizzando nella variabile data, la funzione recv è quella che restituisce i dati (il parametro che riceve è la quantità massima di dati che la funzione restituirà). Il ciclo continua fino a quando non vengono restituiti più dati, che usciranno nel frattempo.

 d = connection.recv (1024) mentre d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Ciclo che riceve le informazioni API [/ color]

NotaQuesto ciclo potrebbe essere visto in un modo diverso, con un ciclo infinito e un'interruzione quando recv non restituisce più informazioni.

Quando finiamo di ricevere tutti i dati possiamo dipingere solo i dati che ci interessano o tutti, qui riporto tutti:

 print (data.decode ('utf-8')) 
L'ultima parte del codice non ha nulla a che fare con la richiesta, è un controllo che non fa altro che vedere se è il file che viene eseguito (in tal caso la funzione viene lanciata) o se viene importato in un altro File Python (la funzione non verrebbe chiamata), è roba Python che può essere appresa dalla sua documentazione:
 if __name__ == '__main__': individuare ('Development Street, Móstoles') 
Vi lascio una parte dell'output del programma, ci sono più dati, come latitudine e longitudine che non vengono mostrati:

Nota
Questo è uno dei modi in cui è possibile effettuare richieste, ecco un breve codice di un modo per farlo in Python 2 usando request e json, ma puoi creare i tuoi programmi con queste richieste.

 import request def locate (address): parametri = {'address': address, 'sensor': 'false'} response = request.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parametri) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

E nel caso volessi scaricare il codice:

geolocalizzazionePython.zip 833 byte 220 download

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave