document.select("body script#flebbe-state")
.dataNodes().joinToString("").unescape()
.let(objectMapper::readTree)
- .get("G./api/v1/de/config?").get("body").asText()
+ .get("G./api/v1/en/config?").get("body").asText()
.let(objectMapper::readTree)
.get("movie_list")
.map { it.extractMovie() }
.replace("&l;", "<")
.replace("&g;", ">")
- private fun JsonNode.extractMovie() = Movie(get("name").asText()).apply {
+ private fun JsonNode.extractMovie() =
this@extractMovie.get("performances")
.map { performance ->
val begin = LocalDateTime.parse(performance.get("begin").asText(), dateFormat)
val slug = performance.get("slug").asText()
val link = "https://savoy.premiumkino.de/vorstellung/${slug}/${String.format("%tY%<tm%<td", begin)}/${String.format("%tH%<tM", begin)}/${performance.get("crypt_id").asText()}"
- TicketLink(begin, link)
+ Performance(begin, performance.get("release_type").asText(), link)
}
- .forEach(this::addTicketLink)
- }
+ .let { Movie(get("name").asText(), get("poster").get("original").asText().fixImageUrl(), get("description_long").asText(), it) }
}
private val objectMapper = ObjectMapper()
private val dateFormat = DateTimeFormatter.ISO_LOCAL_DATE_TIME
+
+private fun String.fixImageUrl() = replace(Regex("^/files"), "https://cdn.premiumkino.de")