Как пройти через данные JSON для определенных элементов в Django - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь преобразовать местоположения в геокод для хранения в списках. Я использую сторонний API, который возвращает JSON после использования местоположения, такого как город / штат или почтовый индекс.

Я бы хотел:

  1. Фильтрация ответов только в Соединенных Штатах (страна возвращается в формате JSON)

  2. Получите данные широты / долготы и сохраните их в модели листинга

services.py

import requests

def get_location(location):
    url = 'https://api.opencagedata.com/geocode/v1/json'
    params = {'q': location, 'key': '***', 'language': 'en', 'pretty': 1}
    r = requests.get(url, params=params)
    locations = r.json()
    return locations

это дает мне ответ, такой как:

{
  "documentation": "https://opencagedata.com/api",
  ...
  "results": [
    {
      ...
      "components": {
        ...
        "_type": "city",
        "city": "Miami",
        ...
        "country": "USA",
        "country_code": "us",
        "state": "Florida",
        "state_code": "FL"
      },
      ...
      "formatted": "Miami, FL, United States of America",
      "geometry": {
        "lat": 25.7742658,
        "lng": -80.1936589
      }
    },
    ...
}

** РЕДАКТИРОВАТЬ **

Мне нужно немного уточнить этот вопрос. На что я уже ответил, вот где я нахожусь:

views.py:

Я получаю строку из формы, отправленной пользователем, которая будет либо городом-государством, либо почтовым индексом. Что я хочу сделать, это запросить API с этой строкой, вернуть единственную переменную, которая будет комбинацией geometry lat & long.

views.py

def post(request):
    user = request.user
    if request.method == 'GET':
        form = postListing()
    elif request.method == 'POST':
        form = postListing(request.POST)
        if form.is_valid():
           ...
           title = form.cleaned_data['title']
           location = ?

           newPost = Listing.objects.create(title=title, location=location...)

С чем я борюсь, это:

  • удаление всех результатов за пределами США
  • получить первый результат уточненных данных
  • объедините geometry lat & geometry long в один элемент для сохранения как location
  • Я хочу сохранить только новый действительный результат в новом сообщении, а не создавать сообщение для каждого действительного результата

1 Ответ

1 голос
/ 14 мая 2019

Как то так?

locations = get_locations(location)
results = locations['result']
for result in results:
    print(result['geometry'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...