Hur man gör förfrågningar till Google API med Python

Innehållsförteckning

Idag ska jag undervisa hur man gör förfrågningar till Google API för att få information från en viss adress, det mest intressanta med handledningen är lärande hur man gör en begäran till ett API, med Python är det ganska enkelt och intuitivt. Först ska vi se hela koden och sedan förklarar jag dess delar:

 #! / usr / bin / env python3 importuttag från 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 \ Anslutning: stäng \ r \ n \ \ r \ n \ "" "def lokalisera (adress): anslutning = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adress)) connection.sendall (headerAux.encode ('utf-8')) data = b '' d = anslutning .recv (1024) medan d: data + = dd = anslutning.recv (1024) skriv ut (data.decode ('utf-8')) om __name__ == '__main__': lokalisera ('Development Street, Móstoles')
Vi måste importera socketbiblioteket för att upprätta anslutningen, och funktionen quote_plus som tillhör urllib.parse, dess användning ses senare.
 importuttag från urllib.parse import quote_plus 
I början kommer vi att skapa en variabel där vi skapar huvudet på begäran till API: et:
 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 \ Anslutning: stäng \ r \ n \ \ r \ n \ "" " 
I den första raden ser du {} efter adress =, det är så här för att kunna passera gatan som vi vill ha information om.

Denna rubrik har

  • Typ av förfrågan: GET
  • Begäran resurs: / maps / api / geocode / json? Address = {} & sensor = false
  • Den typ av HTTP vi använder: HTTP 1.1
  • Värden där begäran kommer att göras (inkluderar porten): maps.google.com:80
  • Användaragenten som inte är mer än webbläsaren från vilken den är gjord (lämna den tom, i det här fallet är det inte viktigt)
  • Anslutningstyp: stäng. Med andra ord kommer det att stängas efter begäran.

Vi har en funktion som heter att lokalisera, som tar emot en parameter, är detta adressen som vi vill ha information om. Vi kommer att förklara funktionen steg för steg:

I de två första raderna vi skapar uttaget och ansluter det till önskad adress (observera att socket -anslutningsfunktionen får en tupel, ett enda argument).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
Den tredje kodraden används för att Fyll i hålet {} i rubriken med adressen som skickas till funktionen (notera quote_plus, den används här).
 headerAux = header.format (quote_plus (adress))
På nästa rad begäran skickasObservera att vi använder kodningsfunktionen, det vi gör är att skicka data som är kodade i utf-8, om vi inte gjorde det skulle du få ett fel som du kommer att se i följande bild:
 connection.sendall (headerAux.encode ('utf-8'))

Nästa del av koden skapa en variabel av typbyte, det hjälper oss att samla in data som kommer till oss från internet om du inte får ett fel som följande:

 data = b ''

Nu är det vi gör en slinga var vi får informationen från Googles svar, och vi lagrar den i datavariabeln, recv -funktionen är den som returnerar data (parametern den tar emot är den maximala datamängd som funktionen kommer att returnera). Slingan fortsätter tills ingen mer data returneras, vilket kommer att stänga tiden.

 d = connection.recv (1024) medan d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Loop som tar emot API -informationen [/ color]

NoteraDenna slinga kunde ses gjord på ett annat sätt, med en oändlig slinga och bryta när recv inte returnerar mer information.

När vi har tagit emot all data kan vi bara måla de data som intresserar oss eller alla, här returnerar jag alla:

 print (data.decode ('utf-8')) 
Den sista delen av koden har ingenting att göra med begäran, det är en kontroll av att allt det gör är att se om det är filen som körs (i så fall startas funktionen) eller om den importeras till en annan Python -fil (funktionen skulle inte kallas), det är Python -saker som kan läras av dess dokumentation:
 om __name__ == '__main__': lokalisera ('Development Street, Móstoles') 
Jag lämnar dig en del av programmets utdata, det finns mer data, till exempel latitud och longitud som inte visas:

Notera
Detta är ett av de sätt som förfrågningar kan göras, här är en kort kod för ett sätt att göra det i Python 2 med begäran och json, men du kan skapa dina egna program med dessa förfrågningar.

 importförfrågningar def lokaliseras (adress): parametrar = {'adress': adress, 'sensor': 'falsk'} svar = förfrågningar.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

Och om du vill ladda ner koden:

geolocationPython.zip 833 byte 220 Nedladdningar

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave