Como fazer solicitações para a API do Google com Python

Índice

Hoje vou ensinar como fazer solicitações à API do Google para obter informações de um determinado endereço, o mais interessante sobre o tutorial é aprender como fazer uma solicitação a uma API, com Python é bastante fácil e intuitivo. Primeiro veremos o código completo e depois explicarei suas partes:

 #! / 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 \ Agente do usuário: \ r \ n \ Conexão: fechar \ r \ n \ \ r \ n \ "" "def localizar (endereço): conexão = 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) enquanto d: data + = dd = connection.recv (1024) print (data.decode ('utf-8')) if __name__ == '__main__': locate ('Development Street, Móstoles')
Precisamos importar a biblioteca de socket para estabelecer a conexão, e a função quote_plus que pertence a urllib.parse, seu uso é visto mais tarde.
 import socket from urllib.parse import quote_plus 
No início, criaremos uma variável onde criaremos o cabeçalho da solicitação para a API:
 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 \ Conexão: fechar \ r \ n \ \ r \ n \ "" " 
Na primeira linha você verá {} depois de address =, é assim para conseguir passar pela rua sobre a qual queremos informações.

Este cabeçalho tem

  • Tipo de solicitação: GET
  • O recurso de solicitação: / maps / api / geocode / json? Address = {} & sensor = false
  • O tipo de HTTP que usamos: HTTP 1.1
  • O host onde a solicitação será feita (inclui a porta): maps.google.com:80
  • O agente do usuário que nada mais é do que o navegador a partir do qual é feito (deixe em branco, neste caso não é importante)
  • O tipo de conexão: fechar. Ou seja, após o pedido ele será encerrado.

Temos uma função chamada localizar, que recebe um parâmetro, este será o endereço sobre o qual desejamos informações. Vamos explicar a função passo a passo:

Nas primeiras 2 linhas nós criamos o soquete e o conectamos ao endereço desejado (observe que a função de conexão de soquete recebe uma tupla, um único argumento).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
A terceira linha de código é usada para Preencha no espaço em branco {} do cabeçalho com o endereço que é passado para a função (observe quote_plus, ele é usado aqui).
 headerAux = header.format (quote_plus (address))
Na próxima linha o pedido é enviadoObserve que usamos a função encode, o que fazemos é enviar os dados codificados em utf-8, se não o fizéssemos, você obteria um erro como verá na imagem a seguir:
 connection.sendall (headerAux.encode ('utf-8'))

A próxima parte do código crie uma variável do tipo byte, isso nos ajudará a coletar os dados que chegam até nós da Internet se você não receber um erro como o seguinte:

 dados = b ''

Agora o que fazemos é um loop onde recebemos as informações da resposta do Google, e o estamos armazenando na variável de dados, a função recv é aquela que retorna os dados (o parâmetro que ela recebe é a quantidade máxima de dados que a função retornará). O loop continua até que nenhum outro dado seja retornado, o que sairá com o tempo.

 d = conexão.recv (1024) enquanto d: dados + = d d = conexão.recv (1024) 
[color = # a9a9a9] Loop que recebe as informações da API [/ color]

ObservaçãoEste loop pode ser visto feito de uma maneira diferente, com um loop infinito e interrompendo quando recv não retorna mais informações.

Quando terminarmos de receber todos os dados, podemos pintar apenas os dados que nos interessam ou todos, aqui eu retorno todos:

 imprimir (data.decode ('utf-8')) 
A última parte do código não tem nada a ver com a solicitação, é uma verificação de que tudo o que faz é ver se é o arquivo que está sendo executado (em caso afirmativo, a função é lançada) ou se está sendo importado para outro Arquivo Python (a função não seria chamada), são coisas Python que podem ser aprendidas em sua documentação:
 if __name__ == '__main__': locate ('Development Street, Móstoles') 
Deixo-vos uma parte da saída do programa, há mais dados, como latitude e longitude que não são mostrados:

Observação
Esta é uma das maneiras pelas quais as solicitações podem ser feitas. Aqui está um pequeno código de uma maneira de fazer isso no Python 2 usando request e json, mas você pode criar seus próprios programas com essas solicitações.

 solicitações de importação de localizar (endereço): parâmetros = {'endereço': endereço, 'sensor': 'false'} resposta = solicitações.get ('http://maps.googleapis.com/maps/api/geocode/json' , params = parameters) print (response.json ()) if __name__ == '__main__': locate ('Development Street, Móstoles')

E caso você queira fazer o download do código:

geolocalizaçãoPython.zip 833 bytes 220 downloads

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave