diff --git a/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializer.java b/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializer.java index 7484c964e..bec62c5c0 100644 --- a/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializer.java +++ b/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializer.java @@ -1,24 +1,19 @@ package mServer.crawler.sender.arte; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; +import com.google.gson.*; import de.mediathekview.mlib.tool.Log; import java.lang.reflect.Type; +import java.util.Optional; /** * Deserialisiert Ergebnisse der Anfrage den Filmen einer Kategorie. * Beispiel-URL: * https://www.arte.tv/guide/api/api/zones/de/web/videos_subcategory_CMG/?page=1&limit=100 */ -public class ArteCategoryFilmListDeserializer implements JsonDeserializer { +public class ArteCategoryFilmListDeserializer extends ArteListBaseDeserializer implements JsonDeserializer { private static final String JSON_ELEMENT_CONTENT = "content"; - private static final String JSON_ELEMENT_DATA = "data"; - private static final String JSON_ELEMENT_PROGRAMID = "programId"; private static final String JSON_ELEMENT_VALUE = "value"; private static final String JSON_ELEMENT_ZONES = "zones"; @@ -39,30 +34,13 @@ public ArteCategoryFilmsDTO deserialize(JsonElement aJsonElement, Type aType, Js for (JsonElement jsonElement : zoneElement.getAsJsonArray()) { if(jsonElement.getAsJsonObject().has(JSON_ELEMENT_CONTENT)) { final JsonObject contentObject = jsonElement.getAsJsonObject().get(JSON_ELEMENT_CONTENT).getAsJsonObject(); - if (contentObject.has(JSON_ELEMENT_DATA)) { - for(JsonElement dataElement : contentObject.get(JSON_ELEMENT_DATA).getAsJsonArray()) { - if (!dataElement.getAsJsonObject().get(JSON_ELEMENT_PROGRAMID).isJsonNull()) { - String programId = dataElement.getAsJsonObject().get(JSON_ELEMENT_PROGRAMID).getAsString(); - if (programId != null) { - if (programId.startsWith("RC-")) { - try { - long collectionId = Long.parseLong(programId.replace("RC-", "")); - dto.addCollection(String.format("RC-%06d", collectionId)); - } catch (NumberFormatException e) { - Log.errorLog(12834939, "Invalid collection id: " + programId); - } - } else { - dto.addProgramId(programId); - } - } - } - } - } + extractProgramIdFromData(contentObject, dto); + + Optional url = parsePagination(contentObject); + url.ifPresent(dto::setNextPageUrl); } } - dto.setNextPage(false); - return dto; } } diff --git a/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmsDTO.java b/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmsDTO.java index 7cd40a628..70b2aeb7c 100644 --- a/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmsDTO.java +++ b/src/main/java/mServer/crawler/sender/arte/ArteCategoryFilmsDTO.java @@ -8,7 +8,7 @@ public class ArteCategoryFilmsDTO { private final Set programIds = new HashSet<>(); private final Set collectionIds = new HashSet<>(); - private boolean hasNextPage; + private String nextPageUrl; public void addProgramId(String aProgramId) { programIds.add(aProgramId); @@ -25,10 +25,13 @@ public Set getCollectionIds() { } public boolean hasNextPage() { - return hasNextPage; + return nextPageUrl != null && !nextPageUrl.isEmpty(); } - public void setNextPage(boolean aNextPage) { - hasNextPage = aNextPage; + public String getNextPageUrl() { + return nextPageUrl; + } + public void setNextPageUrl(String url) { + nextPageUrl = url; } } diff --git a/src/main/java/mServer/crawler/sender/arte/ArteListBaseDeserializer.java b/src/main/java/mServer/crawler/sender/arte/ArteListBaseDeserializer.java new file mode 100644 index 000000000..ea844c34e --- /dev/null +++ b/src/main/java/mServer/crawler/sender/arte/ArteListBaseDeserializer.java @@ -0,0 +1,55 @@ +package mServer.crawler.sender.arte; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import de.mediathekview.mlib.tool.Log; +import mServer.crawler.sender.base.JsonUtils; +import mServer.crawler.sender.base.UrlUtils; + +import java.util.Optional; + +public abstract class ArteListBaseDeserializer { + + private static final String JSON_ELEMENT_DATA = "data"; + private static final String JSON_ELEMENT_PROGRAMID = "programId"; + private static final String JSON_ELEMENT_PAGINATION = "pagination"; + private static final String JSON_ELEMENT_LINKS = "links"; + private static final String JSON_ELEMENT_NEXT = "next"; + + protected Optional parsePagination(JsonObject jsonObject) { + if (jsonObject.has(JSON_ELEMENT_PAGINATION) && !jsonObject.get(JSON_ELEMENT_PAGINATION).isJsonNull()) { + final JsonObject pagionationObject = jsonObject.get(JSON_ELEMENT_PAGINATION).getAsJsonObject(); + if(pagionationObject.has(JSON_ELEMENT_LINKS)) { + final JsonObject linksObject = pagionationObject.get(JSON_ELEMENT_LINKS).getAsJsonObject(); + final Optional nextUrl = JsonUtils.getAttributeAsString(linksObject, JSON_ELEMENT_NEXT); + if (nextUrl.isPresent()) { + return Optional.of(UrlUtils.addDomainIfMissing(nextUrl.get().replace("/api/emac/", "/api/rproxy/emac/"), "https://www.arte.tv")); + } + } + } + return Optional.empty(); + } + + + protected void extractProgramIdFromData(JsonObject jsonObectWithData, ArteCategoryFilmsDTO dto) { + if (jsonObectWithData.has(JSON_ELEMENT_DATA)) { + for(JsonElement dataElement : jsonObectWithData.get(JSON_ELEMENT_DATA).getAsJsonArray()) { + if (!dataElement.getAsJsonObject().get(JSON_ELEMENT_PROGRAMID).isJsonNull()) { + Optional programId = JsonUtils.getAttributeAsString(dataElement.getAsJsonObject(), JSON_ELEMENT_PROGRAMID); + if (programId.isPresent()) { + if (programId.get().startsWith("RC-")) { + try { + long collectionId = Long.parseLong(programId.get().replace("RC-", "")); + dto.addCollection(String.format("RC-%06d", collectionId)); + } catch (NumberFormatException e) { + Log.errorLog(12834939, "Invalid collection id: " + programId); + } + } else { + dto.addProgramId(programId.get()); + } + } + } + } + } + } +} diff --git a/src/main/java/mServer/crawler/sender/arte/ArteSubPageDeserializer.java b/src/main/java/mServer/crawler/sender/arte/ArteSubPageDeserializer.java new file mode 100644 index 000000000..7dd96c3ab --- /dev/null +++ b/src/main/java/mServer/crawler/sender/arte/ArteSubPageDeserializer.java @@ -0,0 +1,28 @@ +package mServer.crawler.sender.arte; + +import com.google.gson.*; + +import java.lang.reflect.Type; +import java.util.Optional; + +public class ArteSubPageDeserializer extends ArteListBaseDeserializer implements JsonDeserializer { + private static final String JSON_ELEMENT_VALUE = "value"; + + @Override + public ArteCategoryFilmsDTO deserialize(JsonElement aJsonElement, Type aType, JsonDeserializationContext aContext) throws JsonParseException { + final ArteCategoryFilmsDTO dto = new ArteCategoryFilmsDTO(); + + JsonElement rootElement = aJsonElement; + if (aJsonElement.getAsJsonObject().has(JSON_ELEMENT_VALUE)) { + rootElement = aJsonElement.getAsJsonObject().get(JSON_ELEMENT_VALUE); + } + + JsonObject rootObject = rootElement.getAsJsonObject(); + extractProgramIdFromData(rootObject, dto); + + Optional url = parsePagination(rootObject); + url.ifPresent(dto::setNextPageUrl); + + return dto; + } +} diff --git a/src/main/java/mServer/crawler/sender/arte/MediathekArte.java b/src/main/java/mServer/crawler/sender/arte/MediathekArte.java index d8d382add..73a81d0e4 100644 --- a/src/main/java/mServer/crawler/sender/arte/MediathekArte.java +++ b/src/main/java/mServer/crawler/sender/arte/MediathekArte.java @@ -121,7 +121,8 @@ public void addToList() { meldungThreadUndFertig(); } else { if (CrawlerTool.loadLongMax()) { - addCategories(); + addRecentList(); + //addCategories(); meldungAddMax(listeThemen.size()); for (int t = 0; t < getMaxThreadLaufen(); ++t) { @@ -151,6 +152,13 @@ private void addCategories() { }); } + private void addRecentList() { + senderLanguages.forEach((sender, langCode) -> { + String u = String.format("https://www.arte.tv/api/rproxy/emac/v4/%s/web/pages/MOST_RECENT/", langCode); + listeThemen.add(new String[]{sender, langCode, "recent", u}); + }); + } + private void addTage() { senderLanguages.forEach((sender, langCode) -> { // http://www.arte.tv/guide/de/plus7/videos?day=-2&page=1&isLoading=true&sort=newest&country=DE @@ -203,6 +211,7 @@ private void addFilmeForTag(String sender, String aUrl) { */ class CategoryLoader extends Thread { + private int subPage = 0; @Override public void run() { @@ -229,6 +238,8 @@ private void loadCategory(String sender, String langCode, String aCategory, Stri Gson gsonCollectionChild = new GsonBuilder() .registerTypeAdapter(ArteCategoryFilmsDTO.class, new ArteCollectionChildDeserializer()) .create(); + Gson gsonNextPage =new GsonBuilder() + .registerTypeAdapter(ArteCategoryFilmsDTO.class, new ArteSubPageDeserializer()).create(); ArteCategoryFilmsDTO dto = loadSubCategoryPage(gson, sender, aUrl); if (dto != null) { @@ -238,9 +249,36 @@ private void loadCategory(String sender, String langCode, String aCategory, Stri ListeFilme loadedFilme = loadPrograms(sender, langCode, dto); loadedFilme.forEach(film -> addFilm(film)); Log.sysLog(String.format("%s: category %s: %d Filme", sender, aCategory, loadedFilme.size())); + if (dto.hasNextPage()) { + loadNextPage(sender, langCode, aCategory, dto.getNextPageUrl(), gsonCollectionParent, gsonCollectionChild, gsonNextPage); + } } } + private void loadNextPage(String sender, String langCode, String aCategory, String url, Gson gsonCollectionParent, Gson gsonCollectionChild, Gson gsonNextPage) { + subPage++; + ArteCategoryFilmsDTO dto = loadSubCategoryPage(gsonNextPage, sender, url); + if (dto != null) { + loadCollections(sender, langCode, gsonCollectionParent, gsonCollectionChild, dto); + Log.sysLog(String.format("%s: category %s: %d programs, %d collections", sender, aCategory, dto.getProgramIds().size(), dto.getCollectionIds().size())); + // alle programIds verarbeiten + ListeFilme loadedFilme = loadPrograms(sender, langCode, dto); + loadedFilme.forEach(film -> addFilm(film)); + Log.sysLog(String.format("%s: category %s - page %d: %d Filme", sender, aCategory, subPage, loadedFilme.size())); + if (dto.hasNextPage() && shouldLoadNextPage(sender)) { + loadNextPage(sender, langCode, aCategory, dto.getNextPageUrl(), gsonCollectionParent, gsonCollectionChild, gsonNextPage); + } + } + } + + private boolean shouldLoadNextPage(String sender) { + if (sender == Const.ARTE_DE) { + return true; + } + + return subPage < 5; + } + private void loadCollections(String sender, String langCode, Gson gsonParent, Gson gsonChild, ArteCategoryFilmsDTO dto) { dto.getCollectionIds().forEach(collectionId -> { final String url = String.format(COLLECTION_URL, langCode, collectionId); diff --git a/src/test/developTest/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializerTest.java b/src/test/developTest/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializerTest.java index f2c219568..b545e407c 100644 --- a/src/test/developTest/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializerTest.java +++ b/src/test/developTest/java/mServer/crawler/sender/arte/ArteCategoryFilmListDeserializerTest.java @@ -21,18 +21,21 @@ public class ArteCategoryFilmListDeserializerTest { private final String jsonFile; private final String[] expectedProgramIds; private final boolean expectedHasNextPage; + private final String expectedNextPageUrl; private final ArteCategoryFilmListDeserializer target; - public ArteCategoryFilmListDeserializerTest(String aJsonFile, String[] aProgramIds, boolean aNextPage) { + public ArteCategoryFilmListDeserializerTest(String aJsonFile, String[] aProgramIds, boolean aNextPage, String nextPageUrl) { jsonFile = aJsonFile; expectedProgramIds = aProgramIds; expectedHasNextPage = aNextPage; + expectedNextPageUrl = nextPageUrl; this.target = new ArteCategoryFilmListDeserializer(); } @Parameterized.Parameters public static Collection data() { return Arrays.asList(new Object[][]{ - {"/arte/arte_category.json", new String[]{"112511-000-A", "047389-000-A", "109066-000-A", "082669-000-A", "003982-000-A", "021109-000-A"}, false}, + {"/arte/arte_category.json", new String[]{"112511-000-A", "047389-000-A", "109066-000-A", "082669-000-A", "003982-000-A", "021109-000-A"}, false, null}, + {"/arte/arte_video_list1.json", new String[]{"033559-000-A","078154-000-A", "101398-000-A", "109332-000-A", "111063-000-A"}, true, "https://www.arte.tv/api/rproxy/emac/v4/de/web/zones/daeadc71-4306-411a-8590-1c1f484ef5aa/content?abv=B&authorizedCountry=DE&page=2&pageId=MOST_RECENT&zoneIndexInPage=0"} }); } @@ -47,5 +50,6 @@ public void testDeserialize() { assertThat(actual.hasNextPage(), equalTo(expectedHasNextPage)); Set actualProgramIds = actual.getProgramIds(); assertThat(actualProgramIds, Matchers.containsInAnyOrder(expectedProgramIds)); + assertThat(actual.getNextPageUrl(), equalTo(expectedNextPageUrl)); } } diff --git a/src/test/developTest/java/mServer/crawler/sender/arte/ArteSubPageDeserializerTest.java b/src/test/developTest/java/mServer/crawler/sender/arte/ArteSubPageDeserializerTest.java new file mode 100644 index 000000000..90aa96086 --- /dev/null +++ b/src/test/developTest/java/mServer/crawler/sender/arte/ArteSubPageDeserializerTest.java @@ -0,0 +1,55 @@ +package mServer.crawler.sender.arte; + +import com.google.gson.JsonObject; +import mServer.test.JsonFileReader; +import org.hamcrest.Matchers; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Set; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +@RunWith(Parameterized.class) +public class ArteSubPageDeserializerTest { + + private final String jsonFile; + private final String[] expectedProgramIds; + private final boolean expectedHasNextPage; + private final String expectedNextPageUrl; + private final ArteSubPageDeserializer target; + public ArteSubPageDeserializerTest(String aJsonFile, String[] aProgramIds, boolean aNextPage, String nextPageUrl) { + jsonFile = aJsonFile; + expectedProgramIds = aProgramIds; + expectedHasNextPage = aNextPage; + expectedNextPageUrl = nextPageUrl; + this.target = new ArteSubPageDeserializer(); + } + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ + {"/arte/arte_video_list2.json", new String[]{"099708-000-A", "098846-000-A", "111648-001-A", "112235-000-A", "113043-139-A"}, true, "https://www.arte.tv/api/rproxy/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=3&pageId=MOST_VIEWED&zoneIndexInPage=0"}, + {"/arte/arte_video_list_last.json", new String[]{"102805-000-A","104017-000-A", "106273-006-A"}, false, null} + }); + } + + @Test + public void testDeserialize() { + + JsonObject jsonObject = JsonFileReader.readJson(jsonFile); + + ArteCategoryFilmsDTO actual = target.deserialize(jsonObject, ArteCategoryFilmsDTO.class, null); + + assertThat(actual, notNullValue()); + assertThat(actual.hasNextPage(), equalTo(expectedHasNextPage)); + Set actualProgramIds = actual.getProgramIds(); + assertThat(actualProgramIds, Matchers.containsInAnyOrder(expectedProgramIds)); + assertThat(actual.getNextPageUrl(), equalTo(expectedNextPageUrl)); + } +} diff --git a/src/test/developTest/resources/arte/arte_video_list1.json b/src/test/developTest/resources/arte/arte_video_list1.json new file mode 100644 index 000000000..c47a2496e --- /dev/null +++ b/src/test/developTest/resources/arte/arte_video_list1.json @@ -0,0 +1,482 @@ +{ + "tag":"Ok", + "value":{ + "code":"MOST_RECENT", + "language":"de", + "support":"web", + "type":"videoType", + "level":0, + "parent":null, + "alternativeLanguages":[ + { + "code":"fr", + "label":"Français", + "page":"MOST_RECENT", + "url":"/fr/videos/plus-recentes/", + "title":"Les plus récentes" + }, + { + "code":"de", + "label":"Deutsch", + "page":"MOST_RECENT", + "url":"/de/videos/neueste-videos/", + "title":"Neueste Videos" + }, + { + "code":"en", + "label":"English", + "page":"MOST_RECENT", + "url":"/en/videos/most-recent/", + "title":"Most recent" + }, + { + "code":"es", + "label":"Español", + "page":"MOST_RECENT", + "url":"/es/videos/los-mas-recientes/", + "title":"Los más recientes" + }, + { + "code":"pl", + "label":"Polski", + "page":"MOST_RECENT", + "url":"/pl/videos/najnowsze/", + "title":"Najnowsze" + }, + { + "code":"it", + "label":"Italiano", + "page":"MOST_RECENT", + "url":"/it/videos/piu-recenti/", + "title":"I più recenti" + } + ], + "url":"/de/videos/neueste-videos/", + "deeplink":"arte://programs/recent", + "slug":"neueste-videos", + "stats":{ + "xiti":{ + "page_name":"Most_recent", + "chapter1":"Looking_for", + "chapter2":null, + "chapter3":null, + "x1":"de", + "x2":"Search", + "x4":"A", + "s2":4, + "siteId":"582046", + "env_work":"prod", + "search_keywords":null + }, + "serverSideTracking":{ + "page":{ + "id":"MOST_RECENT", + "language":"de", + "url":"/de/videos/neueste-videos/", + "abv":"A", + "query":null, + "category":null, + "subcategories":null + }, + "content":null + } + }, + "metadata":{ + "title":"Neueste Videos", + "description":"Filme, Dokus, Sendungen, Serien … Entdecken Sie die Programme, die der ARTE Mediathek neu hinzugefügt wurden.", + "seo":{ + "title":"Neueste Videos | ARTE", + "description":null, + "canonical":"/de/videos/neueste-videos/" + }, + "og":{ + "image":{ + "url":"/img/SHARE_DEFAULT.jpg", + "width":1200, + "height":630 + } + }, + "twitter":{ + "image":{ + "url":"/img/SHARE_DEFAULT.jpg" + }, + "site":"@ARTEde" + } + }, + "zones":[ + { + "id":"daeadc71-4306-411a-8590-1c1f484ef5aa", + "code":"listing_MOST_RECENT", + "title":"Video Listing (MOST_RECENT)", + "slug":null, + "description":null, + "displayOptions":{ + "template":"vertical-landscape", + "theme":null, + "showZoneTitle":true, + "showItemTitle":true + }, + "link":null, + "authenticatedContent":null, + "groupedZonesName":null, + "content":{ + "data":[ + { + "id":"033559-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/033559-000-A", + "title":"Ein süßer Fratz", + "subtitle":null, + "shortDescription":"Eine junge Buchhändlerin wird von einem Fotografen entdeckt, der sie zum erfolgreichen Cover-Girl eines Modemagazins macht. Die unscheinbare, graue Maus verwandelt sich in eine attraktive Frau. - Audrey Hepburn und Fred Astaire spielen die Hauptrollen in diesem amüsanten Filmmusical (1957), das an Originalschauplätzen in Paris realisiert wurde.", + "mainImage":{ + "caption":null, + "url":"https://api-cdn.arte.tv/img/v2/image/jj9S3FSnvKh4KYTTpW9B3Y/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=B&em=033559-000-A&language=de&pageid=MOST_RECENT&position=1&support=web&teaserid=033559-000-A_de&teasertitle=Ein%20s%C3%BC%C3%9Fer%20Fratz&zoneCode=listing_MOST_RECENT&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_RECENT&zonename=Video%20Listing%20%28MOST_RECENT%29", + "url":"/de/videos/033559-000-A/ein-suesser-fratz/", + "programId":"033559-000-A", + "teaserText":"Audrey Hepburn wird an der Seite von Fred Astaire vom hässlichen Entlein zum schönen Schwan.", + "duration":5940, + "durationLabel":"99 Min.", + "geoblocking":{ + "code":"DE_FR", + "label":"Verfügbar in Deutschland und Frankreich", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Filme", + "url":"/de/videos/kino/", + "deeplink":"arte://emac/CIN" + }, + "audioVersions":[ + { + "code":"AD", + "label":"Audiodeskription" + }, + { + "code":"DE", + "label":"Synchronisation" + }, + { + "code":"STM", + "label":"Untertitel für Gehörlose" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-02-11T04:00:00Z", + "end":"2024-02-18T04:00:00Z", + "upcomingDate":"2024-02-11T04:00:00Z", + "label":"Verfügbar vom 11/02/2024 bis 17/02/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"078154-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/078154-000-A", + "title":"Australiens unbekanntes Paradies", + "subtitle":"Die Inseln der Torres-Straße", + "shortDescription":"274 Inseln mit weißen Korallensandstränden erheben sich aus der Torres-Straße, der Meerenge zwischen Australien und Papua-Neuguinea. Die rund 20 bewohnten Inseln liegen oft viele Kilometer voneinander entfernt, der dortige Alltag ist von Isolation und Ressourcenknappheit geprägt. Die Dokumentation bietet überraschende Einblicke in die Lebenswelt der Torres-Straßen-Insulaner.", + "mainImage":{ + "caption":"Die idyllische Inselgruppe der Torres-Straße liegt in einer Meerenge zwischen Papua-Neuguinea und Australien.", + "url":"https://api-cdn.arte.tv/img/v2/image/hfer4Uf8bRCCbjLDtDbyB8/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=B&em=078154-000-A&language=de&pageid=MOST_RECENT&position=2&support=web&teaserid=078154-000-A_de&teasertitle=Australiens%20unbekanntes%20Paradies&zoneCode=listing_MOST_RECENT&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_RECENT&zonename=Video%20Listing%20%28MOST_RECENT%29", + "url":"/de/videos/078154-000-A/australiens-unbekanntes-paradies/", + "programId":"078154-000-A", + "teaserText":"Die Dokumentation bietet überraschende Einblicke in die einzigartige Lebenswelt der Torres-Straßen-Insulaner.", + "duration":2606, + "durationLabel":"44 Min.", + "geoblocking":{ + "code":"ALL", + "label":"Weltweit verfügbar", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + { + "code":"STM", + "label":"Untertitel für Gehörlose" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-02-11T04:00:00Z", + "end":"2024-03-04T04:00:00Z", + "upcomingDate":"2024-02-11T04:00:00Z", + "label":"Verfügbar vom 11/02/2024 bis 03/03/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"101398-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/101398-000-A", + "title":"Albrecht Dürer - Ein Meister des Selbstporträts", + "subtitle":null, + "shortDescription":"Albrecht Dürer, einer der größten Maler der Renaissance, begründete an der Schwelle vom 15. zum 16. Jahrhundert einen neuen Künstlerstatus, der ihm Unabhängigkeit und Anerkennung bescherte. Seine zwölf, bis heute erhaltenen, Selbstporträts stellen ein wertvolles Erbe dar. Dieses Erbe zeugt von einem gesellschaftlichen Umbruch in Nordeuropa.", + "mainImage":{ + "caption":"Albrecht Dürer", + "url":"https://api-cdn.arte.tv/img/v2/image/EfwnqtdkLvHSfpPjSYuhr9/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=B&em=101398-000-A&language=de&pageid=MOST_RECENT&position=3&support=web&teaserid=101398-000-A_de&teasertitle=Albrecht%20D%C3%BCrer%20-%20Ein%20Meister%20des%20Selbstportr%C3%A4ts&zoneCode=listing_MOST_RECENT&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_RECENT&zonename=Video%20Listing%20%28MOST_RECENT%29", + "url":"/de/videos/101398-000-A/albrecht-duerer-ein-meister-des-selbstportraets/", + "programId":"101398-000-A", + "teaserText":"Albrecht Dürers zwölf, bis heute erhaltenen Selbstporträts zeugen von einem gesellschaftlichen Umbruch in Nordeuropa.", + "duration":3141, + "durationLabel":"53 Min.", + "geoblocking":{ + "code":"SAT", + "label":"Verfügbar in Europa", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + { + "code":"DE", + "label":"Synchronisation" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-02-11T04:00:00Z", + "end":"2024-05-18T03:00:00Z", + "upcomingDate":"2024-02-11T04:00:00Z", + "label":"Verfügbar vom 11/02/2024 bis 17/05/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"109332-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/109332-000-A", + "title":"Dance! – von Latin bis Voguing", + "subtitle":"Mit Sylvia Camarda, Oumi Janta u.v.m.", + "shortDescription":"Ein Feuerwerk der Bewegung: Die Tänzerin und Choreografin Sylvia Camarda und weitere Tänzerinnen sowie Tänzer zeigen verschiedene Tanzstile, von Modern und Urban Dance über Latin Show Dance bis zu Voguing.", + "mainImage":{ + "caption":"Im Mittelpunkt der Sendung steht der Tänzer Ahmad Joudeh.", + "url":"https://api-cdn.arte.tv/img/v2/image/7U5ZRZ3duP8jEifekUvWSm/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + }, + { + "code":"ARTE_CONCERT", + "label":"ARTE Concert" + } + ], + "trackingPixel":"/ct/?abv=B&em=109332-000-A&language=de&pageid=MOST_RECENT&position=4&support=web&teaserid=109332-000-A_de&teasertitle=Dance%21%20%E2%80%93%20von%20Latin%20bis%20Voguing&zoneCode=listing_MOST_RECENT&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_RECENT&zonename=Video%20Listing%20%28MOST_RECENT%29", + "url":"/de/videos/109332-000-A/dance-von-latin-bis-voguing/", + "programId":"109332-000-A", + "teaserText":"Ein Feuerwerk der Bewegung: Die Tänzerin und Choreografin Sylvia Camarda zeigt Tanzstile aus allen Zeiten.", + "duration":2779, + "durationLabel":"47 Min.", + "geoblocking":{ + "code":"ALL", + "label":"Weltweit verfügbar", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Bühne und Konzert", + "url":"/de/arte-concert/", + "deeplink":"arte://emac/ARTE_CONCERT" + }, + "audioVersions":[ + + ], + "availability":{ + "type":"VOD", + "start":"2024-02-11T04:00:00Z", + "end":"2024-05-11T03:00:00Z", + "upcomingDate":"2024-02-11T04:00:00Z", + "label":"Verfügbar vom 11/02/2024 bis 10/05/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"111063-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/111063-000-A", + "title":"Händel: Giulio Cesare", + "subtitle":"Julie Fuchs in Amsterdam", + "shortDescription":"Die berühmte Händel-Oper \"Giulio Cesare\" in Amsterdam unter der musikalischen Leitung der französischen Dirigentin Emmanuelle Haïm und in einer Inszenierung von Calixto Bieito: Christophe Dumaux und Julie Fuchs sind Cäsar und Kleopatra. Um die grenzenlose Machtgier der superreichen Eliten bloßzustellen, überträgt Calixto Bieito die Handlung in eine namenlose Hightech-Oligarchie.", + "mainImage":{ + "caption":null, + "url":"https://api-cdn.arte.tv/img/v2/image/Harb4PQNnBVSRh6Liz2NJP/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + }, + { + "code":"ARTE_CONCERT", + "label":"ARTE Concert" + } + ], + "trackingPixel":"/ct/?abv=B&em=111063-000-A&language=de&pageid=MOST_RECENT&position=5&support=web&teaserid=111063-000-A_de&teasertitle=H%C3%A4ndel%3A%20Giulio%20Cesare&zoneCode=listing_MOST_RECENT&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_RECENT&zonename=Video%20Listing%20%28MOST_RECENT%29", + "url":"/de/videos/111063-000-A/haendel-giulio-cesare/", + "programId":"111063-000-A", + "teaserText":"Die berühmte Händel-Oper unter der musikalischen Leitung von Dirigentin Emmanuelle Haïm und inszeniert von Calixto Bieito", + "duration":11499, + "durationLabel":"192 Min.", + "geoblocking":{ + "code":"SAT", + "label":"Verfügbar in Europa", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Bühne und Konzert", + "url":"/de/arte-concert/", + "deeplink":"arte://emac/ARTE_CONCERT" + }, + "audioVersions":[ + { + "code":"OmU", + "label":"Untertitel" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-02-11T04:00:00Z", + "end":"2024-03-19T04:00:00Z", + "upcomingDate":"2024-02-11T04:00:00Z", + "label":"Verfügbar vom 11/02/2024 bis 18/03/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + } + ], + "pagination":{ + "page":1, + "pages":100, + "totalCount":2000, + "links":{ + "first":"/api/emac/v4/de/web/zones/daeadc71-4306-411a-8590-1c1f484ef5aa/content?abv=B&authorizedCountry=DE&page=1&pageId=MOST_RECENT&zoneIndexInPage=0", + "next":"/api/emac/v4/de/web/zones/daeadc71-4306-411a-8590-1c1f484ef5aa/content?abv=B&authorizedCountry=DE&page=2&pageId=MOST_RECENT&zoneIndexInPage=0", + "last":"/api/emac/v4/de/web/zones/daeadc71-4306-411a-8590-1c1f484ef5aa/content?abv=B&authorizedCountry=DE&page=100&pageId=MOST_RECENT&zoneIndexInPage=0" + } + } + } + } + ] + } +} diff --git a/src/test/developTest/resources/arte/arte_video_list2.json b/src/test/developTest/resources/arte/arte_video_list2.json new file mode 100644 index 000000000..17396b30c --- /dev/null +++ b/src/test/developTest/resources/arte/arte_video_list2.json @@ -0,0 +1,353 @@ +{ + "tag":"Ok", + "value":{ + "data":[ + { + "id":"099708-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/099708-000-A", + "title":"USA gegen Hitler", + "subtitle":"Wie ein Spion den Nazis den Krieg erklärte", + "shortDescription":"Die packende Geschichte des britischen Geheimagenten William Stephenson, der die USA an der Seite Großbritanniens in den Zweiten Weltkrieg trieb: Archivmaterial und Interviews, u.a. mit Timothy Naftali, einer der wenigen lebenden Historiker, der Einblick in die streng geheimen Akten hatte, ordnen die Geschehnisse ein und ziehen Parallelen zu heutigen Ereignissen.", + "mainImage":{ + "caption":"William Stephenson (James Loye, li.) zeigt William Donovan (Eric Davis, re.) eine gefälschte Karte mit Hitlers angeblichen Eroberungsplänen Amerikas ...", + "url":"https://api-cdn.arte.tv/img/v2/image/Dr7Nj2X9Uk6UzKYoFK4GCm/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=099708-000-A&language=de&pageid=MOST_VIEWED&position=1&support=web&teaserid=099708-000-A_de&teasertitle=USA%20gegen%20Hitler&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/099708-000-A/usa-gegen-hitler/", + "programId":"099708-000-A", + "teaserText":"1939 wurde ein britisch-kanadischer Geschäftsmann zu einem der größten Spione des 20. Jahrhunderts.", + "duration":5488, + "durationLabel":"92 Min.", + "geoblocking":{ + "code":"DE_FR", + "label":"Verfügbar in Deutschland und Frankreich", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + { + "code":"DE", + "label":"Synchronisation" + }, + { + "code":"STM", + "label":"Untertitel für Gehörlose" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-01-29T04:00:00Z", + "end":"2024-04-29T03:00:00Z", + "upcomingDate":"2024-01-29T04:00:00Z", + "label":"Verfügbar vom 29/01/2024 bis 28/04/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"098846-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/098846-000-A", + "title":"Die Normannen - Herrscher von Sizilien", + "subtitle":null, + "shortDescription":"Sie kamen aus dem hohen Norden, waren als wilde Krieger verschrien und schufen auf Sizilien das reichste und fortschrittlichste Königreich Europas: die Normannen. Der Dokumentarfilm macht diese facettenreiche Geschichte aus dem Mittelalter lebendig und präsentiert sie so bunt und vielfältig, wie Sizilien heute ist.", + "mainImage":{ + "caption":"Königin Konstanze von Sizilien (Alessia Guerrieri, Mi.) in Gegnerschaft zu Walter von Pagliara (Alessandro Cremona, 2.v.l.), einem Gefolgsmann ihres soeben verstorbenen Gatten Heinrich VI.", + "url":"https://api-cdn.arte.tv/img/v2/image/Y3p4LbePETFeFSqtWppdUN/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=098846-000-A&language=de&pageid=MOST_VIEWED&position=2&support=web&teaserid=098846-000-A_de&teasertitle=Die%20Normannen%20-%20Herrscher%20von%20Sizilien&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/098846-000-A/die-normannen-herrscher-von-sizilien/", + "programId":"098846-000-A", + "teaserText":"Sie waren als wilde Krieger verschrien und schufen das fortschrittlichste Königreich jener Zeit: die Normannen.", + "duration":5219, + "durationLabel":"87 Min.", + "geoblocking":{ + "code":"DE_FR", + "label":"Verfügbar in Deutschland und Frankreich", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + { + "code":"STM", + "label":"Untertitel für Gehörlose" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-01-26T04:00:00Z", + "end":"2024-02-26T04:00:00Z", + "upcomingDate":"2024-01-26T04:00:00Z", + "label":"Verfügbar vom 26/01/2024 bis 25/02/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"111648-001-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/111648-001-A", + "title":"Südafrikas Garden Route", + "subtitle":"Eine legendäre Küstenstraße", + "shortDescription":"Am südlichsten Zipfel des afrikanischen Kontinents treffen der raue Atlantische und der milde Indische Ozean aufeinander. Entlang dieser Küstenregion verläuft eine der spektakulärsten Panoramastraßen der Welt: Südafrikas Garden Route. In der ersten Episode der zweiteiligen Doku fahren wir von Kapstadt bis in die Lagunenstadt Knysna.", + "mainImage":{ + "caption":"Kap Agulhas ist das Ende des afrikanischen Kontinents: Danach kommt nichts als Wasser und ein paar Tausend Kilometer weiter die Antarktis.", + "url":"https://api-cdn.arte.tv/img/v2/image/sbV6S8JqYSJSvpEQPjYa5W/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=111648-001-A&language=de&pageid=MOST_VIEWED&position=3&support=web&teaserid=111648-001-A_de&teasertitle=S%C3%BCdafrikas%20Garden%20Route&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/111648-001-A/suedafrikas-garden-route/", + "programId":"111648-001-A", + "teaserText":"Porträt einer der spektakulärsten Panoramastraßen der Welt: Südafrikas Garden Route.", + "duration":2610, + "durationLabel":"44 Min.", + "geoblocking":{ + "code":"DE_FR", + "label":"Verfügbar in Deutschland und Frankreich", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + + ], + "availability":{ + "type":"VOD", + "start":"2024-02-08T04:00:00Z", + "end":"2025-02-07T04:00:00Z", + "upcomingDate":"2024-02-08T04:00:00Z", + "label":"Verfügbar vom 08/02/2024 bis 06/02/2025" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"112235-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/112235-000-A", + "title":"Enthüllung einer Staatsaffäre", + "subtitle":null, + "shortDescription":"Paris 2015: Der Zoll beschlagnahmt mehr als sieben Tonnen Cannabis. Kurz darauf kontaktiert der ehemalige Agent der Drogenfahndung, Hubert Antoine, den Journalisten Stéphane Vilner. Antoine gibt an über Beweise zu haben, die den Chef der zentralen Drogenfahndung schwer belasten ... - Politthriller (2021), inspiriert von dem Buch \"L'Infiltré\" von Hubert Avoine und Emmanuel Fansten", + "mainImage":{ + "caption":"Der junge Journalist Stéphane Vilner (Pio Marmaï, re.) blickt auf Entwürfe seiner Titelstory für die „Libération“.", + "url":"https://api-cdn.arte.tv/img/v2/image/qbtv9ATfr4wyzGXm3F9zSV/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=112235-000-A&language=de&pageid=MOST_VIEWED&position=4&support=web&teaserid=112235-000-A_de&teasertitle=Enth%C3%BCllung%20einer%20Staatsaff%C3%A4re&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/112235-000-A/enthuellung-einer-staatsaffaere/", + "programId":"112235-000-A", + "teaserText":"Paris 2015: Der Zoll beschlagnahmt mehr als sieben Tonnen Cannabis. Steckt die Drogenfahndung selbst dahinter?", + "duration":6924, + "durationLabel":"116 Min.", + "geoblocking":{ + "code":"DE_FR", + "label":"Verfügbar in Deutschland und Frankreich", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Filme", + "url":"/de/videos/kino/", + "deeplink":"arte://emac/CIN" + }, + "audioVersions":[ + { + "code":"AD", + "label":"Audiodeskription" + }, + { + "code":"DE", + "label":"Synchronisation" + }, + { + "code":"STM", + "label":"Untertitel für Gehörlose" + } + ], + "availability":{ + "type":"VOD", + "start":"2024-01-17T04:00:00Z", + "end":"2024-02-16T04:00:00Z", + "upcomingDate":"2024-01-17T04:00:00Z", + "label":"Verfügbar vom 17/01/2024 bis 15/02/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"113043-139-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/113043-139-A", + "title":"Taylor Swift: Ein politisches Schwergewicht?", + "subtitle":"ARTE Info Expresso", + "shortDescription":"Sie hat 16 Mal so viele Follower wie der US-Präsident, mobilisiert junge Wähler, kurbelt mit ihren Konzerten die Wirtschaft an und wurde vom Time Magazine zur einflussreichsten Person des Jahres gekürt: Wie viel Einfluss könnte Mega-Star Taylor Swift auf die Politik der USA und die bevorstehenden Präsidentschaftwahlen nehmen? Und warum reißen sich führende Politiker weltweit um ihren Besuch?", + "mainImage":{ + "caption":null, + "url":"https://api-cdn.arte.tv/img/v2/image/y43c6rZXcFXVaxNCfE89Zg/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=113043-139-A&language=de&pageid=MOST_VIEWED&position=5&support=web&teaserid=113043-139-A_de&teasertitle=Taylor%20Swift%3A%20Ein%20politisches%20Schwergewicht%3F&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/113043-139-A/taylor-swift-ein-politisches-schwergewicht/", + "programId":"113043-139-A", + "teaserText":"Die Sängerin hat 16 Mal so viele Follower wie US-Präsident Joe Biden und mobilisiert junge Wähler.", + "duration":132, + "durationLabel":"3 Min.", + "geoblocking":{ + "code":"ALL", + "label":"Weltweit verfügbar", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + + ], + "availability":{ + "type":"VOD", + "start":"2023-12-13T11:41:00Z", + "end":"2024-12-14T23:00:00Z", + "upcomingDate":"2023-12-13T11:41:00Z", + "label":"Verfügbar vom 13/12/2023 bis 14/12/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + } + ], + "pagination":{ + "page":2, + "pages":100, + "totalCount":2000, + "links":{ + "first":"/api/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=1&pageId=MOST_VIEWED&zoneIndexInPage=0", + "next":"/api/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=3&pageId=MOST_VIEWED&zoneIndexInPage=0", + "last":"/api/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=100&pageId=MOST_VIEWED&zoneIndexInPage=0" + } + } + } +} \ No newline at end of file diff --git a/src/test/developTest/resources/arte/arte_video_list_last.json b/src/test/developTest/resources/arte/arte_video_list_last.json new file mode 100644 index 000000000..17a325185 --- /dev/null +++ b/src/test/developTest/resources/arte/arte_video_list_last.json @@ -0,0 +1,213 @@ +{ + "tag":"Ok", + "value":{ + "data":[ + { + "id":"102805-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/102805-000-A", + "title":"Modeselektor presents: Work", + "subtitle":"Ein Film von Corey Scott-Gilbert, Krsn Brasko und Tobias Staab", + "shortDescription":"Am 9. April 2021 erscheint das fünfte Album Extended des Berliner Duos Modeselektor auf ihrem Label Monkeytown Records. In Form eines Visual Albums präsentiert sich die Musik des 27 Stücke umfassenden Mixtapes in Verbindung mit dem eigens dafür produzierten Film Work, der die Energie der Musik in eine radikale Performance des Ausnahmetänzers Corey Scott-Gilbert übersetzt. Work entstand unter Mithilfe von Corey Scott-Gilbert (artistic director, performance), Krsn Brasko (film & creative director), Tobias Staab (creative director) und Modeselektor (music).\n\nAufzeichnung von April 2021", + "mainImage":{ + "caption":"Modeselektor", + "url":"https://api-cdn.arte.tv/img/v2/image/oRN9BuXWBguqK9zn7vfSph/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + }, + { + "code":"ARTE_CONCERT", + "label":"ARTE Concert" + } + ], + "trackingPixel":"/ct/?abv=A&em=102805-000-A&language=de&pageid=MOST_VIEWED&position=1&support=web&teaserid=102805-000-A_de&teasertitle=Modeselektor%20presents%3A%20Work&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/102805-000-A/modeselektor-presents-work/", + "programId":"102805-000-A", + "teaserText":"Ein filmischer Trip mit Corey Scott-Gilbert zur Musik von Modeselektor. ", + "duration":3600, + "durationLabel":"60 Min.", + "geoblocking":{ + "code":"ALL", + "label":"Weltweit verfügbar", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Bühne und Konzert", + "url":"/de/arte-concert/", + "deeplink":"arte://emac/ARTE_CONCERT" + }, + "audioVersions":[ + + ], + "availability":{ + "type":"VOD", + "start":"2023-03-05T09:00:00Z", + "end":"2033-03-04T09:00:00Z", + "upcomingDate":"2023-03-05T09:00:00Z", + "label":"Verfügbar vom 05/03/2023 bis 04/03/2033" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"104017-000-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/104017-000-A", + "title":"Sisters with Transistors: Die verkannten Heldinnen der elektronischen Musik", + "subtitle":null, + "shortDescription":"Die Dokumentation erzählt die verblüffende Geschichte der Pionierinnen der elektronischen Musik. In einer virtuosen Mischung aus Archivmaterial, Interviews und visionärer Musik entsteht ein unterhaltsames Zeit- und Sittenbild von den Kriegsjahren bis heute, das von der befreienden Kraft neuer Technologien erzählt. Erzählerin ist die Musik-Ikone Laurie Anderson.", + "mainImage":{ + "caption":"Sisters with Transistors", + "url":"https://api-cdn.arte.tv/img/v2/image/NeLcWu6wFMEyZmVAsVhfPP/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=104017-000-A&language=de&pageid=MOST_VIEWED&position=2&support=web&teaserid=104017-000-A_de&teasertitle=Sisters%20with%20Transistors%3A%20Die%20verkannten%20Heldinnen%20der%20elektronischen%20Musik&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/104017-000-A/sisters-with-transistors-die-verkannten-heldinnen-der-elektronischen-musik/", + "programId":"104017-000-A", + "teaserText":"Die verblüffende Geschichte der Pionierinnen der elektronischen Musik", + "duration":3180, + "durationLabel":"53 Min.", + "geoblocking":{ + "code":"EUR_DE_FR", + "label":"Verfügbar in den deutsch- und französischsprachigen Ländern Europas", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + { + "code":"OmU", + "label":"Untertitel" + } + ], + "availability":{ + "type":"VOD", + "start":"2022-01-05T09:56:19Z", + "end":"2025-03-31T03:00:00Z", + "upcomingDate":"2022-01-05T09:56:19Z", + "label":"Verfügbar vom 05/01/2022 bis 30/03/2025" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + }, + { + "id":"106273-006-A_de", + "type":"teaser", + "kind":{ + "code":"SHOW", + "label":"Programm", + "isCollection":false + }, + "deeplink":"arte://program/106273-006-A", + "title":"Reminded – Maria Montessori", + "subtitle":"Lernen ohne Noten", + "shortDescription":"Facebook, Amazon, Google, Microsoft: Einige Gründer großer Tech-Firmen waren auf Montessori-Schulen. Das pädagogische Konzept von Maria Montessori ist über 100 Jahre alt und wird heute weltweit angewandt. Aber es ist nicht unumstritten. Malcolm besucht eine Montessori-Schule und fragt eine Erziehungswissenschaftlerin: Ist diese Schulform für jedes Kind geeignet?", + "mainImage":{ + "caption":"Maria Montessori", + "url":"https://api-cdn.arte.tv/img/v2/image/hKBgcjWs9ZuJYFc7uHxGiV/__SIZE__?type=TEXT" + }, + "stickers":[ + { + "code":"PLAYABLE", + "label":"PLAYABLE" + }, + { + "code":"FULL_VIDEO", + "label":"Das Programm sehen" + } + ], + "trackingPixel":"/ct/?abv=A&em=106273-006-A&language=de&pageid=MOST_VIEWED&position=3&support=web&teaserid=106273-006-A_de&teasertitle=Reminded%20%E2%80%93%20Maria%20Montessori&zoneCode=listing_MOST_VIEWED&zoneIndexInPage=0&zoneTemplate=vertical_landscape&zoneid=listing_MOST_VIEWED&zonename=Video%20Listing%20%28MOST_VIEWED%29", + "url":"/de/videos/106273-006-A/reminded-maria-montessori/", + "programId":"106273-006-A", + "teaserText":"Einige Gründer großer Firmen waren auf Montessori-Schulen. Wie aktuell ist dieses Konzept nach 100 Jahren?", + "duration":1045, + "durationLabel":"18 Min.", + "geoblocking":{ + "code":"ALL", + "label":"Weltweit verfügbar", + "inclusion":[ + + ], + "exclusion":[ + + ] + }, + "genre":{ + "label":"Dokus und Reportagen", + "url":"/de/videos/dokumentationen-und-reportagen/", + "deeplink":"arte://emac/DOR" + }, + "audioVersions":[ + + ], + "availability":{ + "type":"VOD", + "start":"2023-04-12T03:00:00Z", + "end":"2024-04-12T03:00:00Z", + "upcomingDate":"2023-04-12T03:00:00Z", + "label":"Verfügbar vom 12/04/2023 bis 11/04/2024" + }, + "ageRating":0, + "callToAction":"Abspielen", + "clip":null, + "trailer":null, + "childrenCount":null + } + ], + "pagination":{ + "page":100, + "pages":100, + "totalCount":2000, + "links":{ + "first":"/api/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=1&pageId=MOST_VIEWED&zoneIndexInPage=0", + "next":null, + "last":"/api/emac/v4/de/web/zones/82b597d7-a83b-4dd8-bea8-ad71675fdf23/content?abv=A&authorizedCountry=DE&page=100&pageId=MOST_VIEWED&zoneIndexInPage=0" + } + } + } +} \ No newline at end of file