X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Frhynodge%2Fwebpages%2Fweather%2Fwettercom%2FWetterComFilter.kt;h=9f253343d34e8596af3f64422259d17ef51399a7;hb=e016992e3fc3123213871f772419284bea7401b1;hp=04f38faceac8dcb5c9b8f3178c15b3f58d568a5a;hpb=d4fe0c7f56a77104924bf50cbfeb6775cd12dc25;p=rhynodge.git diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/wettercom/WetterComFilter.kt b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/wettercom/WetterComFilter.kt index 04f38fa..9f25334 100644 --- a/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/wettercom/WetterComFilter.kt +++ b/src/main/kotlin/net/pterodactylus/rhynodge/webpages/weather/wettercom/WetterComFilter.kt @@ -4,6 +4,10 @@ import net.pterodactylus.rhynodge.Filter import net.pterodactylus.rhynodge.State import net.pterodactylus.rhynodge.states.FailedState import net.pterodactylus.rhynodge.states.HtmlState +import net.pterodactylus.rhynodge.webpages.weather.HourState +import net.pterodactylus.rhynodge.webpages.weather.WeatherState +import net.pterodactylus.rhynodge.webpages.weather.WindDirection +import net.pterodactylus.rhynodge.webpages.weather.toWindDirection import org.jsoup.nodes.Document import org.jsoup.nodes.Element import java.time.LocalDateTime @@ -33,8 +37,8 @@ class WetterComFilter : Filter { private fun parseWetterComState(state: HtmlState): State { val dateTime = parseDateTime(state.document()) ?: return FailedState(IllegalArgumentException("no date present")) - val wetterComState = WetterComState(dateTime) - parseHourStates(state.document()).forEach { wetterComState.addHour(it) } + val wetterComState = WeatherState("wetter.com", dateTime) + parseHourStates(state.document()).forEach { wetterComState += it } return wetterComState } @@ -51,37 +55,38 @@ class WetterComFilter : Filter { } private fun parseHourState(index: Int, hourElement: Element): HourState { - return HourState.atHour(index) - .temperature(parseTemperature(hourElement)) - .rainProbability(parseRainProbability(hourElement)) - .rainAmount(parseRainAmount(hourElement)) - .windFrom(parseWindDirection(hourElement)) - .at(parseWindSpeed(hourElement)) - .describedAs(parseDescription(hourElement)) - .withImage(parseImageUrl(hourElement)) - .build() + return HourState( + hourIndex = index, + temperature = hourElement.temperature, + rainProbability = hourElement.rainProbability, + rainAmount = hourElement.rainAmount, + windDirection = hourElement.windDirection, + windSpeed = hourElement.windSpeed, + description = hourElement.description, + image = hourElement.imageUrl + ) } - private fun parseTemperature(hourElement: Element) = - hourElement.extractText(".weather-strip__2 .item-weathericon .palm-hide").filter { (it >= '0') and (it <= '9') }.toDouble() + private val Element.temperature: Int + get() = extractText(".weather-strip__2 .item-weathericon .palm-hide").filter { (it >= '0') and (it <= '9') }.toInt() - private fun parseRainProbability(hourElement: Element) = - hourElement.extractText(".weather-strip__3 .text--left:eq(0) .flag__body span:eq(0)").filter { (it >= '0') and (it <= '9') }.toDouble() / 100.0 + private val Element.rainProbability: Double + get() = extractText(".weather-strip__3 .text--left:eq(0) .flag__body span:eq(0)").filter { (it >= '0') and (it <= '9') }.toDouble() / 100.0 - private fun parseRainAmount(hourElement: Element) = - hourElement.extractText(".weather-strip__3 .text--left:eq(0) .flag__body span:eq(1)").trim().split(" ").getOrNull(1)?.toDouble() ?: 0.0 + private val Element.rainAmount: Double + get() = extractText(".weather-strip__3 .text--left:eq(0) .flag__body span:eq(1)").trim().split(" ").getOrNull(1)?.toDouble() ?: 0.0 - private fun parseWindDirection(hourElement: Element) = - hourElement.extractText(".weather-strip__3 .text--left:eq(1) .flag__body span:eq(0)").trim().split(",")[0].toWindDirection() + private val Element.windDirection: WindDirection + get() = extractText(".weather-strip__3 .text--left:eq(1) .flag__body span:eq(0)").trim().split(",")[0].toWindDirection() - private fun parseWindSpeed(hourElement: Element) = - hourElement.extractText(".weather-strip__3 .text--left:eq(1) .flag__body span:eq(0)").split(Regex("[, ]+"))[1].toDouble() + private val Element.windSpeed: Int + get() = extractText(".weather-strip__3 .text--left:eq(1) .flag__body span:eq(0)").split(Regex("[, ]+"))[1].toInt() - private fun parseDescription(hourElement: Element) = - hourElement.extractText(".weather-strip__1 .vhs-text--small") + private val Element.description: String + get() = extractText(".weather-strip__1 .vhs-text--small") - private fun parseImageUrl(hourElement: Element) = - hourElement.select(".weather-strip__2 img").firstOrNull()?.attr("src") ?: "" + private val Element.imageUrl: String + get() = select(".weather-strip__2 img").firstOrNull()?.attr("src") ?: "" private fun Element.extractText(selector: String) = select(selector).firstOrNull()?.text() ?: ""