web-dev-qa-db-fra.com

Requêtes HTTP et analyse JSON dans Python

Je souhaite interroger dynamiquement Google Maps via l'API Google Directions. À titre d'exemple, cette demande calcule l'itinéraire entre Chicago, IL et 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 retourne un résultat au format JSON .

Comment puis-je faire cela en Python? Je souhaite envoyer une telle demande, recevoir le résultat et l’analyser.

165
Arun

Je recommande d'utiliser la bibliothèque géniale demandes :

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: http://docs.python-requests.org/en/latest/user/quickstart/#json-response-content

290
zeekay

Le module requests Python se charge à la fois de récupérer les données JSON et de les décoder, en raison de 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 n’est donc pas utile de recourir à un module distinct pour le décodage JSON.

126
linkyndy

requests a la méthode intégrée .json()

import requests
requests.get(url).json()
32
maow
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))
23
clyfish

Utilisez la bibliothèque de requêtes, imprimez les résultats pour pouvoir mieux localiser les clés/valeurs que vous souhaitez extraire, puis utilisez des boucles for imbriquées pour analyser les données. Dans l'exemple, j'extrais pas à pas des indications routières.

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']
12
Michael

Essaye ça:

import requests
import json

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

# Request data from link as 'str'
data = requests.get(link).text

# convert 'str' to Json
data = json.loads(data)

# Now you can access Json 
for i in data['routes'][0]['legs'][0]['steps']:
    lattitude = i['start_location']['lat']
    longitude = i['start_location']['lng']
    print('{}, {}'.format(lattitude, longitude))
5
Raghav Gupta