300 votes

Demandes HTTP et analyse syntaxique JSON en Python

Je souhaite interroger Google Maps de manière dynamique via l'API Google Directions. À titre d'exemple, cette requête calcule l'itinéraire de Chicago, IL à Los Angeles, CA via deux points de passage à Joplin, MO et Oklahoma City, OK :

http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false

Il renvoie un résultat au format JSON .

Comment puis-je faire cela en Python ? Je veux envoyer une telle requête, recevoir le résultat et l'analyser.

496voto

zeekay Points 22640

Je recommande d'utiliser le génial demande bibliothèque :

import requests

url = 'http://maps.googleapis.com/maps/api/directions/json'

params = dict(
    origin='Chicago,IL',
    destination='Los+Angeles,CA',
    waypoints='Joplin,MO|Oklahoma+City,OK',
    sensor='false'
)

resp = requests.get(url=url, params=params)
data = resp.json() # Check the JSON Response Content documentation below

Contenu de la réponse JSON : https://requests.readthedocs.io/en/master/user/quickstart/#json-response-content

170voto

Andrei Horak Points 2681

Le site requests Le module Python se charge à la fois de récupérer les données JSON et de les décoder, grâce à son décodeur JSON intégré. Voici un exemple tiré de la documentation du module :

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

Il est donc inutile d'utiliser un module distinct pour décoder JSON.

32voto

clyfish Points 3128
import urllib
import json

url = 'http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false'
result = json.load(urllib.urlopen(url))

21voto

Michael Points 167

Utilisez la bibliothèque requests, imprimez les résultats de manière à mieux localiser les clés/valeurs que vous voulez extraire, puis utilisez des boucles for imbriquées pour analyser les données. Dans l'exemple, j'extrais les instructions de conduite étape par étape.

import json, requests, pprint

url = 'http://maps.googleapis.com/maps/api/directions/json?'

params = dict(
    origin='Chicago,IL',
    destination='Los+Angeles,CA',
    waypoints='Joplin,MO|Oklahoma+City,OK',
    sensor='false'
)

data = requests.get(url=url, params=params)
binary = data.content
output = json.loads(binary)

# test to see if the request was valid
#print output['status']

# output all of the results
#pprint.pprint(output)

# step-by-step directions
for route in output['routes']:
        for leg in route['legs']:
            for step in leg['steps']:
                print step['html_instructions']

13voto

mamal Points 815

Juste import requests et l'utilisation de json() méthode :

source = requests.get("url").json()
print(source)

OU vous pouvez utiliser ce :

import json,urllib.request
data = urllib.request.urlopen("url").read()
output = json.loads(data)
print (output)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X