diff --git a/src/main/java/de/mediathekview/mserver/crawler/ard/ArdConstants.java b/src/main/java/de/mediathekview/mserver/crawler/ard/ArdConstants.java index 8381fec75..50dd2ebb2 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/ard/ArdConstants.java +++ b/src/main/java/de/mediathekview/mserver/crawler/ard/ArdConstants.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import de.mediathekview.mlib.daten.Resolution; import de.mediathekview.mlib.daten.Sender; public class ArdConstants { @@ -67,6 +68,17 @@ public class ArdConstants { public static final String WEBSITE_URL = "https://www.ardmediathek.de/video/%s"; public static final String BASE_URL_SUBTITLES = "https://classic.ardmediathek.de"; + + // provide the same as master until crawler release + public static Resolution getResolutionFromWidth(final int width) { + if (width > 1280) { + return Resolution.HD; + } else if (width > 640) { + return Resolution.NORMAL; + } else { + return Resolution.SMALL; + } + } private ArdConstants() {} } diff --git a/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdFilmDeserializer.java b/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdFilmDeserializer.java index e5861ad28..fab65d561 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdFilmDeserializer.java +++ b/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdFilmDeserializer.java @@ -7,6 +7,7 @@ import de.mediathekview.mlib.daten.Sender; import de.mediathekview.mserver.base.utils.GeoLocationGuesser; import de.mediathekview.mserver.base.utils.JsonUtils; +import de.mediathekview.mserver.base.utils.UrlUtils; import de.mediathekview.mserver.crawler.ard.ArdConstants; import de.mediathekview.mserver.crawler.ard.ArdFilmDto; import de.mediathekview.mserver.crawler.ard.ArdFilmInfoDto; @@ -57,13 +58,16 @@ public class ArdFilmDeserializer implements JsonDeserializer> { private static final String ATTRIBUTE_RESOLUTION_H = "maxHResolutionPx"; private static final String ATTRIBUTE_MIME = "mimeType"; private static final String ATTRIBUTE_KIND = "kind"; + private static final String ATTRIBUTE_ADUIO_LANG = "languageCode"; private static final String MARKER_VIDEO_MP4 = "video/mp4"; private static final String MARKER_VIDEO_STANDARD = "standard"; private static final String MARKER_VIDEO_CATEGORY_MAIN = "main"; private static final String MARKER_VIDEO_CATEGORY_MPEG = "application/vnd.apple.mpegurl"; private static final String MARKER_VIDEO_AD = "audio-description"; - private static final String MARKER_VIDEO_DGS = "sign-language"; + private static final String MARKER_VIDEO_DGS = "sign-language"; + private static final String MARKER_VIDEO_OV = "OV"; + private static final String MARKER_VIDEO_DE = "deu"; private final ArdVideoInfoJsonDeserializer videoDeserializer; private final AbstractCrawler crawler; @@ -292,7 +296,6 @@ private Film createFilm( duration == null ? Duration.ofSeconds(0) : duration); Optional.ofNullable(description).ifPresent(film::setBeschreibung); - film.setGeoLocations(GeoLocationGuesser.getGeoLocations(Sender.ARD, videoInfo.getDefaultVideoUrl())); @@ -354,12 +357,19 @@ private void addDGSUrls(final Film film, final Map videoUrls private Optional parseVideos(final JsonObject playerPageObject, final String title) { ArdVideoInfoDto allVideoUrls = new ArdVideoInfoDto(); // - final Optional> videoInfoStandard = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4); - final Optional> videoInfoAdaptive = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG); - final Optional> videoInfoAD = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4); - final Optional> videoInfoDGS = parseVideoUrls(playerPageObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4); + final Optional> videoInfoStandard = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE); + final Optional> videoInfoAdaptive = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_CATEGORY_MPEG, MARKER_VIDEO_DE); + final Optional> videoInfoAD = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_AD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE); + final Optional> videoInfoDGS = parseVideoUrls(playerPageObject, MARKER_VIDEO_DGS, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_DE); + final Optional> videoInfoOV = parseVideoUrls(playerPageObject, MARKER_VIDEO_CATEGORY_MAIN, MARKER_VIDEO_STANDARD, MARKER_VIDEO_MP4, MARKER_VIDEO_OV); final Optional> subtitles = prepareSubtitleUrl(playerPageObject); // + // OV is a single film but also included in the standard film + if ((title.toUpperCase().contains("(OV)") || title.toUpperCase().contains("(ORIGINALVERSION)")) && videoInfoOV.isPresent()) { + allVideoUrls.putAll(videoInfoOV.get()); + return Optional.of(allVideoUrls); + } + // if (subtitles.isPresent()) { allVideoUrls.setSubtitleUrl(subtitles); } @@ -385,8 +395,30 @@ private Optional parseVideos(final JsonObject playerPageObject, } return Optional.of(allVideoUrls); } + + private Optional> parseVideoUrls(final JsonObject playerPageObject, String streamType, String aduioType, String mimeType, String language) { + Optional> urls = parseVideoUrlMap(playerPageObject, streamType, aduioType, mimeType, language); + if (urls.isEmpty()) { + return Optional.empty(); + } + Map videoInfo = new EnumMap<>(Resolution.class); + for (Map.Entry entry : urls.get().entrySet()) { + Resolution resolution = ArdConstants.getResolutionFromWidth(entry.getKey()); + if(!videoInfo.containsKey(resolution)) { + videoInfo.put(resolution, entry.getValue()); + } + } + // issue if we do not have normal res + // TODO: FIXME + if (!videoInfo.containsKey(Resolution.NORMAL)) { + Resolution anyResolution = videoInfo.keySet().stream().findFirst().get(); + videoInfo.put(Resolution.NORMAL, videoInfo.get(anyResolution)); + videoInfo.remove(anyResolution); + } + return Optional.of(videoInfo); + } - private Optional> parseVideoUrls(final JsonObject playerPageObject, String streamType, String aduioType, String mimeType) { + private Optional> parseVideoUrlMap(final JsonObject playerPageObject, String streamType, String aduioType, String mimeType, String language) { final Optional mediaCollectionObject = getMediaCollectionObject(playerPageObject); if (mediaCollectionObject.isEmpty()) return Optional.empty(); @@ -394,7 +426,7 @@ private Optional> parseVideoUrls(final JsonObject player if (streams.isEmpty() || !streams.get().isJsonArray() || (streams.get().getAsJsonArray().size() == 0)) return Optional.empty(); // - Map videoInfo = new EnumMap<>(Resolution.class); + Map videoInfo = new TreeMap<>(Comparator.reverseOrder()); for (JsonElement streamsCategory : streams.get().getAsJsonArray()) { final Optional streamKind = JsonUtils.getElementValueAsString(streamsCategory, ATTRIBUTE_KIND); final Optional media = JsonUtils.getElement(streamsCategory, ELEMENT_MEDIA); @@ -409,9 +441,9 @@ private Optional> parseVideoUrls(final JsonObject player Optional kind = JsonUtils.getElementValueAsString(audios.get().getAsJsonArray().get(0), ATTRIBUTE_KIND); Optional resh = JsonUtils.getElementValueAsString(video, ATTRIBUTE_RESOLUTION_H); Optional url = JsonUtils.getElementValueAsString(video, ATTRIBUTE_URL); - if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType)) { - Resolution resolution = Resolution.getResolutionFromWidth(Integer.parseInt(resh.get())); - videoInfo.put(resolution, url.get()); + Optional languageCode = JsonUtils.getElementValueAsString(audios.get().getAsJsonArray().get(0), ATTRIBUTE_ADUIO_LANG); + if (url.isPresent() && resh.isPresent() && kind.isPresent() && kind.get().equalsIgnoreCase(aduioType) && languageCode.orElse("").equalsIgnoreCase(language)) { + videoInfo.put(Integer.parseInt(resh.get()), UrlUtils.removeParameters(url.get())); } } } @@ -421,12 +453,6 @@ private Optional> parseVideoUrls(final JsonObject player if (videoInfo.size() == 0) { return Optional.empty(); } - // TODO: FIX ME - if (!videoInfo.containsKey(Resolution.NORMAL)) { - Resolution r = videoInfo.keySet().stream().findFirst().get(); - videoInfo.put(Resolution.NORMAL, videoInfo.get(r)); - videoInfo.remove(r); - } return Optional.of(videoInfo); } } diff --git a/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdMediaArrayToDownloadUrlsConverter.java b/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdMediaArrayToDownloadUrlsConverter.java index d7bd39ad1..70710a283 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdMediaArrayToDownloadUrlsConverter.java +++ b/src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdMediaArrayToDownloadUrlsConverter.java @@ -145,7 +145,8 @@ private static Resolution getQualityForNumber(final int qualityIndicator) { case 1 -> Resolution.SMALL; case 3, 4 -> Resolution.HD; case 5 -> Resolution.UHD; - case 2, default -> Resolution.NORMAL; + case 2 -> Resolution.NORMAL; + default -> Resolution.NORMAL; }; } diff --git a/src/main/java/de/mediathekview/mserver/crawler/funk/tasks/NexxCloudSessionInitiationTask.java b/src/main/java/de/mediathekview/mserver/crawler/funk/tasks/NexxCloudSessionInitiationTask.java index 95fb98511..236a63e50 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/funk/tasks/NexxCloudSessionInitiationTask.java +++ b/src/main/java/de/mediathekview/mserver/crawler/funk/tasks/NexxCloudSessionInitiationTask.java @@ -37,24 +37,22 @@ public NexxCloudSessionInitiationTask(final AbstractCrawler aCrawler) { public Long call() { final Gson gson = createGson(); - try(final Client client = createClient()) { - final WebTarget target = - client.target(FunkUrls.NEXX_CLOUD_SESSION_INIT.getAsString(crawler.getRuntimeConfig())); + final Client client = createClient(); + final WebTarget target = + client.target(FunkUrls.NEXX_CLOUD_SESSION_INIT.getAsString(crawler.getRuntimeConfig())); - final MultivaluedHashMap formData = createForm(); + final MultivaluedHashMap formData = createForm(); - try(final Response response = target.request().post(Entity.form(formData))) - { - if (response.getStatus() == 201) { - final String jsonOutput = response.readEntity(String.class); - return gson.fromJson(jsonOutput, Long.class); - } else { - crawler.printErrorMessage(); - LOG.fatal( - "A HTTP error {} occurred when initialising the Nexx cloud session.", - response.getStatus()); - } - } + final Response response = target.request().post(Entity.form(formData)); + + if (response.getStatus() == 201) { + final String jsonOutput = response.readEntity(String.class); + return gson.fromJson(jsonOutput, Long.class); + } else { + crawler.printErrorMessage(); + LOG.fatal( + "A HTTP error {} occurred when initialising the Nexx cloud session.", + response.getStatus()); } return null; } diff --git a/src/main/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializer.java b/src/main/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializer.java index 291db4128..bfabf95e2 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializer.java +++ b/src/main/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializer.java @@ -303,6 +303,9 @@ private Optional formatEpisodeTitle(Optional season, Optional data() { /*date*/ LocalDateTime.parse("2024-01-28T20:15"), /*duration*/ Duration.parse("PT1H28M33S"), /*small*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430813_sendeton_640x360-50p-1200kbit.mp4", - /*normal*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430813_sendeton_960x540-50p-1600kbit.mp4", - /*hd*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430813_sendeton_1280x720-50p-3200kbit.mp4", + /*normal*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430813_sendeton_1280x720-50p-3200kbit.mp4", + /*hd*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430813_sendeton_1920x1080-50p-5000kbit.mp4", /*ADsmall*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430814_internationalerton_640x360-50p-1200kbit.mp4", - /*ADnormal*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430814_internationalerton_960x540-50p-1600kbit.mp4", - /*ADhd*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430814_internationalerton_1280x720-50p-3200kbit.mp4", + /*ADnormal*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430814_internationalerton_1280x720-50p-3200kbit.mp4", + /*ADhd*/ "https://pd-videos.daserste.de/int/2024/01/18/3322bac1-6935-4101-8e41-380d70eff67e/JOB_430814_internationalerton_1920x1080-50p-5000kbit.mp4", /*DGSsmall*/ "https://pd-videos.daserste.de/int/2024/01/24/03247ab1-4dcc-427e-b577-a6ca25c1dffe/JOB_432151_sendeton_640x360-50p-1200kbit.mp4", - /*DGSnormal*/ "https://pd-videos.daserste.de/int/2024/01/24/03247ab1-4dcc-427e-b577-a6ca25c1dffe/JOB_432151_sendeton_960x540-50p-1600kbit.mp4", - /*DGShd*/ "https://pd-videos.daserste.de/int/2024/01/24/03247ab1-4dcc-427e-b577-a6ca25c1dffe/JOB_432151_sendeton_1280x720-50p-3200kbit.mp4", + /*DGSnormal*/ "https://pd-videos.daserste.de/int/2024/01/24/03247ab1-4dcc-427e-b577-a6ca25c1dffe/JOB_432151_sendeton_1280x720-50p-3200kbit.mp4", + /*DGShd*/ "https://pd-videos.daserste.de/int/2024/01/24/03247ab1-4dcc-427e-b577-a6ca25c1dffe/JOB_432151_sendeton_1920x1080-50p-5000kbit.mp4", /*sub*/ "https://api.ardmediathek.de/player-service/subtitle/webvtt/urn:ard:subtitle:7b0043ec0b358eb8.vtt", /*hd*/ GeoLocations.GEO_NONE, /*related*/ new ArdFilmInfoDto[] { @@ -156,8 +156,8 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-05-01T15:00"), /*duration*/ Duration.parse("PT20M47S"), /*small*/ "https://cdn-storage.br.de/MUJIuUOVBwQIbtCCBLzGiLC1uwQoNA4p_29S/_-OS/_2Ff5y4f9K1S/19712f56-684f-4bba-95aa-ae5a6331d67b_E.mp4", - /*normal*/ "https://cdn-storage.br.de/MUJIuUOVBwQIbtCCBLzGiLC1uwQoNA4p_29S/_-OS/_2Ff5y4f9K1S/19712f56-684f-4bba-95aa-ae5a6331d67b_C.mp4", - /*hd*/ "https://cdn-storage.br.de/MUJIuUOVBwQIbtCCBLzGiLC1uwQoNA4p_29S/_-OS/_2Ff5y4f9K1S/19712f56-684f-4bba-95aa-ae5a6331d67b_X.mp4", + /*normal*/ "https://cdn-storage.br.de/MUJIuUOVBwQIbtCCBLzGiLC1uwQoNA4p_29S/_-OS/_2Ff5y4f9K1S/19712f56-684f-4bba-95aa-ae5a6331d67b_X.mp4", + /*hd*/ "https://cdn-storage.br.de/MUJIuUOVBwQIbtCCBLzGiLC1uwQoNA4p_29S/_-OS/_2Ff5y4f9K1S/19712f56-684f-4bba-95aa-ae5a6331d67b_HD.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", @@ -182,8 +182,8 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-05-01T11:10"), /*duration*/ Duration.parse("PT5M6S"), /*small*/ "https://media.tagesschau.de/video/2024/0501/TV-20240501-1117-3700.webm.h264.mp4", - /*normal*/ "https://media.tagesschau.de/video/2024/0501/TV-20240501-1117-3700.webl.h264.mp4", - /*hd*/ "https://media.tagesschau.de/video/2024/0501/TV-20240501-1117-3700.webxl.h264.mp4", + /*normal*/ "https://media.tagesschau.de/video/2024/0501/TV-20240501-1117-3700.webxl.h264.mp4", + /*hd*/ "https://media.tagesschau.de/video/2024/0501/TV-20240501-1117-3700.webxxl.h264.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", @@ -208,8 +208,8 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-04-30T16:00"), /*duration*/ Duration.parse("PT46M"), /*small*/ "https://hrardmediathek-a.akamaihd.net/odinson/hallo-hessen/SVID-BC6574CF-5A5A-4D00-B8D3-44D241F14519/ebe1419f-59b2-47de-a430-74bde4fb25df/L489595_sendeton_640x360-50p-1200kbit.mp4", - /*normal*/ "https://hrardmediathek-a.akamaihd.net/odinson/hallo-hessen/SVID-BC6574CF-5A5A-4D00-B8D3-44D241F14519/ebe1419f-59b2-47de-a430-74bde4fb25df/L489595_sendeton_960x540-50p-1600kbit.mp4", - /*hd*/ "https://hrardmediathek-a.akamaihd.net/odinson/hallo-hessen/SVID-BC6574CF-5A5A-4D00-B8D3-44D241F14519/ebe1419f-59b2-47de-a430-74bde4fb25df/L489595_sendeton_1280x720-50p-3200kbit.mp4", + /*normal*/ "https://hrardmediathek-a.akamaihd.net/odinson/hallo-hessen/SVID-BC6574CF-5A5A-4D00-B8D3-44D241F14519/ebe1419f-59b2-47de-a430-74bde4fb25df/L489595_sendeton_1280x720-50p-3200kbit.mp4", + /*hd*/ "https://hrardmediathek-a.akamaihd.net/odinson/hallo-hessen/SVID-BC6574CF-5A5A-4D00-B8D3-44D241F14519/ebe1419f-59b2-47de-a430-74bde4fb25df/L489595_sendeton_1920x1080-50p-5000kbit.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", @@ -229,8 +229,8 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-04-30T14:00"), /*duration*/ Duration.parse("PT10M19S"), /*small*/ "https://mediandr-a.akamaihd.net/progressive/2024/0430/TV-20240430-1400-3611.ln.mp4", - /*normal*/ "https://mediandr-a.akamaihd.net/progressive/2024/0430/TV-20240430-1400-3611.hq.mp4", - /*hd*/ "https://mediandr-a.akamaihd.net/progressive/2024/0430/TV-20240430-1400-3611.hd.mp4", + /*normal*/ "https://mediandr-a.akamaihd.net/progressive/2024/0430/TV-20240430-1400-3611.hd.mp4", + /*hd*/ "https://mediandr-a.akamaihd.net/progressive/2024/0430/TV-20240430-1400-3611.1080.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", @@ -250,15 +250,15 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-05-01T04:15"), /*duration*/ Duration.parse("PT46M4S"), /*small*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3106351/3106351_57089636.mp4", - /*normal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3106351/3106351_57089637.mp4", - /*hd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3106351/3106351_57089638.mp4", + /*normal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3106351/3106351_57089638.mp4", + /*hd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3106351/3106351_57089634.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", /*DGSsmall */ "", /*DGSnormal */ "", /*DGShd */ "", - /*sub*/ "https://api.ardmediathek.de/player-service/subtitle/webvtt/urn:ard:subtitle:0567b031db73e4b9.vtt", + /*sub*/ "", /*hd*/ GeoLocations.GEO_DE, /*related*/ new ArdFilmInfoDto[0], /*sender*/ Optional.of(Sender.ONE), @@ -271,8 +271,8 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-04-30T22:15"), /*duration*/ Duration.parse("PT1H43M15S"), /*small*/ "https://rbbmediapmdp-a.akamaihd.net/content/dd/f9/ddf9c4f0-2da1-45b9-812f-873f213ccbd5/eb2ed184-078d-11ef-b0da-02420a000df3_hd1080-avc360.mp4", - /*normal*/ "https://rbbmediapmdp-a.akamaihd.net/content/dd/f9/ddf9c4f0-2da1-45b9-812f-873f213ccbd5/eb2ed184-078d-11ef-b0da-02420a000df3_hd1080-avc540.mp4", - /*hd*/ "https://rbbmediapmdp-a.akamaihd.net/content/dd/f9/ddf9c4f0-2da1-45b9-812f-873f213ccbd5/eb2ed184-078d-11ef-b0da-02420a000df3_hd1080-avc720.mp4", + /*normal*/ "https://rbbmediapmdp-a.akamaihd.net/content/dd/f9/ddf9c4f0-2da1-45b9-812f-873f213ccbd5/eb2ed184-078d-11ef-b0da-02420a000df3_hd1080-avc720.mp4", + /*hd*/ "https://rbbmediapmdp-a.akamaihd.net/content/dd/f9/ddf9c4f0-2da1-45b9-812f-873f213ccbd5/eb2ed184-078d-11ef-b0da-02420a000df3_hd1080-avc1080.mp4", /*ADsmall*/ "", /*ADnormal*/ "", /*ADhd*/ "", @@ -292,11 +292,11 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-04-30T20:15"), /*duration*/ Duration.parse("PT47M20S"), /*small*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_56955169.mp4", - /*normal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_56955170.mp4", - /*hd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_56955171.mp4", + /*normal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_56955171.mp4", + /*hd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_56955167.mp4", /*ADsmall*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_57101825.mp4", - /*ADnormal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_57101826.mp4", - /*ADhd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_57101827.mp4", + /*ADnormal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_57101827.mp4", + /*ADhd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/weltweit/fsk12/310/3101569/3101569_57101823.mp4", /*DGSsmall */ "", /*DGSnormal */ "", /*DGShd */ "", @@ -313,11 +313,11 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-05-01T13:20"), /*duration*/ Duration.parse("PT29M31S"), /*small*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/a/FCMS-a66d00f7-05d6-4280-8dbe-9c81a47c8667-41dd60577440_a6.mp4", - /*normal*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/a/FCMS-a66d00f7-05d6-4280-8dbe-9c81a47c8667-730aae549c28_a6.mp4", - /*hd*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/a/FCMS-a66d00f7-05d6-4280-8dbe-9c81a47c8667-be7c2950aac6_a6.mp4", + /*normal*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/a/FCMS-a66d00f7-05d6-4280-8dbe-9c81a47c8667-be7c2950aac6_a6.mp4", + /*hd*/ "", /*ADsmall*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/2/FCMS-25d93e81-d91a-40f7-92a7-90b28b675943-41dd60577440_25.mp4", - /*ADnormal*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/2/FCMS-25d93e81-d91a-40f7-92a7-90b28b675943-730aae549c28_25.mp4", - /*ADhd*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/2/FCMS-25d93e81-d91a-40f7-92a7-90b28b675943-be7c2950aac6_25.mp4", + /*ADnormal*/ "https://odgeomdr-a.akamaihd.net/mp4dyn2/2/FCMS-25d93e81-d91a-40f7-92a7-90b28b675943-be7c2950aac6_25.mp4", + /*ADhd*/ "", /*DGSsmall */ "", /*DGSnormal */ "", /*DGShd */ "", @@ -334,11 +334,11 @@ public static Collection data() { /*date*/ LocalDateTime.parse("2024-05-01T14:15"), /*duration*/ Duration.parse("PT43M55S"), /*small*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.ml.mp4", - /*normal*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.l.mp4", - /*hd*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.xl.mp4", + /*normal*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.xl.mp4", + /*hd*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.xxl.mp4", /*ADsmall*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.audio_description.ml.mp4", - /*ADnormal*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.audio_description.l.mp4", - /*ADhd*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.audio_description.xl.mp4", + /*ADnormal*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.audio_description.xl.mp4", + /*ADhd*/ "https://pdodswr-a.akamaihd.net/swrfernsehen/geo/de/traumziele/2029736.audio_description.xxl.mp4", /*DGSsmall */ "", /*DGSnormal */ "", /*DGShd */ "", @@ -346,6 +346,48 @@ public static Collection data() { /*hd*/ GeoLocations.GEO_DE, /*related*/ new ArdFilmInfoDto[0], /*sender*/ Optional.of(Sender.SWR), + }, + { + /*jsonFile*/ "/ard/ard_item_ignore_OV.json", + /*topic*/ "You shall not lie - Tödliche Geheimnisse", + /*title*/ "Folge 4: Der Verrat (S01/E04)", + /*description*/ "Zwischen Macarena und Iván, der jetzt von ihrer Schwangerschaft weiß, kommt es zu einer dramatischen Auseinandersetzung auf See. Erschöpft schwimmt der 18-Jährige an Land und beschuldigt sie, ihn vom Boot gestoßen zu haben. Die Lehrerin muss nun nicht nur die Folgen ihres Seitensprungs fürchten, sondern auch eine Anzeige wegen versuchten Totschlags. +++ Sechsteilige Thrillerserie, Spanien 2021\n.....", + /*date*/ LocalDateTime.parse("2022-10-15T02:50"), + /*duration*/ Duration.parse("PT42M18S"), + /*small*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_640x360-50p-1200kbit.mp4", + /*normal*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_1280x720-50p-3200kbit.mp4", + /*hd*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_1920x1080-50p-5000kbit.mp4", + /*ADsmall*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_640x360-50p-1200kbit.mp4", + /*ADnormal*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_1280x720-50p-3200kbit.mp4", + /*ADhd*/ "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_1920x1080-50p-5000kbit.mp4", + /*DGSsmall */ "", + /*DGSnormal */ "", + /*DGShd */ "", + /*sub*/ "https://api.ardmediathek.de/player-service/subtitle/webvtt/urn:ard:subtitle:efab8bf55007171e.vtt", + /*hd*/ GeoLocations.GEO_DE, + /*related*/ new ArdFilmInfoDto[0], + /*sender*/ Optional.of(Sender.ARD), + }, + { + /*jsonFile*/ "/ard/ard_item_OV.json", + /*topic*/ "Murdoch Mysteries", + /*title*/ "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + /*description*/ "Während sich Dr. Ogden auf ihre Hochzeit vorbereitet, muss Murdoch versuchen, den 'Küssenden Banditen' aufzuhalten, einen umstrittenen Bankräuber, der schnell zum Volkshelden aufsteigt.", + /*date*/ LocalDateTime.parse("2024-04-24T22:50"), + /*duration*/ Duration.parse("PT45M44S"), + /*small*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016296.mp4", + /*normal*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016298.mp4", + /*hd*/ "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016294.mp4", + /*ADsmall*/ "", + /*ADnormal*/ "", + /*ADhd*/ "", + /*DGSsmall */ "", + /*DGSnormal */ "", + /*DGShd */ "", + /*sub*/ "", + /*hd*/ GeoLocations.GEO_DE, + /*related*/ new ArdFilmInfoDto[0], + /*sender*/ Optional.of(Sender.ONE), } }); } diff --git a/src/test/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializerTest.java b/src/test/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializerTest.java index 472e07e29..2585d1c21 100644 --- a/src/test/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializerTest.java +++ b/src/test/java/de/mediathekview/mserver/crawler/zdf/json/ZdfFilmDetailDeserializerTest.java @@ -162,7 +162,7 @@ public static Collection data() { "/zdf/zdf_film_details_with_episodes.json", Sender.ZDF, "The Rookie", - "Der Prozess (S05E01)", + "Der Prozess (S05/E01)", LocalDateTime.of(2024, 4, 11, 20, 15, 0), Duration.ofMinutes(41).plusSeconds(6), "Officer John Nolan sieht sich wieder mit der Serienmörderin Rosalind Dyer konfrontiert. Vor Beginn der Gerichtsverhandlung gelingt ihr die Flucht und sie muss erneut gefasst werden.", diff --git a/src/test/resources/ard/ard_item_OV.json b/src/test/resources/ard/ard_item_OV.json new file mode 100644 index 000000000..a6e737fc1 --- /dev/null +++ b/src/test/resources/ard/ard_item_OV.json @@ -0,0 +1,405 @@ +{ + "coreAssetType": "EXTRA_BONUS_CONTENT", + "fskRating": "FSK12", + "id": "player_ondemand-page-ard", + "isChildContent": false, + "personalized": false, + "links": { + "self": { + "id": "player_ondemand-page-ard", + "urlId": "player_ondemand-page-ard", + "title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "href": "https://api.ardmediathek.de/page-gateway/pages/ard/item/Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi?embedded=true&mcV6=true", + "type": "application/vnd.ard.page+json", + "partner": "ard" + } + }, + "title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "tracking": { + "aggregationLevelId": 38, + "atiCustomVars": { + "clipTitle": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "mediaType": "video", + "lra": "ONE", + "channel": "ONE", + "show": "Murdoch Mysteries", + "contentTypes": "UT", + "mediaDistributionType": 1, + "contentId": 13320735, + "metadataId": "crid://wdr.de/Beitrag-sophora-ce0801f3-6223-4de2-87b3-61522db2d65b", + "clipLength": 2744 + }, + "chapter2": "Player", + "chapter3": "Murdoch Mysteries", + "environmentId": 511893, + "pageTitle": "Mediathek/Player/Murdoch Mysteries/Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)/13320735/20240424_2050", + "szmType": "CP" + }, + "trackingPiano": { + "page_chapter1": "Player", + "page_content_id": "urn:ard:publication:0c1dc4d2e066396c", + "page_content_title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "page_id": "player_ondemand-page-ard", + "page_institution": "ONE", + "page_institution_id": "urn:ard:institution:9edd94d68de90140", + "page_publisher": "ONE", + "page_publisher_id": "urn:ard:publisher:892e3c758ca56a9d", + "page_show": "Murdoch Mysteries", + "page_show_id": "urn:ard:show:85088a146d3740b7", + "page_title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "site": "634408" + }, + "widgets": [ + { + "availableTo": "2024-05-24T20:50:00Z", + "binaryFeatures": [ + "OV", + "UT" + ], + "blockedByFsk": false, + "broadcastedOn": "2024-04-24T20:50:00Z", + "embeddable": false, + "geoblocked": false, + "id": "Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi", + "image": { + "alt": "Detective Murdoch (Yannick Bisson) und Constable Crabtree (Jonny Harris)", + "producerName": "WDR", + "src": "https://api.ardmediathek.de/image-service/images/urn:ard:image:2a3352f634c1614c?w={width}&ch=ec0aa7bc7271383a", + "title": "Murdoch Mysteries (S04/E12) - OV" + }, + "isChildContent": false, + "maturityContentRating": "FSK12", + "mediaCollection": { + "embedded": { + "isGeoBlocked": true, + "meta": { + "availableToDateTime": "2024-05-24T20:50:00Z", + "broadcastedOnDateTime": "2024-04-24T20:50:00Z", + "clipSourceName": "ONE", + "durationSeconds": 2744, + "images": [ + { + "alt": "Detective Murdoch (Yannick Bisson) und Constable Crabtree (Jonny Harris)", + "aspectRatio": "16x9", + "imageSourceName": "WDR", + "kind": "preview", + "title": "Murdoch Mysteries (S04/E12) - OV", + "url": "https://api.ardmediathek.de/image-service/images/urn:ard:image:2a3352f634c1614c?w=960&ch=ec0aa7bc7271383a" + } + ], + "maturityContentRating": { + "age": 12, + "isBlocked": false, + "kind": "other" + }, + "publicationService": { + "id": "ard", + "name": "ONE", + "partner": "one" + }, + "synopsis": "Während sich Dr. Ogden auf ihre Hochzeit vorbereitet, muss Murdoch versuchen, den 'Küssenden Banditen' aufzuhalten, einen umstrittenen Bankräuber, der schnell zum Volkshelden aufsteigt.", + "title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)" + }, + "pluginData": { + "recommendation@all": { + "isAutoplay": true, + "timerSeconds": 10, + "url": "https://api.ardmediathek.de/page-gateway/compilations/ard/recommendations?contextItemId=Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi" + }, + "trackingAgf@all": { + "appId": "PA02DC09C-B8D3-4098-87D2-2C023682D6D5", + "clipData": { + "assetid": "13320735", + "length": "2744", + "nol_c0": "p0,0", + "nol_c10": "p10,ONE", + "nol_c12": "p12,Content", + "nol_c15": "p15,POC_2002987622", + "nol_c16": "p16,", + "nol_c18": "p18,N", + "nol_c19": "p19,ONE", + "nol_c2": "p2,N", + "nol_c5": "p5,ARD Mediathek", + "nol_c7": "p7,crid://wdr.de/Beitrag-sophora-ce0801f3-6223-4de2-87b3-61522db2d65b", + "nol_c8": "p8,2744", + "nol_c9": "p9,Murdoch Mysteries_Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)_24.04.2024 20:50", + "program": "Murdoch Mysteries", + "title": "ONE_Murdoch Mysteries_Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)_24.04.2024 20:50", + "type": "content" + }, + "tracker": "AGF" + }, + "trackingAti@all": { + "config": { + "site": 511893 + }, + "isEnabled": true, + "richMedia": { + "broadcastMode": "clip", + "duration": "2744", + "mediaLabel": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)__13320735__OV | UT", + "mediaLevel2": "{richMediaLevelTwo}", + "mediaTheme1": "ONE", + "mediaTheme2": "ONE", + "mediaTheme3": "Murdoch Mysteries", + "mediaType": "video", + "playerId": "urn:ard:publication:0c1dc4d2e066396c", + "refreshDuration": { + "0": 5, + "1": 12, + "12": 15, + "18": 30 + } + }, + "tracker": "ATI" + }, + "trackingPiano@all": { + "avContent": { + "av_broadcasting_type": "OnDemand", + "av_content": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "av_content_duration": 2744000, + "av_content_id": "urn:ard:publication:0c1dc4d2e066396c", + "av_content_type": "video", + "av_institution": "ONE", + "av_institution_id": "urn:ard:institution:9edd94d68de90140", + "av_publisher": "ONE", + "av_publisher_id": "urn:ard:publisher:892e3c758ca56a9d", + "av_show": "Murdoch Mysteries", + "av_show_id": "urn:ard:show:85088a146d3740b7" + }, + "config": { + "events": [ + "av.error", + "av.speed", + "av.quality", + "av.jumpmark", + "av.share", + "av.playermode", + "av.subtitle", + "av.language", + "av.audiodescription", + "av.signlanguage", + "av.volume.mute", + "av.recommendation" + ], + "site": 634408 + }, + "isEnabled": true + } + }, + "streams": [ + { + "kind": "main", + "kindName": "Normal", + "media": [ + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "SD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 640, + "maxVResolutionPx": 360, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016296.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "SD 480p", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 960, + "maxVResolutionPx": 540, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016297.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "Full HD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016294.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "Auto", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "application/vnd.apple.mpegurl", + "subtitles": [], + "url": "https://wdradaptiv-vh.akamaihd.net/i/medp/ondemand/de/fsk12/310/3103788/,3103788_57016296,3103788_57016297,3103788_57016295,3103788_57016298,3103788_57016294,.mp4.csmil/master.m3u8", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "HD Ready", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1280, + "maxVResolutionPx": 720, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk12/310/3103788/3103788_57016298.mp4", + "videoCodec": "H.264" + } + ], + "videoLanguageCode": "" + } + ], + "subtitles": [ + { + "kind": "normal", + "languageCode": "deu", + "sources": [ + { + "kind": "ebutt", + "url": "https://api.ardmediathek.de/player-service/subtitle/ebutt/urn:ard:subtitle:d0e38dd26e6cc85e" + }, + { + "kind": "webvtt", + "url": "https://api.ardmediathek.de/player-service/subtitle/webvtt/urn:ard:subtitle:d0e38dd26e6cc85e.vtt" + } + ] + } + ] + }, + "href": "https://api.ardmediathek.de/page-gateway/mediacollectionv6/Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi?isTv=false" + }, + "pagination": null, + "personalized": false, + "playerConfig": null, + "publicationService": { + "name": "ONE", + "logo": { + "title": "Logo ONE", + "alt": "Logo ONE", + "producerName": "Logo ONE", + "src": "https://api.ardmediathek.de/image-service/image-collections/urn:ard:image-collection:2213972a8d101de1/16x9?w={width}", + "aspectRatio": "16x9" + }, + "publisherType": "TV", + "partner": "one", + "id": "b3JnYW5pemF0aW9uX09ORQ", + "coreId": "urn:ard:publisher:892e3c758ca56a9d" + }, + "links": { + "self": { + "id": "player_on_demand_widget_ard", + "urlId": "player_on_demand_widget_ard", + "title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "href": "https://api.ardmediathek.de/page-gateway/widgets/ard/editorials/player_on_demand_widget_ard/item/Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi?pageNumber=0&pageSize=100&embedded=true&mcV6=true", + "type": "application/vnd.ard.widget+json", + "partner": "ard" + } + }, + "show": { + "id": "Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw", + "title": "Murdoch Mysteries", + "image": { + "alt": "Sendungslogo \"Murdoch Mysteries\"", + "producerName": "Shaftesbury Murdoch II Inc", + "src": "https://api.ardmediathek.de/image-service/images/urn:ard:image:559937f982bde0f5?w={width}&ch=dc9ee6ab714f2b88", + "title": "Murdoch Mysteries" + }, + "availableSeasons": [ + "1", + "4" + ], + "binaryFeatures": [ + "UT", + "OV" + ], + "coreAssetType": "SEASON_SERIES" + }, + "synopsis": "Während sich Dr. Ogden auf ihre Hochzeit vorbereitet, muss Murdoch versuchen, den 'Küssenden Banditen' aufzuhalten, einen umstrittenen Bankräuber, der schnell zum Volkshelden aufsteigt.", + "title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "trackingPiano": { + "teaser_recommended": false, + "widget_id": "player_on_demand_widget_ard", + "widget_title": "Folge 12: Der küssende Bandit (S04/E12) - (Originalversion)", + "widget_typ": "player_ondemand" + }, + "type": "player_ondemand" + }, + { + "aZContent": false, + "compilationType": "itemsOfShow", + "id": "Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw", + "isChildContent": false, + "pagination": { + "pageNumber": 0, + "pageSize": 24, + "totalElements": 7 + }, + "personalized": false, + "links": { + "self": { + "id": "Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw", + "urlId": "Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw", + "title": "Murdoch Mysteries", + "href": "https://api.ardmediathek.de/page-gateway/widgets/ard/asset/Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw?excludedAssetIds=Y3JpZDovL3dkci5kZS9CZWl0cmFnLXNvcGhvcmEtY2UwODAxZjMtNjIyMy00ZGUyLTg3YjMtNjE1MjJkYjJkNjVi&pageNumber=0&pageSize=24&embedded=true&seasoned=false&seasonNumber=&withAudiodescription=false&withOriginalWithSubtitle=false&withOriginalversion=false&single=false", + "type": "application/vnd.ard.widget+json", + "partner": "ard" + } + }, + "size": "m", + "swipeable": true, + "teasers": [], + "title": "Murdoch Mysteries", + "titleVisible": true, + "trackingPiano": { + "teaser_recommended": false, + "widget_id": "Y3JpZDovL3dkci5kZTdvbmUvbXVyZG9jaG15c3Rlcmllcw", + "widget_title": "Murdoch Mysteries", + "widget_typ": "gridlist" + }, + "type": "gridlist", + "userVisibility": "ALWAYS" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ard/ard_item_ignore_OV.json b/src/test/resources/ard/ard_item_ignore_OV.json new file mode 100644 index 000000000..c78c8f884 --- /dev/null +++ b/src/test/resources/ard/ard_item_ignore_OV.json @@ -0,0 +1,597 @@ +{ + "coreAssetType": "EPISODE", + "fskRating": "FSK12", + "id": "player_ondemand-page-ard", + "isChildContent": false, + "personalized": false, + "links": { + "self": { + "id": "player_ondemand-page-ard", + "urlId": "player_ondemand-page-ard", + "title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "href": "https://api.ardmediathek.de/page-gateway/pages/ard/item/Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWi9hdWRpb2Rlc2tyaXB0aW9u?embedded=true&mcV6=true", + "type": "application/vnd.ard.page+json", + "partner": "ard" + } + }, + "title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "tracking": { + "aggregationLevelId": 38, + "atiCustomVars": { + "clipTitle": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "mediaType": "video", + "lra": "Das Erste", + "channel": "Das Erste", + "show": "You shall not lie - Tödliche Geheimnisse", + "contentTypes": "AD | UT", + "mediaDistributionType": 1, + "contentId": 12011611, + "metadataId": "crid://daserste.de/you shall not lie/2022-10-15_02-50-MESZ/audiodeskription", + "clipLength": 2538 + }, + "chapter2": "Player", + "chapter3": "You shall not lie - Tödliche Geheimnisse", + "environmentId": 511893, + "pageTitle": "Mediathek/Player/You shall not lie - Tödliche Geheimnisse/Folge 4: Der Verrat (S01/E04) - Hörfassung/12011611/20221015_0050", + "szmType": "CP" + }, + "trackingPiano": { + "page_chapter1": "Player", + "page_content_id": "urn:ard:publication:1b16c22aa3c33a86", + "page_content_title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "page_id": "player_ondemand-page-ard", + "page_institution": "Das Erste", + "page_institution_id": "urn:ard:institution:59ccb6ea77d75af5", + "page_publisher": "Das Erste", + "page_publisher_id": "urn:ard:publisher:a42e4291cd9eaf0b", + "page_show": "You shall not lie - Tödliche Geheimnisse", + "page_show_id": "urn:ard:show:b30f5c64ef884984", + "page_title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "site": "634408" + }, + "widgets": [ + { + "availableTo": "2024-06-06T23:45:00Z", + "binaryFeatures": [ + "AD", + "UT", + "OV" + ], + "blockedByFsk": false, + "broadcastedOn": "2022-10-15T00:50:00Z", + "embeddable": false, + "geoblocked": false, + "id": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWi9hdWRpb2Rlc2tyaXB0aW9u", + "image": { + "alt": "Sergio (Juan Diego Botto, re.) unterstützt seine Schwester Macarena (Irene Arcos, li.)", + "producerName": "ARD Degeto / Beta Film/Moviestar/filmax/Arca Audiovisual", + "src": "https://api.ardmediathek.de/image-service/images/urn:ard:image:c323b99dadd1c023?w={width}&ch=5b882f70124a20a8", + "title": "Sergio (Juan Diego Botto, re.) unterstützt seine Schwester Macarena (Irene Arcos, li.)" + }, + "isChildContent": false, + "maturityContentRating": "FSK12", + "mediaCollection": { + "embedded": { + "isGeoBlocked": true, + "meta": { + "availableToDateTime": "2024-06-06T23:45:00Z", + "broadcastedOnDateTime": "2022-10-15T00:50:00Z", + "clipSourceName": "deg", + "durationSeconds": 2538, + "images": [ + { + "alt": "Sergio (Juan Diego Botto, re.) unterstützt seine Schwester Macarena (Irene Arcos, li.)", + "aspectRatio": "16x9", + "imageSourceName": "ARD Degeto / Beta Film/Moviestar/filmax/Arca Audiovisual", + "kind": "preview", + "title": "Sergio (Juan Diego Botto, re.) unterstützt seine Schwester Macarena (Irene Arcos, li.)", + "url": "https://api.ardmediathek.de/image-service/images/urn:ard:image:c323b99dadd1c023?w=960&ch=5b882f70124a20a8" + } + ], + "maturityContentRating": { + "age": 12, + "isBlocked": false, + "kind": "other" + }, + "publicationService": { + "id": "ard", + "name": "Das Erste", + "partner": "daserste" + }, + "seriesTitle": "You shall not lie - Tödliche Geheimnisse", + "synopsis": "Zwischen Macarena und Iván, der jetzt von ihrer Schwangerschaft weiß, kommt es zu einer dramatischen Auseinandersetzung auf See. Erschöpft schwimmt der 18-Jährige an Land und beschuldigt sie, ihn vom Boot gestoßen zu haben. Die Lehrerin muss nun nicht nur die Folgen ihres Seitensprungs fürchten, sondern auch eine Anzeige wegen versuchten Totschlags. +++\r\n\r\nSechsteilige Thrillerserie, Spanien 2021 | Mit Irene Arcos, Lucas Nabor, Natalia Verbeke u.a. | Regie: Pau Freixas\r\n", + "title": "Folge 4: Der Verrat" + }, + "pluginData": { + "recommendation@all": { + "isAutoplay": true, + "timerSeconds": 10, + "url": "https://api.ardmediathek.de/page-gateway/compilations/ard/recommendations?contextItemId=Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWg" + }, + "trackingAgf@all": { + "appId": "PA02DC09C-B8D3-4098-87D2-2C023682D6D5", + "clipData": { + "assetid": "12011611", + "length": "2538", + "nol_c0": "p0,0", + "nol_c10": "p10,Das Erste", + "nol_c12": "p12,Content", + "nol_c15": "p15,X004971589", + "nol_c16": "p16,", + "nol_c18": "p18,N", + "nol_c19": "p19,deg", + "nol_c2": "p2,N", + "nol_c5": "p5,ARD Mediathek", + "nol_c7": "p7,crid://daserste.de/you shall not lie/2022-10-15_02-50-MESZ", + "nol_c8": "p8,2538", + "nol_c9": "p9,You shall not lie - Tödliche Geheimnisse_Folge 4: Der Verrat_15.10.2022 00:50", + "program": "You shall not lie - Tödliche Geheimnisse", + "title": "Das Erste_You shall not lie - Tödliche Geheimnisse_Folge 4: Der Verrat_15.10.2022 00:50", + "type": "content" + }, + "tracker": "AGF" + }, + "trackingAti@all": { + "config": { + "site": 511893 + }, + "isEnabled": true, + "richMedia": { + "broadcastMode": "clip", + "duration": "2538", + "mediaLabel": "Folge 4: Der Verrat__12011611__AD | OV | UT", + "mediaLevel2": "{richMediaLevelTwo}", + "mediaTheme1": "Das Erste", + "mediaTheme2": "Das Erste", + "mediaTheme3": "You shall not lie - Tödliche Geheimnisse", + "mediaType": "video", + "playerId": "urn:ard:publication:1b16c22aa3c33a86", + "refreshDuration": { + "0": 5, + "1": 12, + "12": 15, + "18": 30 + } + }, + "tracker": "ATI" + }, + "trackingPiano@all": { + "avContent": { + "av_broadcasting_type": "OnDemand", + "av_content": "Folge 4: Der Verrat", + "av_content_duration": 2538000, + "av_content_id": "urn:ard:publication:1b16c22aa3c33a86", + "av_content_type": "video", + "av_institution": "Das Erste", + "av_institution_id": "urn:ard:institution:59ccb6ea77d75af5", + "av_publisher": "Das Erste", + "av_publisher_id": "urn:ard:publisher:a42e4291cd9eaf0b", + "av_show": "You shall not lie - Tödliche Geheimnisse", + "av_show_id": "urn:ard:show:b30f5c64ef884984" + }, + "config": { + "events": [ + "av.error", + "av.speed", + "av.quality", + "av.jumpmark", + "av.share", + "av.playermode", + "av.subtitle", + "av.language", + "av.audiodescription", + "av.signlanguage", + "av.volume.mute", + "av.recommendation" + ], + "site": 634408 + }, + "isEnabled": true + } + }, + "streams": [ + { + "kind": "main", + "kindName": "Normal", + "media": [ + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "deu" + } + ], + "forcedLabel": "Auto", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "application/vnd.apple.mpegurl", + "subtitles": [], + "url": "https://universal-vod.daserste.de/i/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/,JOB_461836_sendeton_640x360-50p-1200kbit,JOB_461836_sendeton_480x270-50p-700kbit,JOB_461836_sendeton_960x540-50p-1600kbit,JOB_461836_sendeton_1280x720-50p-3200kbit,JOB_461836_sendeton_1920x1080-50p-5000kbit,.mp4.csmil/master.m3u8", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "deu" + } + ], + "forcedLabel": "Full HD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_1920x1080-50p-5000kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "deu" + } + ], + "forcedLabel": "SD 480p", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 960, + "maxVResolutionPx": 540, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_960x540-50p-1600kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "deu" + } + ], + "forcedLabel": "HD Ready", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1280, + "maxVResolutionPx": 720, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_1280x720-50p-3200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "deu" + } + ], + "forcedLabel": "SD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 640, + "maxVResolutionPx": 360, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461836_sendeton_640x360-50p-1200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "SD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 640, + "maxVResolutionPx": 360, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/07/279f63f5-0067-4867-bced-7408a8d308d0/JOB_468689_sendeton_640x360-50p-1200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "HD Ready", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1280, + "maxVResolutionPx": 720, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/07/279f63f5-0067-4867-bced-7408a8d308d0/JOB_468689_sendeton_1280x720-50p-3200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "Full HD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/07/279f63f5-0067-4867-bced-7408a8d308d0/JOB_468689_sendeton_1920x1080-50p-5000kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "Auto", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "application/vnd.apple.mpegurl", + "subtitles": [], + "url": "https://universal-vod.daserste.de/i/de/2022/10/07/279f63f5-0067-4867-bced-7408a8d308d0/,JOB_468689_sendeton_640x360-50p-1200kbit,JOB_468689_sendeton_480x270-50p-700kbit,JOB_468689_sendeton_960x540-50p-1600kbit,JOB_468689_sendeton_1280x720-50p-3200kbit,JOB_468689_sendeton_1920x1080-50p-5000kbit,.mp4.csmil/master.m3u8", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "standard", + "languageCode": "ov" + } + ], + "forcedLabel": "SD 480p", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 960, + "maxVResolutionPx": 540, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/07/279f63f5-0067-4867-bced-7408a8d308d0/JOB_468689_sendeton_960x540-50p-1600kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "audio-description", + "languageCode": "deu" + } + ], + "forcedLabel": "HD Ready", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1280, + "maxVResolutionPx": 720, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_1280x720-50p-3200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "audio-description", + "languageCode": "deu" + } + ], + "forcedLabel": "SD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 640, + "maxVResolutionPx": 360, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_640x360-50p-1200kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "audio-description", + "languageCode": "deu" + } + ], + "forcedLabel": "Auto", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "application/vnd.apple.mpegurl", + "subtitles": [], + "url": "https://universal-vod.daserste.de/i/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/,JOB_461837_internationalerton_640x360-50p-1200kbit,JOB_461837_internationalerton_480x270-50p-700kbit,JOB_461837_internationalerton_960x540-50p-1600kbit,JOB_461837_internationalerton_1280x720-50p-3200kbit,JOB_461837_internationalerton_1920x1080-50p-5000kbit,.mp4.csmil/master.m3u8", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "audio-description", + "languageCode": "deu" + } + ], + "forcedLabel": "SD 480p", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 960, + "maxVResolutionPx": 540, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_960x540-50p-1600kbit.mp4", + "videoCodec": "H.264" + }, + { + "aspectRatio": "16:9", + "audios": [ + { + "kind": "audio-description", + "languageCode": "deu" + } + ], + "forcedLabel": "Full HD", + "hasEmbeddedSubtitles": false, + "isAdaptiveQualitySelectable": false, + "isHighDynamicRange": false, + "maxHResolutionPx": 1920, + "maxVResolutionPx": 1080, + "mimeType": "video/mp4", + "subtitles": [], + "url": "https://pd-videos.daserste.de/de/2022/10/11/1cb6c5d8-c0f4-4868-ac42-2a06b7a3381f/JOB_461837_internationalerton_1920x1080-50p-5000kbit.mp4", + "videoCodec": "H.264" + } + ], + "videoLanguageCode": "" + } + ], + "subtitles": [ + { + "kind": "normal", + "languageCode": "deu", + "sources": [ + { + "kind": "ebutt", + "url": "https://api.ardmediathek.de/player-service/subtitle/ebutt/urn:ard:subtitle:efab8bf55007171e" + }, + { + "kind": "webvtt", + "url": "https://api.ardmediathek.de/player-service/subtitle/webvtt/urn:ard:subtitle:efab8bf55007171e.vtt" + } + ] + } + ] + }, + "href": "https://api.ardmediathek.de/page-gateway/mediacollectionv6/Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWi9hdWRpb2Rlc2tyaXB0aW9u?isTv=false" + }, + "pagination": null, + "personalized": false, + "playerConfig": null, + "publicationService": { + "name": "Das Erste", + "logo": { + "title": "Logo Das Erste", + "alt": "Logo Das Erste", + "producerName": "Logo Das Erste", + "src": "https://api.ardmediathek.de/image-service/image-collections/urn:ard:image-collection:2213972a8d101de1/16x9?w={width}", + "aspectRatio": "16x9" + }, + "publisherType": "TV", + "partner": "das_erste", + "id": "b3JnYW5pemF0aW9uX0RhcyBFcnN0ZQ", + "coreId": "urn:ard:publisher:a42e4291cd9eaf0b" + }, + "links": { + "self": { + "id": "player_on_demand_widget_ard", + "urlId": "player_on_demand_widget_ard", + "title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "href": "https://api.ardmediathek.de/page-gateway/widgets/ard/editorials/player_on_demand_widget_ard/item/Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWi9hdWRpb2Rlc2tyaXB0aW9u?pageNumber=0&pageSize=100&embedded=true&mcV6=true", + "type": "application/vnd.ard.widget+json", + "partner": "ard" + } + }, + "show": { + "id": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll", + "title": "You shall not lie - Tödliche Geheimnisse", + "image": { + "alt": "You shall not lie – Tödliche Geheimnisse", + "producerName": "ARD Degeto/Beta Film/Moviestar/filmax/Arca Audiovisual", + "src": "https://api.ardmediathek.de/image-service/images/urn:ard:image:b4cf2a895a8ff022?w={width}&ch=a6cf546bb4243ad6", + "title": "You shall not lie – Tödliche Geheimnisse" + }, + "availableSeasons": [ + "1" + ], + "binaryFeatures": [ + "UT", + "AD", + "OV" + ], + "coreAssetType": "SEASON_SERIES" + }, + "synopsis": "Zwischen Macarena und Iván, der jetzt von ihrer Schwangerschaft weiß, kommt es zu einer dramatischen Auseinandersetzung auf See. Erschöpft schwimmt der 18-Jährige an Land und beschuldigt sie, ihn vom Boot gestoßen zu haben. Die Lehrerin muss nun nicht nur die Folgen ihres Seitensprungs fürchten, sondern auch eine Anzeige wegen versuchten Totschlags. +++\r\n\r\nSechsteilige Thrillerserie, Spanien 2021 | Mit Irene Arcos, Lucas Nabor, Natalia Verbeke u.a. | Regie: Pau Freixas\r\n", + "title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "trackingPiano": { + "teaser_recommended": false, + "widget_id": "player_on_demand_widget_ard", + "widget_title": "Folge 4: Der Verrat (S01/E04) - Hörfassung", + "widget_typ": "player_ondemand" + }, + "type": "player_ondemand" + }, + { + "aZContent": false, + "compilationType": "itemsOfShow", + "id": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll", + "isChildContent": false, + "pagination": { + "pageNumber": 0, + "pageSize": 24, + "totalElements": 17 + }, + "personalized": false, + "links": { + "self": { + "id": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll", + "urlId": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll", + "title": "You shall not lie - Tödliche Geheimnisse", + "href": "https://api.ardmediathek.de/page-gateway/widgets/ard/asset/Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll?excludedAssetIds=Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGllLzIwMjItMTAtMTVfMDItNTAtTUVTWi9hdWRpb2Rlc2tyaXB0aW9u&pageNumber=0&pageSize=24&embedded=true&seasoned=false&seasonNumber=&withAudiodescription=false&withOriginalWithSubtitle=false&withOriginalversion=false&single=false", + "type": "application/vnd.ard.widget+json", + "partner": "ard" + } + }, + "size": "m", + "swipeable": true, + "teasers": [], + "title": "You shall not lie - Tödliche Geheimnisse", + "titleVisible": true, + "trackingPiano": { + "teaser_recommended": false, + "widget_id": "Y3JpZDovL2Rhc2Vyc3RlLmRlL3lvdSBzaGFsbCBub3QgbGll", + "widget_title": "You shall not lie - Tödliche Geheimnisse", + "widget_typ": "gridlist" + }, + "type": "gridlist", + "userVisibility": "ALWAYS" + } + ] +} \ No newline at end of file