Я пытаюсь преобразовать местоположения в геокод для хранения в списках. Я использую сторонний API, который возвращает JSON после использования местоположения, такого как город / штат или почтовый индекс.
Я бы хотел:
Фильтрация ответов только в Соединенных Штатах (страна возвращается в формате JSON)
Получите данные широты / долготы и сохраните их в модели листинга
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
- Я хочу сохранить только новый действительный результат в новом сообщении, а не создавать сообщение для каждого действительного результата