Skip to content

Commit cfacdb0

Browse files
committed
add OV in case present in video but not in title
1 parent 58840d1 commit cfacdb0

1 file changed

Lines changed: 66 additions & 63 deletions

File tree

src/main/java/mServer/crawler/sender/ard/json/ArdFilmDeserializer.java

Lines changed: 66 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ private static Optional<String> parseTopic(final JsonObject playerPageObject) {
146146
private Optional<String> parseTitle(final JsonObject playerPageObject) {
147147
Optional<String> title = JsonUtils.getAttributeAsString(playerPageObject, ATTRIBUTE_TITLE);
148148
if (title.isPresent()) {
149-
String[] replaceWords = {" - Hörfassung", " (mit Gebärdensprache)", " mit Gebärdensprache"," (mit Audiodeskription)", "Audiodeskription"};
149+
String[] replaceWords = {" - Hörfassung", " (mit Gebärdensprache)", " mit Gebärdensprache"," (mit Audiodeskription)", "Audiodeskription", " - (Originalversion)", " (OV)"};
150150
String cleanTitle = title.get().trim();
151151
for (String replaceWord : replaceWords) {
152152
cleanTitle = cleanTitle.replace(replaceWord, "");
@@ -224,79 +224,42 @@ public List<ArdFilmDto> deserialize(
224224

225225
final Optional<String> topic = parseTopic(itemObject);
226226
final Optional<String> title = parseTitle(itemObject);
227-
final Optional<String> description
228-
= JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_SYNOPSIS);
227+
final Optional<String> titleoriginal = JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_TITLE);
228+
final Optional<String> description = JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_SYNOPSIS);
229229
final Optional<LocalDateTime> date = parseDate(itemObject);
230230
final Optional<Duration> duration = parseDuration(itemObject);
231231
final Optional<String> partner = parsePartner(itemObject);
232-
final Optional<Map<Qualities, String>> videoInfoStandard = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
233-
final Optional<Map<Qualities, String>> videoInfoAdaptive = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG, MARKER_VIDEO_DE);
234-
final Optional<Map<Qualities, String>> videoInfoAD = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
235-
final Optional<Map<Qualities, String>> videoInfoDGS = parseVideoUrls(itemObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
236-
final Optional<Map<Qualities, String>> videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_OV);
237-
final Optional<String> subtitles = prepareSubtitleUrl(itemObject);
232+
Optional<Map<Qualities, String>> videoInfoStandard = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
233+
Optional<Map<Qualities, String>> videoInfoAdaptive = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG, MARKER_VIDEO_DE);
234+
Optional<Map<Qualities, String>> videoInfoAD = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
235+
Optional<Map<Qualities, String>> videoInfoDGS = parseVideoUrls(itemObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE);
236+
Optional<Map<Qualities, String>> videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_OV);
237+
Optional<String> subtitles = prepareSubtitleUrl(itemObject);
238238

239239
if (topic.isEmpty() || title.isEmpty() || partner.isEmpty() || ADDITIONAL_SENDER.get(partner.get()) == null) {
240240
if (partner.isPresent() && ADDITIONAL_SENDER.get(partner.get()) == null) {
241241
LOG.warn("Missing Partner " + partner.get());
242242
}
243243
return films;
244244
}
245-
246-
247-
248-
if ((title.get().toUpperCase().contains("(OV)") || title.get().toUpperCase().contains("(ORIGINALVERSION)")) && videoInfoOV.isPresent()) {
249-
final ArdFilmDto filmDto
250-
= new ArdFilmDto(
251-
createFilm(
252-
ADDITIONAL_SENDER.get(partner.get()),
253-
topic.get(),
254-
title.get(),
255-
description,
256-
date,
257-
duration,
258-
videoInfoOV.get(),
259-
subtitles));
260-
films.add(filmDto);
261-
return films;
245+
// mainly funk
246+
if (videoInfoStandard.isEmpty() && videoInfoAD.isEmpty() && videoInfoDGS.isEmpty() && videoInfoOV.isEmpty() && videoInfoAdaptive.isPresent()) {
247+
videoInfoStandard = resolveFallbackFromPlaylist(videoInfoAdaptive);
262248
}
263-
264-
if(videoInfoStandard.isEmpty() && videoInfoAD.isEmpty() && videoInfoDGS.isEmpty() && videoInfoAdaptive.isPresent()) {
265-
// UUAAAARRGGGG - SAD
266-
Map<Qualities, URL> qualitiesUrls = videoInfoAdaptive.get().entrySet().stream()
267-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> {
268-
try {
269-
return new URL(entry.getValue());
270-
} catch (MalformedURLException e) {
271-
LOG.error("failed converting string {} to url", entry.getValue(), e);
272-
return null;
273-
}
274-
}));
275-
if (!qualitiesUrls.containsKey(Qualities.NORMAL)) {
276-
qualitiesUrls.put(Qualities.NORMAL, qualitiesUrls.entrySet().stream().findFirst().get().getValue());
277-
}
278-
//
279-
ArdVideoInfoJsonDeserializer.loadM3U8(qualitiesUrls);
280-
//
281-
Map<Qualities, String> fallback = qualitiesUrls.entrySet().stream()
282-
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
283-
284-
if (fallback.size() > 0) {
285-
final ArdFilmDto filmDto
286-
= new ArdFilmDto(
287-
createFilm(
288-
ADDITIONAL_SENDER.get(partner.get()),
289-
topic.get(),
290-
title.get(),
291-
description,
292-
date,
293-
duration,
294-
fallback,
295-
subtitles));
296-
films.add(filmDto);
297-
}
249+
// incorrect langueage code for OV
250+
if ((titleoriginal.get().contains(" - (Originalversion)") || titleoriginal.get().contains(" (OV)")) && videoInfoOV.isEmpty()) {
251+
videoInfoOV = parseVideoUrls(itemObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, "*");
298252
}
299-
253+
// mainly tagesschau
254+
if ((titleoriginal.get().contains(" (mit Gebärdensprache)") || titleoriginal.get().contains(" mit Gebärdensprache")) && videoInfoStandard.isPresent() && videoInfoDGS.isEmpty()) {
255+
videoInfoDGS = videoInfoStandard;
256+
videoInfoStandard = Optional.empty();
257+
}
258+
if ((titleoriginal.get().contains("- Hörfassung") || titleoriginal.get().contains("(mit Audiodeskription)")) && videoInfoStandard.isPresent() && videoInfoAD.isEmpty()) {
259+
videoInfoAD = videoInfoStandard;
260+
videoInfoStandard = Optional.empty();
261+
}
262+
//
300263
if (videoInfoStandard.isPresent() && videoInfoStandard.get().size() > 0) {
301264
// add film standard
302265
final ArdFilmDto filmDto
@@ -316,6 +279,23 @@ public List<ArdFilmDto> deserialize(
316279
films.add(filmDto);
317280
}
318281
//
282+
if (videoInfoOV.isPresent() && videoInfoOV.get().size() > 0) {
283+
Map<Qualities, String> vid = videoInfoOV.get();
284+
final ArdFilmDto filmDto
285+
= new ArdFilmDto(
286+
createFilm(
287+
ADDITIONAL_SENDER.get(partner.get()),
288+
topic.get() + " (Originalversion)",
289+
title.get(),
290+
description,
291+
date,
292+
duration,
293+
vid,
294+
subtitles));
295+
films.add(filmDto);
296+
return films;
297+
}
298+
//
319299
if (videoInfoAD.isPresent() && videoInfoAD.get().size() > 0) {
320300
// add film ad
321301
final ArdFilmDto filmDto
@@ -473,7 +453,8 @@ private Optional<Map<Integer, String>> parseVideoUrlMap(final JsonObject playerP
473453
Optional<String> resh = JsonUtils.getElementValueAsString(video, ATTRIBUTE_RESOLUTION_H);
474454
Optional<String> url = JsonUtils.getElementValueAsString(video, ATTRIBUTE_URL);
475455
Optional<String> languageCode = JsonUtils.getElementValueAsString(audios.get().getAsJsonArray().get(0), ATTRIBUTE_ADUIO_LANG);
476-
if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType) && languageCode.orElse("").equalsIgnoreCase(language)) {
456+
if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType) &&
457+
(languageCode.orElse("").equalsIgnoreCase(language) || (language.equalsIgnoreCase("*") && !languageCode.orElse("").equalsIgnoreCase("deu")))) {
477458
videoInfo.put(Integer.parseInt(resh.get()), UrlUtils.removeParameters(url.get()));
478459
}
479460
}
@@ -486,4 +467,26 @@ private Optional<Map<Integer, String>> parseVideoUrlMap(final JsonObject playerP
486467
}
487468
return Optional.of(videoInfo);
488469
}
470+
471+
private Optional<Map<Qualities, String>> resolveFallbackFromPlaylist(Optional<Map<Qualities, String>> videoInfoAdaptive) {
472+
Map<Qualities, URL> qualitiesUrls = videoInfoAdaptive.get().entrySet().stream()
473+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> {
474+
try {
475+
return new URL(entry.getValue());
476+
} catch (MalformedURLException e) {
477+
LOG.error("failed converting string {} to url", entry.getValue(), e);
478+
return null;
479+
}
480+
}));
481+
if (!qualitiesUrls.containsKey(Qualities.NORMAL)) {
482+
qualitiesUrls.put(Qualities.NORMAL, qualitiesUrls.entrySet().stream().findFirst().get().getValue());
483+
}
484+
//
485+
ArdVideoInfoJsonDeserializer.loadM3U8(qualitiesUrls);
486+
//
487+
Map<Qualities, String> fallback = qualitiesUrls.entrySet().stream()
488+
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
489+
490+
return Optional.of(fallback);
491+
}
489492
}

0 commit comments

Comments
 (0)