Comment faire des requêtes à l'API Google avec Python

Table des matières

Aujourd'hui je vais enseigner comment faire des demandes à l'API Google pour obtenir des informations à partir d'une certaine adresse, la chose la plus intéressante à propos du tutoriel est d'apprendre comment faire une requête à une API, avec Python, c'est assez simple et intuitif. Nous allons d'abord voir le code complet, puis j'explique ses parties :

 #! / usr / bin / env python3 import socket de 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\Connexion : close\r\n\r\n\"""def localiser (adresse) : 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) tandis que d: data + = dd = connection.recv (1024) print (data.decode ('utf-8')) if __name__ == '__main__': localiser ('Development Street, Móstoles')
Il faut importer la librairie socket pour établir la connexion, et la fonction quote_plus qui appartient à urllib.parse, son utilisation est vue plus loin.
 importer le socket depuis urllib.parse importer quote_plus 
Au début on va créer une variable où on va créer l'entête de la requête à l'API :
 header = "" "\ GET/maps/api/geocode/json? address={} & sensor=false HTTP/1.1\r\n\Hôte : maps.google.com : 80\r\n\User-Agent : \r\n\Connexion : fermer\r\n\r\n\""" 
Dans la première ligne, vous verrez {} après adresse =, c'est comme ça pour pouvoir passer la rue sur laquelle on veut des informations.

Cet en-tête a

  • Type de demande : GET
  • La ressource de la requête : /maps/api/geocode/json?Adresse = {} & sensor = false
  • Le type de HTTP que nous utilisons : HTTP 1.1
  • L'hôte où la demande sera faite (inclut le port) : maps.google.com:80
  • L'agent utilisateur qui n'est rien de plus que le navigateur à partir duquel c'est fait (laissez-le vide, dans ce cas ce n'est pas important)
  • Le type de connexion : close. En d'autres termes, après la demande, elle sera fermée.

Nous avons une fonction appelée pour localiser, qui reçoit un paramètre, ce sera l'adresse sur laquelle nous voulons des informations. Nous allons expliquer la fonction étape par étape :

Dans les 2 premières lignes nous créons la socket et la connectons à l'adresse souhaitée (notez que la fonction socket connect reçoit un tuple, un seul argument).

 connection = socket.socket () connection.connect (('maps.google.com', 80)) 
La troisième ligne de code sert à combler le vide {} de l'en-tête avec l'adresse qui est passée à la fonction (notez quote_plus, elle est utilisée ici).
 headerAux = header.format (quote_plus (adresse))
Sur la ligne suivante la demande est envoyéeNotez que nous utilisons la fonction encode, ce que nous faisons est d'envoyer les données encodées en utf-8, si nous ne le faisions pas, vous obtiendrez une erreur comme vous le verrez dans l'image suivante :
 connection.sendall (headerAux.encode ('utf-8'))

La prochaine partie du code créer une variable de type octet, cela nous aidera à collecter les données qui nous parviennent d'Internet si vous ne recevez pas une erreur comme celle-ci :

 données = b ''

Maintenant, ce que nous faisons est une boucle où nous recevons les informations de la réponse de Google, et nous le stockons dans la variable data, la fonction recv est celle qui renvoie les données (le paramètre qu'elle reçoit est la quantité maximale de données que la fonction retournera). La boucle continue jusqu'à ce que plus aucune donnée ne soit renvoyée, ce qui quittera le moment.

 d = connection.recv (1024) tandis que d: data + = d d = connection.recv (1024) 
[color = # a9a9a9] Boucle qui reçoit les informations de l'API [/ color]

NoterCette boucle pourrait être vue d'une manière différente, avec une boucle infinie et une rupture lorsque recv ne renvoie pas plus d'informations.

Lorsque nous avons fini de recevoir toutes les données, nous ne pouvons peindre que les données qui nous intéressent ou toutes, ici je renvoie toutes :

 print (data.decode ('utf-8')) 
La dernière partie du code n'a rien à voir avec la requête, c'est une vérification qu'elle ne fait que voir si c'est le fichier qui est en cours d'exécution (si c'est le cas, la fonction est lancée) ou s'il est en train d'être importé dans un autre Python (la fonction ne serait pas appelée), ce sont des trucs Python qui peuvent être appris à partir de sa documentation :
 if __name__ == '__main__': localiser ('Development Street, Móstoles') 
Je vous laisse une partie de la sortie du programme, il y a plus de données, comme la latitude et la longitude qui ne sont pas affichées :

Noter
C'est l'une des façons dont les demandes peuvent être faites, voici un code court d'une façon de le faire en Python 2 en utilisant request et json, mais vous pouvez créer vos propres programmes avec ces demandes.

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

Et au cas où vous voudriez télécharger le code :

géolocalisationPython.zip 833 octets 220 téléchargements

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave