diff --git a/build.gradle b/build.gradle index 28589e6b9..b5e561639 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 group = 'de.mediathekview' archivesBaseName = "MServer" -version = '3.1.194' +version = '3.1.195' def jarName = 'MServer.jar' def mainClass = 'mServer.Main' diff --git a/src/main/java/mServer/crawler/AddToFilmlist.java b/src/main/java/mServer/crawler/AddToFilmlist.java index d2a41ff47..960fbf6fd 100644 --- a/src/main/java/mServer/crawler/AddToFilmlist.java +++ b/src/main/java/mServer/crawler/AddToFilmlist.java @@ -302,7 +302,7 @@ public void run() { if (response.isSuccessful()) { long respLength = determineContentLength(response); - if (isRelevantContentType(response) && !orfRemovedVideo(film, response) && + if (isRelevantContentType(response) && !removedVideo(film, response) && // ignore file length of m3u8-files because it is always too small (isM3u8File(url) || respLength > MIN_SIZE_ADD_OLD)) { addOld(film); @@ -320,7 +320,7 @@ public void run() { if (Long.parseLong(film.arr[DatenFilm.FILM_GROESSE]) > MIN_SIZE_ADD_OLD) { Request request = createOnlineCheckRequest(url); try (Response response = client.newCall(request).execute()) { - if (response.isSuccessful() && isRelevantContentType(response) && !orfRemovedVideo(film, response)) { + if (response.isSuccessful() && isRelevantContentType(response) && !removedVideo(film, response)) { addOld(film); } else { Log.sysLog("film removed: code: " + response.code() + ": " + url); @@ -335,6 +335,19 @@ public void run() { threadCounter.decrementAndGet(); } + private boolean removedVideo(DatenFilm film, Response response) { + return orfRemovedVideo(film, response) || arteRemovedVideo(film, response); + } + + private boolean arteRemovedVideo(DatenFilm film, Response response) { + if (film.arr[DatenFilm.FILM_SENDER].equals(Const.ARTE_DE)) { + String path = response.request().url().encodedPath(); + return path.contains("_EXTRAIT_"); + } + + return false; + } + private boolean orfRemovedVideo(DatenFilm film, Response response) { if (film.arr[DatenFilm.FILM_SENDER].equals(Const.ORF)) { String path = response.request().url().encodedPath(); diff --git a/src/main/java/mServer/crawler/sender/arte/ArteProgramIdToDatenFilmCallable.java b/src/main/java/mServer/crawler/sender/arte/ArteProgramIdToDatenFilmCallable.java index 2a307bd4e..1115a2c44 100644 --- a/src/main/java/mServer/crawler/sender/arte/ArteProgramIdToDatenFilmCallable.java +++ b/src/main/java/mServer/crawler/sender/arte/ArteProgramIdToDatenFilmCallable.java @@ -25,7 +25,7 @@ public class ArteProgramIdToDatenFilmCallable implements Callable private static final Logger LOG = LogManager.getLogger(ArteProgramIdToDatenFilmCallable.class); - private static final String ARTE_VIDEO_INFORMATION_URL_PATTERN = "https://api.arte.tv/api/opa/v3/videoStreams?programId=%s&mediaType=mp4&limit=100&language=%s"; + private static final String ARTE_VIDEO_INFORMATION_URL_PATTERN = "https://api.arte.tv/api/opa/v3/videoStreams?programId=%s&limit=100&language=%s&protocol=HTTPS&kind=SHOW"; private static final String ARTE_VIDEO_INFORMATION_URL_PATTERN_2 = "https://api.arte.tv/api/opa/v3/programs/%s/%s"; // Für broadcastBeginRounded private final FastDateFormat broadcastDateFormat = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssX");//2016-10-29T16:15:00Z diff --git a/src/test/developTest/java/mServer/crawler/AddToFilmlistTest.java b/src/test/developTest/java/mServer/crawler/AddToFilmlistTest.java index 61d39e89a..030f04f4c 100644 --- a/src/test/developTest/java/mServer/crawler/AddToFilmlistTest.java +++ b/src/test/developTest/java/mServer/crawler/AddToFilmlistTest.java @@ -27,6 +27,7 @@ public class AddToFilmlistTest { private static final String FILM_NAME_ONLINE_M3U8 = "onlinefilm.m3u8"; private static final String FILM_NAME_OFFLINE_M3U8 = "offlinefilm.m3u8"; private static final String FILM_NAME_OFFLINE_BUT_HTML_RESPONSE = "ardofflinefilm.mp4"; + private static final String FILM_NAME_ARTE_EXTRAIT = "/am/ptweb/106000/106200/106287-011-A_EXT_EQ_1_VA-STA_06707579_MP4-1500_AMM-PTWEB_EXTRAIT_1mQDhYFo2y.mp4"; private static final String FILM_NAME_ORF_JUGENDSCHUTZ = "ipad/gp/Jugendschutz0600b2000_Q8C.mp4/playlist.m3u8"; private static final String FILM_TOPIC1 = "Topic 1"; private static final String FILM_TOPIC2 = "Topic 2"; @@ -53,6 +54,7 @@ public MockResponse dispatch(RecordedRequest request) throws InterruptedExceptio switch (request.getPath()) { case "/" + FILM_NAME_ONLINE: case "/" + FILM_NAME_ONLINE2: + case "/" + FILM_NAME_ARTE_EXTRAIT: return new MockResponse() .setResponseCode(200); case "/" + FILM_NAME_OFFLINE_BUT_HTML_RESPONSE: @@ -311,6 +313,16 @@ public void testNotAddOrfGeoBlockOffline() { assertThat(list.size(), equalTo(2)); } + @Test + public void testNotAddArteExtraits() { + listToAdd.add(createTestFilm(Const.ARTE_DE, FILM_TOPIC1, FILM_TITLE1, FILM_NAME_ARTE_EXTRAIT)); + + AddToFilmlist target = new AddToFilmlist(list, listToAdd); + target.addOldList(); + + assertThat(list.size(), equalTo(2)); + } + @Test public void testRefreshArdWebsite() { final DatenFilm testFilmUpdated = createTestFilm(Const.ARD, "Tatort", "Test Tatort", FILM_NAME_ONLINE);