Kaip pateikti užklausas „Google“ API naudojant „Python“

Turinys

Šiandien einu mokyti kaip pateikti užklausas „Google“ API gauti informaciją iš tam tikro adreso, įdomiausias pamokos dalykas yra mokymasis kaip pateikti užklausą API, naudojant „Python“ tai gana paprasta ir intuityvu. Pirmiausia pamatysime visą kodą, o tada paaiškinsiu jo dalis:

 #! / usr / bin / env python3 importavimo lizdas iš 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 (adresas): connection = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adresas)) connection.sendall (headerAux.encode ('utf-8')) data = b "d = ryšys .recv (1024), o d: data + = dd = connection.recv (1024) print (data.decode ('utf-8')), jei __name__ == '__main__': suraskite ('Development Street, Móstoles')
Norėdami užmegzti ryšį, turime importuoti lizdų biblioteką, o funkciją quote_plus, priklausančią urllib.parse, jos naudojimas matomas vėliau.
 importuoti lizdą iš urllib.parse importuoti quote_plus 
Pradžioje sukursime kintamąjį, kuriame sukursime API užklausos antraštę:
 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 \ Ryšys: uždaryti \ r \ n \ \ r \ n \ "" " 
Pirmoje eilutėje pamatysite {} po adreso =, tai yra taip, kad galėtume praeiti gatvę, apie kurią norime informacijos.

Ši antraštė turi

  • Užklausos tipas: GET
  • Užklausos šaltinis: / maps / api / geocode / json? Adresas = {} & sensor = false
  • Mūsų naudojamas HTTP tipas: HTTP 1.1
  • Priegloba, kurioje bus pateikta užklausa (įskaitant prievadą): maps.google.com:80
  • Vartotojo agentas, kuris yra ne kas kita, kaip naršyklė, iš kurios jis buvo atliktas (palikite jį tuščią, šiuo atveju tai nėra svarbu)
  • Ryšio tipas: uždaryti. Kitaip tariant, po užklausos jis bus uždarytas.

Mes turime funkciją, vadinamą surasti, kuris gauna parametrą, tai bus adresas, apie kurį norime gauti informacijos. Mes žingsnis po žingsnio paaiškinsime funkciją:

Pirmose 2 eilutėse sukuriame lizdą ir prijungiame jį prie norimo adreso (atkreipkite dėmesį, kad lizdo prijungimo funkcija gauna kortelę, vieną argumentą).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
Trečioji kodo eilutė yra naudojama užpildykite spragą {} antraštės su adresu, kuris perduotas funkcijai (atkreipkite dėmesį į quote_plus, ji čia naudojama).
 headerAux = header.format (quote_plus (adresas))
Kitoje eilutėje prašymas išsiunčiamasAtminkite, kad mes naudojame kodavimo funkciją, o tai darome, siunčiant duomenis, užkoduotus utf-8, jei to nepadarėme, gausite klaidą, kaip matysite šiame paveikslėlyje:
 connection.sendall (headerAux.encode ('utf-8'))

Kita kodo dalis sukurti baito tipo kintamąjį, tai padės mums surinkti duomenis, kurie ateina iš interneto, jei negausite tokios klaidos:

 duomenys = b "

Dabar mes darome kilpą, kur gauname informaciją iš „Google“ atsakymo, ir mes jį saugome duomenų kintamajame, funkcija recv yra ta, kuri grąžina duomenis (gaunamas parametras yra didžiausias duomenų kiekis, kurį funkcija grąžins). Ciklas tęsiasi tol, kol negrąžinama daugiau duomenų, kurie tuo metu išeis.

 d = connection.recv (1024), o d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Ciklas, gaunantis API informaciją [/ color]

PastabaŠi kilpa galėtų būti matoma kitaip, su begaline kilpa ir nutrūksta, kai recv nepateikia daugiau informacijos.

Baigę gauti visus duomenis galime nupiešti tik tuos duomenis, kurie mus domina arba visus, čia aš grąžinu visus:

 spausdinti (data.decode ('utf-8')) 
Paskutinė kodo dalis neturi nieko bendra su užklausa, tai tikrinimas, ar viskas, ką jis daro, yra pamatyti, ar tai yra failas, kuris yra vykdomas (jei taip, funkcija paleidžiama), ar ji importuojama į kitą „Python“ failas (funkcija nebūtų vadinama), tai yra „Python“ medžiaga, kurią galima sužinoti iš jos dokumentų:
 if __name__ == '__main__': suraskite („Development Street, Móstoles“) 
Palieku jums dalį programos išvesties, yra daugiau duomenų, pvz., Platumos ir ilgumos, kurie nerodomi:

Pastaba
Tai yra vienas iš būdų, kaip galima pateikti užklausas, čia yra trumpas vieno iš būdų tai padaryti „Python 2“ naudojant užklausą ir „json“ kodas, tačiau naudodami šias užklausas galite sukurti savo programas.

 importuoti užklausas def locate (adresas): parametrai = {'adresas': adresas, 'jutiklis': 'klaidingas'} atsakymas = užklausos.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parametrai) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

Ir jei norite atsisiųsti kodą:

geolocationPython.zip 833 baitai 220 atsisiuntimų

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave