Как я могу вызвать API из проекта Microsoft Flask / Python [дубликат]

Я полагаю, вы могли бы (используя базовые манипуляции с строкой) генерировать строку запроса в PreparedStatement, чтобы количество ? соответствовало количеству элементов в вашем списке.

Конечно, если вы делаете это, вы всего лишь шаг от создания гигантского прикованного OR в своем запросе, но без правильного количества ? в строке запроса, я не вижу, как вы можете обойти это.

107
задан approxiblue 8 October 2015 в 15:42
поделиться

5 ответов

Я рекомендую использовать awesome библиотеку запросов :

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

Содержимое ответа JSON: http://docs.python-requests.org/en/latest / пользователь / Quickstart / # JSON-ответ-контент

197
ответ дан P-S 15 August 2018 в 21:36
поделиться
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))
18
ответ дан clyfish 15 August 2018 в 21:36
поделиться
  • 1
    Спасибо за вашу помощь, однако следует отметить следующее: Функция urllib.urlopen () была удалена в Python 3.0 в пользу urllib2.urlopen (). – Arun 17 June 2011 в 15:00
  • 2
    Арун, да, но он больше не называется urllib2 – Corey Goldberg 17 June 2011 в 16:09
  • 3
    Это urllib.request в Python 3. – nyuszika7h 10 June 2014 в 21:55
  • 4
    Это не работает. json.loads дает 'TypeError: объект JSON должен быть str, а не' HTTPResponse '', а json.load дает 'TypeError: объект JSON должен быть str, а не' bytes '' – M Hornbacher 23 December 2015 в 18:46

requests имеет встроенный метод .json()

import requests
requests.get(url).json()
25
ответ дан JamesThomasMoon1979 15 August 2018 в 21:36
поделиться
  • 1
    Если вам нужно быть совместимым с запросами 0.x (Debian wheezy), вы должны использовать json.load() или json.loads() вместо этого, как в 0.x, json - свойство, а не функция. – nyuszika7h 9 December 2013 в 16:56
  • 2
    @nyuszika Если вы используете debian, если возможно, используйте pip для получения более новых библиотек python. Вы не хотите кодировать старые библиотеки python, если нет важной причины использовать то, что debian имеет в apt-репозиториях. – SHernandez 10 June 2014 в 13:46
  • 3
    @SHernandez Это допустимая точка, но некоторые пакеты могут зависеть от пакета python-requests (или python3-requests), поэтому вам нужно будет установить где-то еще, чем /usr/local, чтобы не нарушать эти пакеты. С другой стороны, когда мобильность / совместимость тривиальна, на мой взгляд, она того стоит. – nyuszika7h 10 June 2014 в 21:53
  • 4
    Как извлечь только определенную пару имя-значение из json-ответа «r»? – SleepyLord 17 January 2015 в 17:37
  • 5
    В r.json() (из моего ответа) у вас есть реальный ответ, JSON-декодированный. Вы можете получить к нему доступ, как обычный list / dict; print r.json(), чтобы посмотреть, как это выглядит. Или обратитесь к документам API службы, для которой вы сделали запрос. – linkyndy 17 January 2015 в 19:16

Используйте библиотеку запросов, довольно распечатывайте результаты, чтобы лучше находить ключи / значения, которые вы хотите извлечь, а затем используйте вложенные для циклов для анализа данных. В этом примере я выхожу шаг за шагом.

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 15 August 2018 в 21:36
поделиться
  • 1
    Майкл, как я могу понять это, как только я получу данные? Как отобразить его в «классическом»? json визуальный формат (например, тот, который вы получаете в своем браузере)? Вот что я получаю в своем терминале: [link] s13.postimg.org/3r55jajk7/terminal.png – Alex Starbuck 16 February 2016 в 10:16
  • 2
    @AlexStarbuck import pprint затем - & gt; pprint.pprint(step['html_instructions']) – Michael 16 February 2016 в 15:20

Попробуйте следующее:

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))
1
ответ дан Raghav Gupta 15 August 2018 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: