Cum se fac cereri către API-ul google cu Python

Cuprins

Astăzi voi învăța cum să faceți cereri către API-ul Google pentru a obține informații de la o anumită adresă, cel mai interesant lucru despre tutorial este învățarea cum se face o cerere către un API, cu Python este destul de ușor și intuitiv. Mai întâi vom vedea codul complet și apoi îi explic părțile:

 #! / 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 \ Conexiune: închidere \ r \ n \ \ r \ n \ "" "def localizare (adresă): 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__': localizați ('Development Street, Móstoles')
Trebuie să importăm biblioteca socket pentru a stabili conexiunea, iar funcția quote_plus care aparține urllib.parse, utilizarea acesteia va fi văzută mai târziu.
 import socket din urllib.parse import quote_plus 
La început vom crea o variabilă în care vom crea antetul cererii către API:
 header = "" "\ GET / maps / api / geocode / json? address = {} & sensor = false HTTP / 1.1 \ r \ n \ Gazdă: maps.google.com: 80 \ r \ n \ User-Agent: \ r \ n \ Conexiune: închideți \ r \ n \ \ r \ n \ "" " 
În prima linie veți vedea {} după adresa =, este așa să putem trece pe strada despre care dorim informații.

Acest antet are

  • Tipul cererii: GET
  • Resursa de solicitare: / maps / api / geocode / json? Address = {} & sensor = false
  • Tipul de HTTP pe care îl folosim: HTTP 1.1
  • Gazda unde se va face solicitarea (include portul): maps.google.com:80
  • Agentul utilizator care nu este altceva decât browserul din care este realizat (lăsați-l necompletat, în acest caz nu este important)
  • Tipul conexiunii: închis. Cu alte cuvinte, după cerere va fi închisă.

Avem o funcție numită a localiza, care primește un parametru, aceasta va fi adresa despre care dorim informații. Vom explica funcția pas cu pas:

În primele 2 rânduri creăm soclul și îl conectăm la adresa dorită (rețineți că funcția de conectare socket primește un tuplu, un singur argument).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
A treia linie de cod este obișnuită umple golul {} a antetului cu adresa care este transmisă funcției (observați quote_plus, este folosit aici).
 headerAux = header.format (quote_plus (adresa))
Pe linia următoare cererea este trimisăRețineți că folosim funcția de codificare, ceea ce facem este să trimitem datele codate în utf-8, dacă nu am făcut-o, veți primi o eroare așa cum veți vedea în următoarea imagine:
 connection.sendall (headerAux.encode ('utf-8'))

Următoarea parte a codului creați o variabilă de tip octet, ne va ajuta să colectăm datele care ne vin de pe internet dacă nu veți primi o eroare precum următoarea:

 date = b "

Acum ceea ce facem este o buclă unde primim informațiile din răspunsul Google, și îl stocăm în variabila de date, funcția recv este cea care returnează datele (parametrul pe care îl primește este cantitatea maximă de date pe care funcția o va returna). Bucla continuă până când nu mai sunt returnate date, care vor ieși din timp.

 d = connection.recv (1024) în timp ce d: date + = d d = connection.recv (1024) 
[color = # a9a9a9] Buclă care primește informațiile API [/ color]

NotăAceastă buclă poate fi văzută realizată într-un mod diferit, cu o buclă infinită și care se rupe atunci când recv nu returnează mai multe informații.

Când terminăm de primit toate datele, putem picta doar datele care ne interesează sau pe toate, aici le returnez pe toate:

 print (data.decode ('utf-8')) 
Ultima parte a codului nu are nimic de-a face cu cererea, este o verificare a faptului că nu face decât să vadă dacă fișierul este în curs de executare (dacă da, funcția este lansată) sau dacă este importat în altul Fișier Python (funcția nu s-ar numi), sunt lucruri Python care pot fi învățate din documentația sa:
 if __name__ == '__main__': localizați ('Development Street, Móstoles') 
Vă las o parte din ieșirea programului, există mai multe date, cum ar fi latitudinea și longitudinea, care nu sunt afișate:

Notă
Acesta este unul dintre modurile în care solicitările pot fi făcute, iată un scurt cod al unei modalități de a o face în Python 2 folosind request și json, dar vă puteți crea propriile programe cu aceste solicitări.

 cereri de import def localizați (adresa): parametri = {'adresă': adresă, 'senzor': 'fals'} răspuns = solicitări.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': localizați ('Development Street, Móstoles')

Și în cazul în care doriți să descărcați codul:

geolocationPython.zip 833 octeți 220 Descărcări

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave