Ваша задача — проанализировать данные по погодным условиям, полученные от API Яндекс Погоды.
1. Получите информацию о погодных условиях для указанного списка городов, используя API Яндекс Погоды.
Описание
Список городов находится в переменной CITIES
в файле utils.py. Для взаимодействия с API используйте готовый класс YandexWeatherAPI
в модуле api_client.py
. Пример работы с классом YandexWeatherAPI
описан в примере. Пример ответа от API для анализа находится в файле.
2. Вычислите среднюю температуру и проанализируйте информацию об осадках за указанный период для всех городов.
Описание
Условия и требования:
- период вычислений в течение дня — с 9 до 19 часов;
- средняя температура рассчитывается за указанный промежуток времени;
- сумма времени (часов), когда погода без осадков (без дождя, снега, града или грозы), рассчитывается за указанный промежуток времени;
- информация о температуре для указанного дня за определённый час находится по следующему пути:
forecasts> [день]> hours> temp
; - информация об осадках для указанного дня за определённый час находится по следующему пути:
forecasts> [день]> hours> condition
.
Пример данных с информацией о температуре и осадках за день.
Список вариантов погодных условий находится в таблице в блоке condition
или в файле.
3. Объедините полученные данные и сохраните результат в текстовом файле.
Описание
Формат сохраняемого файла - json, csv или xls/xlsx.
Формат таблицы для сохранения, где рейтинг - позиция города относительно других при анализе "благоприятности поездки" (смотри п4).
Город/день | 14-06 | ... | 19-06 | Среднее | Рейтинг | |
---|---|---|---|---|---|---|
Москва | Температура, среднее | 24 | 27 | 25.6 | 8 | |
Без осадков, часов | 8 | 4 | 6 | |||
Абу-Даби | Температура, среднее | 34 | 37 | 35.5 | 2 | |
Без осадков, часов | 9 | 10 | 9.5 | |||
... |
4. Проанализируйте результат и сделайте вывод, какой из городов наиболее благоприятен для поездки.
Описание
Наиболее благоприятным городом считать тот, в котором средняя температура за всё время была самой высокой, а количество времени без осадков — максимальным. Если таких городов более одного, то выводить все.
- Используйте для решения как процессы, так и потоки.
- Используйте для решения как очередь, так и пул задач.
- Опишите этапы решения в виде отдельных классов в модуле tasks.py:
DataFetchingTask
— получение данных через API;DataCalculationTask
— вычисление погодных параметров;DataAggregationTask
— объединение вычисленных данных;DataAnalyzingTask
— финальный анализ и получение результата.
- Используйте концепции ООП.
- Предусмотрите обработку исключительных ситуаций.
- Логируйте результаты действий.
- Покройте написанный код тестами.
- Используйте аннотацию типов.
- Приведите стиль кода в соответствие pep8, flake8, mypy.
from api_client import YandexWeatherAPI
city_name = "MOSCOW"
ywAPI = YandexWeatherAPI()
resp = ywAPI.get_forecasting(city_name)