Verzoeken doen aan de Google API met Python

Inhoudsopgave

Vandaag ga ik lesgeven hoe u verzoeken kunt indienen bij de Google API om informatie van een bepaald adres te krijgen, het meest interessante aan de tutorial is leren een verzoek indienen bij een API, met Python is het vrij eenvoudig en intuïtief. Eerst gaan we de volledige code zien en dan leg ik de onderdelen uit:

 #! / usr / bin / env python3 import socket van 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 lokatie (adres): verbinding = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adres)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = verbinding .recv (1024) terwijl d: data + = dd = verbinding.recv (1024) print (data.decode ('utf-8')) if __name__ == '__main__': lokaliseren ('Ontwikkelingsstraat, Móstoles')
We moeten de socketbibliotheek importeren om de verbinding tot stand te brengen, en de functie quote_plus die bij urllib.parse hoort, wordt later gebruikt.
 import socket van urllib.parse import quote_plus 
In het begin zullen we een variabele maken waarin we de header van het verzoek aan de API zullen maken:
 header = "" "\ GET / maps / api / geocode / json? adres = {} & sensor = false HTTP / 1.1 \ r \ n \ Host: maps.google.com: 80 \ r \ n \ User-Agent: \ r \ n \ Verbinding: sluiten \ r \ n \ \ r \ n \ "" " 
In de eerste regel zie je {} na adres =, is het zo om de straat te kunnen passeren waar we informatie over willen hebben.

Deze kop heeft

  • Verzoektype: GET
  • De aanvraagbron: / maps / api / geocode / json? Address = {} & sensor = false
  • Het type HTTP dat we gebruiken: HTTP 1.1
  • De host waar het verzoek wordt gedaan (inclusief de poort): maps.google.com:80
  • De user-agent die niets meer is dan de browser van waaruit het wordt gedaan (laat het leeg, in dit geval is het niet belangrijk)
  • Het verbindingstype: sluiten. Met andere woorden, na het verzoek wordt het gesloten.

We hebben een functie genaamd lokaliseren, die een parameter ontvangt, zal dit het adres zijn waarover we informatie willen. We gaan de functie stap voor stap uitleggen:

In de eerste 2 regels we maken de socket en verbinden deze met het gewenste adres (merk op dat de socket connect-functie een tuple ontvangt, een enkel argument).

 verbinding = socket.socket () verbinding.connect (('maps.google.com', 80)) 
De derde regel code wordt gebruikt om: vul het gat op {} van de header met het adres dat aan de functie wordt doorgegeven (let op quote_plus, het wordt hier gebruikt).
 headerAux = header.format (quote_plus (adres))
Op de volgende regel het verzoek is verzondenMerk op dat we de coderingsfunctie gebruiken, wat we doen is de gegevens verzenden die zijn gecodeerd in utf-8, als we dit niet zouden doen, zou u een foutmelding krijgen, zoals u in de volgende afbeelding zult zien:
 verbinding.sendall (headerAux.encode ('utf-8'))

Het volgende deel van de code maak een variabele van het type byte, zal het ons helpen om de gegevens te verzamelen die naar ons komen via internet als u geen foutmelding krijgt zoals de volgende:

 gegevens = b ''

Wat we nu doen is een lus waar we ontvangen de informatie uit de reactie van Google, en we slaan het op in de gegevensvariabele, is de recv-functie degene die de gegevens retourneert (de parameter die het ontvangt is de maximale hoeveelheid gegevens die de functie zal retourneren). De lus gaat door totdat er geen gegevens meer worden geretourneerd, die de tijd zullen verlaten.

 d = verbinding.recv (1024) terwijl d: data + = d d = verbinding.recv (1024) 
[color = # a9a9a9] Loop die de API-informatie ontvangt [/ color]

OpmerkingDeze lus zou op een andere manier kunnen worden gedaan, met een oneindige lus en verbroken wanneer recv niet meer informatie retourneert.

Wanneer we klaar zijn met het ontvangen van alle gegevens, kunnen we alleen de gegevens schilderen die ons interesseren of allemaal, hier geef ik alles terug:

 print (data.decode ('utf-8')) 
Het laatste deel van de code heeft niets te maken met het verzoek, het is een controle of het alleen het bestand is dat wordt uitgevoerd (als dat het geval is, wordt de functie gestart) of dat het in een ander bestand wordt geïmporteerd Python-bestand (de functie zou niet worden aangeroepen), het zijn Python-dingen die kunnen worden geleerd uit de documentatie:
 if __name__ == '__main__': lokaliseren ('Ontwikkelingsstraat, Móstoles') 
Ik laat je een deel van de uitvoer van het programma, er zijn meer gegevens, zoals lengte- en breedtegraad die niet worden weergegeven:

Opmerking
Dit is een van de manieren waarop verzoeken kunnen worden gedaan, hier is een korte code van een manier om het in Python 2 te doen met behulp van request en json, maar je kunt je eigen programma's maken met deze verzoeken.

 importverzoeken def lokatie (adres): parameters = {'address': address, 'sensor': 'false'} response = requests.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': lokaliseren ('Development Street, Móstoles')

En voor het geval je de code wilt downloaden:

geolocatiePython.zip 833 bytes 220 downloads

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave