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_plusAll'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