Android библиотека получения прогноза от сервиса rusmeteo.net, kotlin, maven
1. Описание
Для удобства получения прогноза и использования в своих приложениях для android была написана библиотека rusmeteoWeather, она позволяет получать от сервиса rusmeteo.net прогноз погоды:
Прогноз на 10 дней
Почасовой прогноз на сутки
К сожалению сервис rusmeteo.net не предоставляет данные в JSON формате, только формат XML.
2. Подключение
Библиотека выложена в Maven Central Repository для общего пользования, и легко добавляется в свой проект:
Добавьте зависимость в AndroidManifest.xml для доступа к интернету
<uses-permission android:name="android.permission.INTERNET" />
Добавьте зависимости в build.gradle проекта:
repositories {
mavenCentral()
}
dependencies {
implementation "ru.avicorp:rusmeteolibrary:1.0.0"
}
3. Использование
val rusmeteoWeather = RusmeteoWeather()//получение экземпляра
//Формат запроса по своему местоположению уточните на rusmeteo.net, определение по координатам отсутствует,
// вероятно это добавят в будущем, в примере (Сергиев Посад)
//запрос почасового прогноза
rusmeteoWeather.rusForecastClockData = rusmeteoWeather.loadClockForecastData("https://rusmeteo.net/weather/sergiev-posad/hourly/")
//запрос прогноза на 10 дней
rusmeteoWeather.rusForecastDayData = rusmeteoWeather.loadDayForecastData("https://rusmeteo.net/weather/sergiev-posad/10days/")
4. Получение прогноза
Библиотека выдает данные в списках List (rusForecastClockData, rusForecastDayData)
//Проверка на получение данных и вывод почасового прогноза
if (rusmeteoWeather.checkValidClockData()) {
rusmeteoWeather.rusForecastClockData.forEachIndexed { i, _ ->
with(rusmeteoWeather.rusForecastClockData[i]) {
Log.e(
"Forecast clock",
"clock ${dateClock}" +
",weather ${weatherName}" +
", current temp ${tempNightDay}°C" +
", precipitation ${precipPercent}%" +
", humidity ${humidityPercent}%" +
", wind ${windSpeed}m/s" +
", wind direction ${windDirection}" +
", pressure ${pressureData} mm "
)
}
}
}
//Проверка на получения данных и вывод 10-ти дневного прогноза
if (rusmeteoWeather.checkValidDayData()) {
rusmeteoWeather.rusForecastDayData.forEachIndexed { i, _ ->
with(rusmeteoWeather.rusForecastDayData[i]) {
Log.e(
"Forecast days",
"day of the week ${weekDay}" +
", month ${dateMonth}" +
", daytime temp ${tempDay}°C" +
", night temp ${tempNight}°C" +
", weather ${weatherName}" +
", precipitation ${precipPercent}%" +
", wind ${windSpeed}m/s" +
", night temp ${temperatureNight}°C" +
", morning temp ${temperatureMorning}°C" +
", daytime temp ${temperatureDay}°C" +
", evening temp ${temperatureEvening}°C"
)
}
}
}
При ошибке получения данных списки придут пустыми.
Реализация в моем проекте smartHome (recyclerView)