So stellen Sie mit Python Anfragen an die Google-API

Heute werde ich lehren, wie man Anfragen an die Google-API stellt, um Informationen von einer bestimmten Adresse zu erhalten . Der interessanteste Teil des Tutorials besteht darin, zu lernen, wie man Anfragen an eine API stellt. Mit Python ist dies recht einfach und intuitiv. Lassen Sie uns zuerst den kompletten Code sehen und dann seine Teile erklären:

 #! / usr / bin / env python3 Import-Socket aus 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  Verbindung: schließen  r  n   r  n  "" " def locate (adresse): verbindung = socket.socket () conexion.connect (('maps.google.com', 80)) cabeceraAux = cabecera.format (quote_plus (address)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = connection.recv (1024) während d: Daten + = d d = connection.recv (1024) print (data.decode ('utf-8')) if __name__ == '__main__': lokalisieren ('Calle Desarrollo, Móstoles') 

Wir müssen die Socket-Bibliothek importieren, um die Verbindung herzustellen, und die Funktion quote_plus, die zu urllib.parse gehört, wird später verwendet.

 Import-Socket aus urllib.parse import quote_plus 

Zu Beginn erstellen wir eine Variable, in der wir den Header der Anforderung an die API erstellen:

 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  Verbindung: schließen  r  n   r  n  "" " 

In der ersten Zeile sehen Sie {} nach address =. So können Sie die Straße passieren, für die wir Informationen benötigen.

Dieser Header hat
  • Art der Petition: GET
  • Die Ressource der Anforderung: / maps / api / geocode / json? Address = {} & sensor = false
  • Die Art von HTTP, die wir verwenden: HTTP 1.1
  • Der Host, bei dem die Anfrage gestellt wird (einschließlich des Ports): maps.google.com:80
  • Das Benutzerprogramm, das nicht mehr als der Browser ist, aus dem es erstellt wurde (lassen Sie es leer, in diesem Fall ist es nicht wichtig)
  • Die Art der Verbindung: schließen. Das heißt, dass nach der Anfrage geschlossen wird.
See also  Mit Linfo können Sie Linux-Serverstatistiken in Echtzeit anzeigen

Wir haben eine Funktion namens locate , die einen Parameter empfängt. Dies ist die Adresse, von der wir Informationen erhalten möchten. Wir werden die Funktion Schritt für Schritt erklären:

In den ersten beiden Zeilen erstellen wir den Socket und verbinden ihn mit der gewünschten Adresse (beachten Sie, dass die Socket-Verbindungsfunktion ein Tupel, ein einzelnes Argument, empfängt).

 verbindung = socket.socket () conexion.connect (('maps.google.com', 80)) 

Die dritte Codezeile wird verwendet, um die Lücke {} im Header mit der Adresse zu füllen , die an die Funktion übergeben wird (siehe quote_plus, hier verwendet).

 cabeceraAux = cabecera.format (quote_plus (address)) 

In der nächsten Zeile wird die Anfrage gesendet . Beachten Sie, dass wir die Codierungsfunktion verwenden. Wir senden nur die in utf-8 codierten Daten. Andernfalls erhalten wir eine Fehlermeldung, wie Sie in der folgenden Abbildung sehen werden:

 connection.sendall (headerAux.encode ('utf-8')) 

falloPeticion.jpg

Der nächste Teil des Codes erstellt eine Variable vom Typ Byte . Sie hilft uns, die Daten zu sammeln, die aus dem Internet an uns gesendet werden, wenn Sie keine Fehlermeldung wie die folgende erhalten:

 data = b '' 

falloPeticion2.jpg

Was wir jetzt tun, ist eine Schleife, in der wir die Informationen aus der Antwort von Google empfangen und in der Datenvariablen speichern. Die recv-Funktion gibt die Daten zurück (der Parameter, der empfangen wird, gibt die maximalen Daten zurück, die die Funktion zurückgibt). . Die Schleife wird fortgesetzt, bis keine Daten mehr zurückgegeben werden, die in der Zwischenzeit beendet werden.

 d = connection.recv (1024) während d: Daten + = d d = connection.recv (1024) 

[/color] [color = # a9a9a9] Schleife, die API-Informationen empfängt [/ color]

Hinweis
Diese Schleife könnte auf eine andere Art und Weise ausgeführt werden, mit einer Endlosschleife und einem Abbruch, wenn recv keine weiteren Informationen zurückgibt.

Am Ende des Empfangs aller Daten können wir nur die Daten zeichnen, die uns oder alle interessieren, hier gebe ich alle zurück:

 print (data.decode ('utf-8')) 

Der letzte Teil des Codes hat nichts mit der Anforderung zu tun. Es wird lediglich überprüft, ob die Datei ausgeführt wird (wenn dies der Fall ist, wird die Funktion gestartet) oder ob sie in eine andere Python-Datei importiert wird (die Funktion würde nicht aufgerufen werden), es handelt sich um Python-Dinge, die in ihrer Dokumentation beschrieben werden :

 if __name__ == '__main__': lokalisieren ('Calle Desarrollo, Móstoles') 

Wenn ich einen Teil der Programmausgabe lasse, werden weitere Daten wie Breiten- und Längengrade nicht angezeigt:

See also  So öffnen Sie ein Notizbuch als Administrator in Windows 10 (Editor)

peticion.jpg

Hinweis
Dies ist eine der Möglichkeiten, wie Sie Anfragen stellen können. Dann überlasse ich Ihnen einen kurzen Code für die Vorgehensweise in Python 2 mit request und json. Sie können jedoch mit diesen Anfragen Ihre eigenen Programme erstellen.

 Importanforderungen def locate (adresse): parameters = {'address': address, 'sensor': 'false'} answer = questions.get ('http://maps.googleapis.com/maps/api/geocode/json', params = parameters) print (answer.json ()) if __name__ == '__main__': lokalisieren ('Calle Desarrollo, Móstoles') 

Und falls Sie den Code herunterladen möchten:

Angehängte Datei 123 Descargas geolocalizacionPython.zip 833 Bytes 123 Downloads

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *