Jak wysyłać żądania do Google API za pomocą Pythona

Spisie treści

Dzisiaj mam zamiar uczyć jak wysyłać żądania do Google API, aby uzyskać informacje z określonego adresu, najciekawszą rzeczą w tutorialu jest nauka jak złożyć żądanie do API, w Pythonie jest to dość łatwe i intuicyjne. Najpierw zobaczymy cały kod, a następnie wyjaśnię jego części:

 #! / usr / bin / env python3 importuj gniazdo z urllib.parse import quote_plus 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 \ Connection: close \ r \ n \ \ r \ n \ "" "def locate (adres): połączenie = socket.socket ( ) connection.connect (('maps.google.com', 80)) headerAux = header.format (quote_plus (adres)) 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__': locate ('Ulica rozwoju, Móstoles')
Musimy zaimportować bibliotekę gniazd, aby nawiązać połączenie, a funkcję quote_plus należącą do urllib.parse, jej zastosowanie zobaczymy później.
 importuj gniazdo z urllib.parse importuj quote_plus 
Na początek stworzymy zmienną, w której stworzymy nagłówek żądania do API:
 header = "" "\GET/maps/api/gecode/json? address={}&sensor=false HTTP/1.1\r\n\Host: maps.google.com:80\r\n\User-Agent: \ r \ n \ Połączenie: zamknij \ r \ n \ \ r \ n \ "" " 
W pierwszym wierszu zobaczysz {} po adresie =, to jest tak, aby móc przejść przez ulicę, o której chcemy uzyskać informacje.

Ten nagłówek ma

  • Typ żądania: GET
  • Zasób żądania: /maps/api/gecode/json?Adres = {} & sensor = false
  • Typ HTTP, którego używamy: HTTP 1.1
  • Host, na którym zostanie wysłane żądanie (w tym port): maps.google.com:80
  • Agent użytkownika, który jest niczym innym jak przeglądarką, z której to się robi (pozostaw to pole puste, w tym przypadku nie ma to znaczenia)
  • Typ połączenia: zamknij. Innymi słowy, po złożeniu wniosku zostanie on zamknięty.

Mamy funkcję o nazwie zlokalizować, który otrzyma parametr, będzie to adres, o którym chcemy uzyskać informacje. Wyjaśnimy tę funkcję krok po kroku:

W pierwszych 2 liniach tworzymy gniazdo i podłączamy je pod żądany adres (zauważ, że funkcja socket connect otrzymuje krotkę, pojedynczy argument).

 connection = socket.socket() połączenie.connect (('maps.google.com', 80)) 
Trzecia linia kodu służy do wypełnij lukę {} nagłówka z adresem, który jest przekazywany do funkcji (zauważ quote_plus, jest tutaj używany).
 headerAux = header.format (quote_plus (adres))
W następnej linii prośba została wysłanaZwróć uwagę, że używamy funkcji kodowania, wysyłamy dane zakodowane w utf-8, jeśli tego nie zrobimy, otrzymasz błąd, jak widać na poniższym obrazku:
 connection.sendall (headerAux.encode ('utf-8'))

Kolejna część kodu utwórz zmienną typu byte, pomoże nam zebrać dane, które przychodzą do nas z Internetu, jeśli nie pojawi się błąd podobny do następującego:

 dane = b ''

Teraz robimy pętlę, gdzie otrzymujemy informacje z odpowiedzi Google, a przechowujemy je w zmiennej data, funkcja recv zwraca dane (parametr, który otrzymuje, to maksymalna ilość danych, które funkcja zwróci). Pętla jest kontynuowana, dopóki nie zostaną zwrócone żadne dane, co spowoduje zakończenie while.

 d = connection.recv (1024) podczas gdy d: dane + = d d = connection.recv (1024) 
[color = # a9a9a9] Pętla odbierająca informacje API [/ color]

NotatkaTę pętlę można postrzegać jako wykonaną w inny sposób, z nieskończoną pętlą i przerywaniem, gdy recv nie zwraca więcej informacji.

Kiedy skończymy odbierać wszystkie dane, możemy namalować tylko te, które nas interesują lub wszystkie, tutaj zwracam wszystkie:

 drukuj (data.decode ('utf-8')) 
Ostatnia część kodu nie ma nic wspólnego z żądaniem, jest to sprawdzenie, czy tylko sprawdza, czy jest to plik, który jest wykonywany (jeśli tak, funkcja jest uruchomiona), czy też jest importowany do innego Plik Pythona (funkcja nie zostałaby wywołana), to rzeczy z Pythona, których można się nauczyć z jego dokumentacji:
 if __name__ == '__main__': zlokalizuj ('Ulica rozwoju, Móstoles') 
Zostawiam wam część danych wyjściowych programu, jest więcej danych, takich jak szerokość i długość geograficzna, które nie są pokazane:

Notatka
Jest to jeden ze sposobów tworzenia żądań, oto krótki kod jednego ze sposobów na wykonanie tego w Pythonie 2 za pomocą request i json, ale możesz tworzyć własne programy za pomocą tych żądań.

 import requestów def locate (address): parametry = {'address': adres, 'sensor': 'false'} response = requests.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': locate ('Ulica rozwoju, Móstoles')

A jeśli chcesz pobrać kod:

geolokalizacjaPython.zip 833 bajtów 220 pobrań

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave