Я извлекаю данные в формате JSON из https://openweathermap.org/ для отображения на веб-сайте django. JSON показан ниже, но мне кажется, что я не могу его прочитать и вставить в словарь. Я вызываю это, используя правильный ключ API, который читается по городу. При попытке доступа к серверу я получаю KeyError со значением исключения «main» в коде views.py. Main - это атрибут JSON, который меня смущает.
JSON
{"coord": { "lon": 139,"lat": 35},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01n"
}
],
"base": "stations",
"main": {
"temp": 281.52,
"feels_like": 278.99,
"temp_min": 280.15,
"temp_max": 283.71,
"pressure": 1016,
"humidity": 93
},
"wind": {
"speed": 0.47,
"deg": 107.538
},
"clouds": {
"all": 2
},
"dt": 1560350192,
"sys": {
"type": 3,
"id": 2019346,
"message": 0.0065,
"country": "JP",
"sunrise": 1560281377,
"sunset": 1560333478
},
"timezone": 32400,
"id": 1851632,
"name": "Shuzenji",
"cod": 200
}
views.py
from django.shortcuts import render
import requests
from .models import City
from .forms import CityForm
def index(request):
cities = City.objects.all()
url = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=imperial&appid=a8e8641ead06969636aaca4a66e2f90e'
if request.method == 'POST': # only true if form is submitted
form = CityForm(request.POST) # add actual request data to form for processing
form.save() # will validate and save if validate
form = CityForm()
weather_data = []
for city in cities:
city_weather = requests.get(url.format(city)).json() #request the API data and convert the JSON to Python data types
weather = {
'city' : city,
'temperature' : city_weather['main']['temp'],
'description' : city_weather['weather'][0]['description'],
'icon' : city_weather['weather'][0]['icon']
}
weather_data.append(weather) #add the data for the current city into our list
context = {'weather_data' : weather_data, 'form' : form}
return render(request, 'weather/index.html', context) #returns the index.html template