3 Commits

3 changed files with 13 additions and 7 deletions

View File

@ -14,7 +14,8 @@ public class CacheConfig {
"kodikIDPlayerLink", "kodikIDPlayerLink",
"shikimoriIDPlayerLink", "shikimoriIDPlayerLink",
"kinopoiskIDPlayerLink", "kinopoiskIDPlayerLink",
"imdbIDPlayerLink"); "imdbIDPlayerLink",
"kodikPage");
} }
} }

View File

@ -40,8 +40,10 @@ public class KodikHtmlParserService {
private List<KodikTranslation> parseTranslations(Document doc) { private List<KodikTranslation> parseTranslations(Document doc) {
List<KodikTranslation> translations = new ArrayList<>(); List<KodikTranslation> translations = new ArrayList<>();
String videoType = findVideoType(doc.html()).orElse("serial"); String possibleMediaType = findVideoType(doc.html()).orElse("serial");
Elements translationOptions = doc.select(".serial-translations-box select option"); boolean isMovie = possibleMediaType.equals("video");
String videoType = isMovie ? "movie" : possibleMediaType;
Elements translationOptions = doc.select(String.format(".%s-translations-box select option", videoType));
for (Element option : translationOptions) { for (Element option : translationOptions) {
String id = option.attr("value"); String id = option.attr("value");
@ -50,14 +52,14 @@ public class KodikHtmlParserService {
String mediaHash = option.attr("data-media-hash"); String mediaHash = option.attr("data-media-hash");
String mediaType = option.attr("data-media-type"); String mediaType = option.attr("data-media-type");
String translationType = option.attr("data-translation-type"); String translationType = option.attr("data-translation-type");
int episodeCount = parseIntSafely(option.attr("data-episode-count")); int episodeCount = isMovie ? 1 : parseIntSafely(option.attr("data-episode-count"));
translations.add(new KodikTranslation(id, title, mediaId, mediaHash, translations.add(new KodikTranslation(id, title, mediaId, mediaHash,
mediaType, translationType, episodeCount)); mediaType, translationType, episodeCount));
} }
Elements seasonOptions = doc.select(".serial-seasons-box select option"); Elements seasonOptions = doc.select(String.format(".%s-seasons-box select option", videoType));
Elements seriesOptions = doc.select(".serial-series-box select option"); Elements seriesOptions = doc.select(String.format(".%s-series-box select option", videoType));
if (translations.isEmpty()) { if (translations.isEmpty()) {
for (Element option : seasonOptions) { for (Element option : seasonOptions) {
if (!option.hasAttr("selected")) { if (!option.hasAttr("selected")) {
@ -69,7 +71,8 @@ public class KodikHtmlParserService {
String mediaHash = option.attr("data-serial-hash"); String mediaHash = option.attr("data-serial-hash");
translations translations
.add(new KodikTranslation(id, title, mediaId, mediaHash, videoType, "", seriesOptions.size())); .add(new KodikTranslation(id, title, mediaId, mediaHash, possibleMediaType, "",
seriesOptions.size()));
} }
} }

View File

@ -4,6 +4,7 @@ import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.backend.extractor.kodik.service.anyame_backend.api.model.KodikVideoLinks; import com.backend.extractor.kodik.service.anyame_backend.api.model.KodikVideoLinks;
@ -28,6 +29,7 @@ public class KodikNetworkService {
this.objectMapper = objectMapper; this.objectMapper = objectMapper;
} }
@Cacheable("kodikPage")
public String fetchPage(String url) throws IOException { public String fetchPage(String url) throws IOException {
Request request = new Request.Builder() Request request = new Request.Builder()
.url(normalizeUrl(url)) .url(normalizeUrl(url))