Skip to content

Commit e6f1aa7

Browse files
authored
Merge pull request #1104 from mediathekview/feature/SRFfixes
Feature/sr ffixes
2 parents eb46578 + 63a274f commit e6f1aa7

File tree

10 files changed

+60
-97
lines changed

10 files changed

+60
-97
lines changed

src/main/java/de/mediathekview/mserver/crawler/srf/SrfConstants.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,7 @@ private SrfConstants() {}
1313
* URL für Übersichtsseite einer Sendung
1414
* Parameter: Id
1515
*/
16-
public static final String SHOW_OVERVIEW_PAGE_URL = "%s/play/v3/api/srf/production/videos-by-show-id?showId=%s";
17-
/**
18-
* URL für folgende Übersichtsseiten einer Sendung
19-
* Parameter: Id, next-"Key"
20-
*/
21-
public static final String SHOW_OVERVIEW_NEXT_PAGE_URL = SHOW_OVERVIEW_PAGE_URL + "&next=%s";
16+
public static final String SHOW_OVERVIEW_PAGE_URL = "https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/%s?vector=portalplay&pageSize=20";
2217
/**
2318
* URL für Detailsinformation einer Folge
2419
* Parameter: Id
@@ -30,6 +25,7 @@ private SrfConstants() {}
3025
* Parameter: Thema, Titel, Id
3126
*/
3227
public static final String WEBSITE_URL = "https://www.srf.ch/play/tv/%s/video/%s?id=%s";
28+
public static final String WEBSITE_URL_WITH_URN = "https://www.srf.ch/play/tv/%s/video/%s?urn=%s";
3329

3430
/**
3531
* Id der Sendung SportClip, die nicht unter Sendungen A-Z gelistet ist

src/main/java/de/mediathekview/mserver/crawler/srf/parser/SrfFilmJsonDeserializer.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class SrfFilmJsonDeserializer implements JsonDeserializer<Optional<Film>>
3939
private static final String ATTRIBUTE_QUALITY = "quality";
4040
private static final String ATTRIBUTE_TITLE = "title";
4141
private static final String ATTRIBUTE_URL = "url";
42+
private static final String ATTRIBUTE_URN = "urn";
4243

4344
private static final String ELEMENT_CHAPTER_LIST = "chapterList";
4445
private static final String ELEMENT_EPISODE = "episode";
@@ -82,12 +83,17 @@ private void addUrls(final Map<Resolution, String> aVideoUrls, final Film aFilm,
8283
}
8384

8485
private static Optional<URL> buildWebsiteUrl(
85-
final String aId, final String aTitle, final String aTheme) {
86-
87-
final String url =
86+
final String aId, final String aUrn, final String aTitle, final String aTheme) {
87+
String url = "";
88+
if (aUrn == "") {
89+
url =
8890
String.format(
8991
SrfConstants.WEBSITE_URL, replaceCharForUrl(aTheme), replaceCharForUrl(aTitle), aId);
90-
92+
} else {
93+
url =
94+
String.format(
95+
SrfConstants.WEBSITE_URL_WITH_URN, replaceCharForUrl(aTheme), replaceCharForUrl(aTitle), aUrn);
96+
}
9197
try {
9298
return Optional.of(URI.create(url).toURL());
9399
} catch (final MalformedURLException ex) {
@@ -105,6 +111,15 @@ private static String replaceCharForUrl(final String aValue) {
105111
.replace(',', '-')
106112
.replace(":", "")
107113
.replace("\"", "")
114+
.replace("|", "")
115+
.replace("#", "")
116+
.replace("?", "")
117+
.replace("%", "")
118+
.replace("&", "")
119+
.replace("`", "")
120+
.replace("«", "")
121+
.replace("»", "")
122+
.replace(" ", "")
108123
.replace("--", "-");
109124
}
110125

@@ -250,7 +265,7 @@ public Optional<Film> deserialize(
250265
episodeData.publishDate,
251266
chapterList.duration);
252267
film.setBeschreibung(chapterList.description);
253-
film.setWebsite(buildWebsiteUrl(chapterList.id, episodeData.title, theme).orElse(null));
268+
film.setWebsite(buildWebsiteUrl(chapterList.id, chapterList.urn, episodeData.title, theme).orElse(null));
254269
addUrls(videoUrls, film, isAudioDescription);
255270
addSubtitle(chapterList.subtitleUrl, film);
256271

@@ -302,6 +317,10 @@ private ChapterListData parseChapterList(final JsonObject aJsonObject) {
302317
if (chapterListEntry.has(ATTRIBUTE_ID)) {
303318
result.id = chapterListEntry.get(ATTRIBUTE_ID).getAsString();
304319
}
320+
321+
if (chapterListEntry.has(ATTRIBUTE_URN)) {
322+
result.urn = chapterListEntry.get(ATTRIBUTE_URN).getAsString();
323+
}
305324

306325
if (chapterListEntry.has(ATTRIBUTE_DURATION)) {
307326
final long duration = chapterListEntry.get(ATTRIBUTE_DURATION).getAsLong();
@@ -406,5 +425,6 @@ private class ChapterListData {
406425
String description = "";
407426
String videoUrl = "";
408427
String subtitleUrl = "";
428+
String urn = "";
409429
}
410430
}

src/main/java/de/mediathekview/mserver/crawler/srf/parser/SrfTopicDeserializer.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
public class SrfTopicDeserializer implements JsonDeserializer<PagedElementListDTO<CrawlerUrlDTO>> {
1616

1717
private static final String ELEMENT_DATA = "data";
18+
private static final String ELEMENT_MEDIALIST = "mediaList";
1819
private static final String ATTRIBUTE_ID = "urn";
1920
private static final String ATTRIBUTE_NEXT = "next";
2021

@@ -23,22 +24,19 @@ public PagedElementListDTO<CrawlerUrlDTO> deserialize(
2324
JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
2425
final PagedElementListDTO<CrawlerUrlDTO> results = new PagedElementListDTO<>();
2526

26-
if (!jsonElement.getAsJsonObject().has(ELEMENT_DATA)
27-
|| !jsonElement.getAsJsonObject().get(ELEMENT_DATA).getAsJsonObject().has(ELEMENT_DATA)
28-
|| !jsonElement
29-
.getAsJsonObject()
30-
.get(ELEMENT_DATA)
31-
.getAsJsonObject()
32-
.get(ELEMENT_DATA)
33-
.isJsonArray()) {
34-
return results;
27+
if (jsonElement.getAsJsonObject().has(ELEMENT_DATA) && jsonElement.getAsJsonObject().get(ELEMENT_DATA).getAsJsonObject().has(ELEMENT_DATA)) {
28+
results.setNextPage(parseNextPage(jsonElement.getAsJsonObject().get(ELEMENT_DATA).getAsJsonObject()));
29+
results.addElements(parseEpisodeElement(jsonElement.getAsJsonObject().get(ELEMENT_DATA).getAsJsonObject().getAsJsonArray(ELEMENT_DATA)).getElements());
30+
} else if (jsonElement.getAsJsonObject().has(ELEMENT_MEDIALIST)) {
31+
results.setNextPage(parseNextPage(jsonElement.getAsJsonObject()));
32+
results.addElements(parseEpisodeElement(jsonElement.getAsJsonObject().getAsJsonArray(ELEMENT_MEDIALIST)).getElements());
3533
}
34+
return results;
35+
}
36+
3637

37-
final JsonObject dataObject = jsonElement.getAsJsonObject().get(ELEMENT_DATA).getAsJsonObject();
38-
39-
results.setNextPage(parseNextPage(dataObject));
40-
41-
final JsonArray data = dataObject.getAsJsonArray(ELEMENT_DATA);
38+
private PagedElementListDTO<CrawlerUrlDTO> parseEpisodeElement(JsonArray data) {
39+
final PagedElementListDTO<CrawlerUrlDTO> results = new PagedElementListDTO<>();
4240
data.forEach(
4341
entry -> {
4442
final Optional<String> id =
@@ -49,7 +47,6 @@ public PagedElementListDTO<CrawlerUrlDTO> deserialize(
4947
results.addElement(
5048
new CrawlerUrlDTO(String.format(SrfConstants.SHOW_DETAIL_PAGE_URL, s))));
5149
});
52-
5350
return results;
5451
}
5552

@@ -59,7 +56,6 @@ private Optional<String> parseNextPage(final JsonObject dataObject) {
5956
if (next.isPresent() && !next.get().isEmpty()) {
6057
return next;
6158
}
62-
6359
return Optional.empty();
6460
}
6561
}

src/main/java/de/mediathekview/mserver/crawler/srf/parser/SrfTopicsDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public Set<TopicUrlDTO> deserialize(
3737
id.ifPresent(
3838
s ->
3939
results.add(
40-
new TopicUrlDTO(s, String.format(SrfConstants.SHOW_OVERVIEW_PAGE_URL, SrfConstants.BASE_URL, s))));
40+
new TopicUrlDTO(s, String.format(SrfConstants.SHOW_OVERVIEW_PAGE_URL, s))));
4141
});
4242

4343
return results;

src/main/java/de/mediathekview/mserver/crawler/srf/tasks/SrfFilmDetailTask.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.util.Queue;
2323

2424
public class SrfFilmDetailTask extends AbstractRestTask<Film, CrawlerUrlDTO> {
25-
25+
private static final long serialVersionUID = 7984235678468580128L;
2626
private static final Logger LOG = LogManager.getLogger(SrfFilmDetailTask.class);
2727

2828
public SrfFilmDetailTask(
@@ -79,6 +79,8 @@ private void parseFilm(final Response response, final URI uri) {
7979
crawler.incrementAndGetErrorCount();
8080
}
8181
crawler.updateProgress();
82+
} else {
83+
crawler.incrementAndGetErrorCount();
8284
}
8385
} catch (final JsonSyntaxException e) {
8486
LOG.error("SrfFilmDetailTask: Error reading url {}", uri, e);

src/main/java/de/mediathekview/mserver/crawler/srf/tasks/SrfTopicOverviewTask.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import de.mediathekview.mserver.crawler.srf.parser.SrfTopicDeserializer;
88

99
import jakarta.ws.rs.client.WebTarget;
10+
1011
import java.lang.reflect.Type;
1112
import java.util.Optional;
1213
import java.util.Queue;
@@ -67,7 +68,9 @@ private void processNextPage(final String aTopic, final String aNextPageId) {
6768
urlDtos.add(
6869
new TopicUrlDTO(
6970
aTopic,
70-
String.format(SrfConstants.SHOW_OVERVIEW_NEXT_PAGE_URL, baseUrl, aTopic, aNextPageId)));
71+
aNextPageId
72+
)
73+
);
7174
final Set<CrawlerUrlDTO> results = createNewOwnInstance(urlDtos, pageNumber + 1).invoke();
7275
taskResults.addAll(results);
7376
}

src/main/java/de/mediathekview/mserver/crawler/srf/tasks/SrfTopicsOverviewTask.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@ private Set<TopicUrlDTO> addSpecialShows() {
4747
SrfConstants.ID_SHOW_SPORT_CLIP,
4848
String.format(
4949
SrfConstants.SHOW_OVERVIEW_PAGE_URL,
50-
SrfConstants.BASE_URL,
51-
SrfConstants.ID_SHOW_SPORT_CLIP)));
52-
50+
SrfConstants.ID_SHOW_SPORT_CLIP))
51+
);
5352
return shows;
5453
}
5554
}

src/test/java/de/mediathekview/mserver/crawler/srf/parser/SrfFilmJsonDeserializerTest.java

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static Collection<Object[]> data() {
9090
LocalDateTime.of(2010, 5, 17, 20, 7, 6),
9191
3305100,
9292
"Spannung pur, wenn Susanne Kunz die Frage stellt und der Kandidat zwar eine Ahnung hat aber nicht ganz sicher ist ob die Antwort stimmt. Dann wird es im Studio «1 gegen 100» ruhig und man spürt die Anspannung des Kandidaten förmlich. Nimmt er nun einen Joker zur Hilfe oder setzt er alles auf eine Karte und riskiert, ohne Geld und als Verlierer vom Platz zu gehen? Köpfchen, Mut und Taktik sind gefr\n.....",
93-
"https://www.srf.ch/play/tv/1-gegen-100/video/1-gegen-100-vom-17-05-2010?id=22b9dd2c-d1fd-463b-91de-d804eda74889",
93+
"https://www.srf.ch/play/tv/1-gegen-100/video/1-gegen-100-vom-17-05-2010?urn=urn:srf:video:22b9dd2c-d1fd-463b-91de-d804eda74889",
9494
"https://hdvodsrforigin-f.akamaihd.net/i/vod/1gegen100/2010/05/1gegen100_20100517_200706_web_h264_16zu9_,lq1,mq1,hq1,.mp4.csmil/index_2_av.m3u8",
9595
"",
9696
"",
@@ -108,7 +108,7 @@ public static Collection<Object[]> data() {
108108
LocalDateTime.of(2018, 1, 2, 19, 54, 0),
109109
333000,
110110
"Meteo",
111-
"https://www.srf.ch/play/tv/srf-meteo/video/meteo-vom-02-01-2018-1955?id=4228f550-8702-4276-8001-03a1589804ef",
111+
"https://www.srf.ch/play/tv/srf-meteo/video/meteo-vom-02-01-2018-1955?urn=urn:srf:video:4228f550-8702-4276-8001-03a1589804ef",
112112
"https://srfvodhd-vh.akamaihd.net/i/vod/meteo/2018/01/meteo_20180102_195400_8400830_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_0_av.m3u8",
113113
"https://srfvodhd-vh.akamaihd.net/i/vod/meteo/2018/01/meteo_20180102_195400_8400830_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_5_av.m3u8",
114114
"",
@@ -126,7 +126,7 @@ public static Collection<Object[]> data() {
126126
LocalDateTime.of(2018, 11, 8, 20, 0, 0),
127127
183960,
128128
"«sportflash» ist jung und schnell. Der Einstieg in den Hauptabend auf SRF zwei bringt das Sportgeschehen aus aller Welt auf den Punkt. Von Montag bis Samstag zeigt das Format die wichtigsten News und besten Bilder des Tages. Auch Unkonventionelles und Unterhaltendes hat in der Sendung Platz.",
129-
"https://www.srf.ch/play/tv/sportflash/video/sportflash?id=0e2490f3-743a-440d-9a58-f5d9d3e33e87",
129+
"https://www.srf.ch/play/tv/sportflash/video/sportflash?urn=urn:srf:video:0e2490f3-743a-440d-9a58-f5d9d3e33e87",
130130
"https://srfvodhd-vh.akamaihd.net/i/vod/sportflashtv/2018/11/sportflashtv_20181108_200102_12368079_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_0_av.m3u8",
131131
"https://srfvodhd-vh.akamaihd.net/i/vod/sportflashtv/2018/11/sportflashtv_20181108_200102_12368079_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_5_av.m3u8",
132132
"",
@@ -144,7 +144,7 @@ public static Collection<Object[]> data() {
144144
LocalDateTime.of(2018, 11, 14, 11, 45, 0),
145145
2549760,
146146
"Was soll Vanessa bloss tun? Sind ihre Tricks und Manipulationen plötzlich wirkungslos? Doch gefühlslos ist Vanessa nicht: Sie vermisst ihr kleines Kind ganz schrecklich.",
147-
"https://www.srf.ch/play/tv/lena-–-liebe-meines-lebens/video/kapitel-156?id=69d9fc3f-a3fd-4802-b2ee-ede92145e87c",
147+
"https://www.srf.ch/play/tv/lena-–-liebe-meines-lebens/video/kapitel-156?urn=urn:srf:video:69d9fc3f-a3fd-4802-b2ee-ede92145e87c",
148148
"https://srfvodhd-vh.akamaihd.net/i/vod/lena/2018/11/lena_20181114_114517_12440540_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_0_av.m3u8",
149149
"https://srfvodhd-vh.akamaihd.net/i/vod/lena/2018/11/lena_20181114_114517_12440540_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_5_av.m3u8",
150150
"",
@@ -162,7 +162,7 @@ public static Collection<Object[]> data() {
162162
LocalDateTime.of(2020, 1, 26, 22, 25, 0),
163163
1319000,
164164
"Seit einem Jahr wohnt Gassann Nyangi in Pristina. Der sprachbegabte Berner spricht bereits Albanisch mit kosovarischem Akzent. Das gefällt den Einheimischen: Seit er gemeinsam mit dem kosovarischen Rapper Capital T. einen Song produziert hat, wurde Cliqme dort auf einen Schlag bekannt. In der Schweiz trat er bereits als MC auf – als sogenannter Warmup für Superstars. Jetzt reisst Cliqme auf der Bü\n.....",
165-
"https://www.srf.ch/play/tv/reporter/video/cliqme-–-der-berner-star-im-kosovo?id=2b08d6d3-9a7a-4827-9f7b-20f89e1ad144",
165+
"https://www.srf.ch/play/tv/reporter/video/cliqme-–-der-berner-star-im-kosovo?urn=urn:srf:video:2b08d6d3-9a7a-4827-9f7b-20f89e1ad144",
166166
"https://hdvodsrforigin-f.akamaihd.net/i/vod/reporter/2019/12/reporter_20191211_172931_18722867_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_0_av.m3u8",
167167
"https://hdvodsrforigin-f.akamaihd.net/i/vod/reporter/2019/12/reporter_20191211_172931_18722867_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index_5_av.m3u8",
168168
"",
@@ -180,50 +180,14 @@ public static Collection<Object[]> data() {
180180
LocalDateTime.of(2022, 3, 17, 15, 10, 0),
181181
1559400,
182182
"Im Motel geht es zu wie in einem Bienenhaus – in einem der glamourösen Art: Der rührige Motel-Direktor Bieri hat eine Modeschau organisiert. Bei dieser Gelegenheit begegnet er seiner Ex-Freundin Roberta. Sie ist als Stylistin für die Models tätig. Verblüfft und auch etwas eifersüchtig erfährt Bieri, dass Roberta inzwischen geheiratet hat. Als sie ihm ihren Gatten vorstellt, fallen dem Direktor fas\n.....",
183-
"https://www.srf.ch/play/tv/motel/video/modeschau-(staffel-1-folge-29)?id=7aae02fd-efb2-43de-8521-babd80718e89",
183+
"https://www.srf.ch/play/tv/motel/video/modeschau-(staffel-1-folge-29)?urn=urn:srf:video:7aae02fd-efb2-43de-8521-babd80718e89",
184184
"http://localhost:8589/world/hls/motel/2022/03/motel_20220314_001922_9130234_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f4-v1-a1.m3u8",
185185
"http://localhost:8589/world/hls/motel/2022/03/motel_20220314_001922_9130234_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f5-v1-a1.m3u8",
186186
"http://localhost:8589/world/hls/motel/2022/03/motel_20220314_001922_9130234_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f6-v1-a1.m3u8",
187187
"",
188188
"",
189189
"",
190190
""
191-
},
192-
{
193-
"/srf/srf_film_page_only_filename_in_m3u8_2.json",
194-
"/srf/srf_film_page_only_filename_in_m3u8_2.m3u8",
195-
"/ad8d4d80-5639-43e2-a59f-9a981029b4de/SRFVOD-ee4a4797-3dde.ism/manifest(format=m3u8-aapl,encryption=cbcs-aapl)?caption=srf/948d8f5a-03a7-49e2-b174-a4b7b3c4a043/episode/de/vod/vod.m3u8:de:Deutsch:sdh&webvttbaseurl=https://www.srf.ch/subtitles",
196-
"Station 19",
197-
"Familienbande (Staffel 4, Folge 3)",
198-
LocalDateTime.of(2022, 3, 21, 21, 45, 0),
199-
2413920,
200-
"Die Zukunft von Sullivan hängt am seidenen Faden: Seine Anhörung vor der Feuerwehr-Kommission steht an. Als Zeugen sind Ben Warren, Richard Webber, Emmett Dixon und der ehemalige Fire Chief Michael Dixon vorgesehen. Ben versucht, während der Verhandlung auf die landesweite Opioid-Krise hinzuweisen und macht diese für Sullivans Handlungen mitverantwortlich. Webber hält eine flammende Rede für Abhän\n.....",
201-
"https://www.srf.ch/play/tv/station-19/video/familienbande-(staffel-4-folge-3)?id=cf776586-de57-481f-8473-f96f9b0f91b4",
202-
"http://localhost:8589/ad8d4d80-5639-43e2-a59f-9a981029b4de/SRFVOD-ee4a4797-3dde.ism/QualityLevels(1199924)/Manifest(video,format=m3u8-aapl)",
203-
"http://localhost:8589/ad8d4d80-5639-43e2-a59f-9a981029b4de/SRFVOD-ee4a4797-3dde.ism/QualityLevels(1999872)/Manifest(video,format=m3u8-aapl)",
204-
"",
205-
"",
206-
"",
207-
"",
208-
"https://www.srf.ch/subtitles/srf/948d8f5a-03a7-49e2-b174-a4b7b3c4a043/episode/de/vod/vod.vtt"
209-
},
210-
{
211-
"/srf/srf_film_page_audiodesc.json",
212-
"/srf/srf_film_page_audiodesc.m3u8",
213-
"/ch/hls/spielfilm_aud/2022/08/spielfilm_aud_20220725_161504_11142089_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/master.m3u8",
214-
"Film",
215-
"Ostfriesenkiller",
216-
LocalDateTime.of(2022, 8, 2, 21, 37, 0),
217-
5370000,
218-
"Norddeich ist ein wahrhaft friedlicher Urlaubsort an der Nordseeküste – bis eine Serie von Morden die kleine Stadt erschüttert. Für Hauptkommissarin Ann Kathrin Klaasen (Christiane Paul), die gerade selbst in einer tiefen Lebenskrise steckt, wird dieser Fall zu einer Bewährungsprobe, die ihre bisherige Vorstellung von Gut und Böse vollkommen über den Haufen wirft. Ulf Speicher (Michael Sideris)\n.....",
219-
"https://www.srf.ch/play/tv/film-mit-audiodeskription/video/ostfriesenkiller-mit-audiodeskription?id=9168b52f-2b37-4638-9ed0-cfd9c22eec1c",
220-
"",
221-
"",
222-
"",
223-
"http://localhost:8589/ch/hls/spielfilm_aud/2022/08/spielfilm_aud_20220725_161504_11142089_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f4-v1-a1.m3u8",
224-
"http://localhost:8589/ch/hls/spielfilm_aud/2022/08/spielfilm_aud_20220725_161504_11142089_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f5-v1-a1.m3u8",
225-
"http://localhost:8589/ch/hls/spielfilm_aud/2022/08/spielfilm_aud_20220725_161504_11142089_v_webcast_h264_,q40,q10,q20,q30,q50,q60,.mp4.csmil/index-f6-v1-a1.m3u8",
226-
""
227191
}
228192
});
229193
}

src/test/java/de/mediathekview/mserver/crawler/srf/parser/SrfTopicsDeserializerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@ public void test() {
1818
new TopicUrlDTO[] {
1919
new TopicUrlDTO(
2020
"c6a639e7-97a0-0001-5112-19c512b01474",
21-
"https://www.srf.ch/play/v3/api/srf/production/videos-by-show-id?showId=c6a639e7-97a0-0001-5112-19c512b01474"),
21+
"https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/c6a639e7-97a0-0001-5112-19c512b01474?vector=portalplay&pageSize=20"),
2222
new TopicUrlDTO(
2323
"c5a89422-4580-0001-4f24-1889dc30d730",
24-
"https://www.srf.ch/play/v3/api/srf/production/videos-by-show-id?showId=c5a89422-4580-0001-4f24-1889dc30d730"),
24+
"https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/c5a89422-4580-0001-4f24-1889dc30d730?vector=portalplay&pageSize=20"),
2525
new TopicUrlDTO(
2626
"c5e431c3-ab90-0001-3228-16001350159c",
27-
"https://www.srf.ch/play/v3/api/srf/production/videos-by-show-id?showId=c5e431c3-ab90-0001-3228-16001350159c"),
27+
"https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/c5e431c3-ab90-0001-3228-16001350159c?vector=portalplay&pageSize=20"),
2828
new TopicUrlDTO(
2929
"42e39d12-e1e5-4f2e-b620-7db7e23c575c",
30-
"https://www.srf.ch/play/v3/api/srf/production/videos-by-show-id?showId=42e39d12-e1e5-4f2e-b620-7db7e23c575c"),
30+
"https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/42e39d12-e1e5-4f2e-b620-7db7e23c575c?vector=portalplay&pageSize=20"),
3131
new TopicUrlDTO(
3232
"79fe1336-b513-4342-b389-001bf89b8ea2",
33-
"https://www.srf.ch/play/v3/api/srf/production/videos-by-show-id?showId=79fe1336-b513-4342-b389-001bf89b8ea2"),
33+
"https://il.srgssr.ch/integrationlayer/2.0/srf/mediaList/video/latest/byShow/79fe1336-b513-4342-b389-001bf89b8ea2?vector=portalplay&pageSize=20"),
3434
};
3535

3636
final JsonElement jsonElement = JsonFileReader.readJson("/srf/srf_topics_page.json");

0 commit comments

Comments
 (0)