From d8acdbeed84bfa254b9c34f7bd90e59c0a5ed22f Mon Sep 17 00:00:00 2001 From: bivashy Date: Fri, 4 Jul 2025 00:39:02 +0500 Subject: [PATCH] Handle current translation based on seasons box --- .../controller/MetadataController.java | 2 +- .../service/KodikHtmlParserService.java | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/backend/extractor/kodik/service/anyame_backend/controller/MetadataController.java b/src/main/java/com/backend/extractor/kodik/service/anyame_backend/controller/MetadataController.java index 8359b0a..3243539 100644 --- a/src/main/java/com/backend/extractor/kodik/service/anyame_backend/controller/MetadataController.java +++ b/src/main/java/com/backend/extractor/kodik/service/anyame_backend/controller/MetadataController.java @@ -63,7 +63,7 @@ public class MetadataController { String url = responseResult.getLink(); return extractService.getMetadata(url); } catch (KodikExtractionException e) { - throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "cannot retrieve metadat", e); + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "cannot retrieve metadata", e); } catch (IOException e) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "i/o error"); } diff --git a/src/main/java/com/backend/extractor/kodik/service/anyame_backend/service/KodikHtmlParserService.java b/src/main/java/com/backend/extractor/kodik/service/anyame_backend/service/KodikHtmlParserService.java index 669863b..c5749ab 100644 --- a/src/main/java/com/backend/extractor/kodik/service/anyame_backend/service/KodikHtmlParserService.java +++ b/src/main/java/com/backend/extractor/kodik/service/anyame_backend/service/KodikHtmlParserService.java @@ -2,6 +2,9 @@ package com.backend.extractor.kodik.service.anyame_backend.service; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -19,6 +22,8 @@ import com.backend.extractor.kodik.service.anyame_backend.service.model.KodikMet */ @Service public class KodikHtmlParserService { + private static final Pattern VIDEO_INFO_TYPE = Pattern.compile("https://kodik\\.info/([^\\s/]+)"); + public KodikMetadata parseMetadata(String html) { Document doc = Jsoup.parse(html); @@ -32,9 +37,9 @@ public class KodikHtmlParserService { private List parseTranslations(Document doc) { List translations = new ArrayList<>(); - Elements options = doc.select(".serial-translations-box select option"); + Elements translationOptions = doc.select(".serial-translations-box select option"); - for (Element option : options) { + for (Element option : translationOptions) { String id = option.attr("value"); String title = option.attr("data-title"); String mediaId = option.attr("data-media-id"); @@ -47,6 +52,20 @@ public class KodikHtmlParserService { mediaType, translationType, episodeCount)); } + Elements seasonOptions = doc.select(".serial-seasons-box select option"); + Elements seriesOptions = doc.select(".serial-series-box select option"); + for (Element option : seasonOptions) { + if (!option.hasAttr("selected")) { + continue; + } + String id = option.attr("value"); + String title = option.attr("data-translation-title"); + String mediaId = option.attr("data-serial-id"); + String mediaHash = option.attr("data-serial-hash"); + String mediaType = findVideoType(doc.html()).orElse("serial"); + translations.add(new KodikTranslation(id, title, mediaId, mediaHash, mediaType, "", seriesOptions.size())); + } + return translations; } @@ -67,6 +86,11 @@ public class KodikHtmlParserService { return episodes; } + private Optional findVideoType(String html) { + Matcher matcher = VIDEO_INFO_TYPE.matcher(html); + return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); + } + private static int parseIntSafely(String value) { try { return Integer.parseInt(value);