MServer icon indicating copy to clipboard operation
MServer copied to clipboard

ZDF: neue Mediathek

Open pidoubleyou opened this issue 9 months ago • 10 comments

ZDF hat eine neue Mediathek. Der Crawler muss angepasst werden.

  • [ ] ZDF Crawler umstellen
  • [ ] Filter für nicht relevante Sender (ARD, ARTE, ...)
  • [ ] prüfen, ob 3sat/Phönix auch über die ZDF-Mediathek bestückt wird
  • [ ] prüfen, ob barrierefreie Inhalte und Fremdsprachen korrekt sind
  • [ ] prüfen, ob die "alten" Einträge kompatibel sind oder doppelte Einträge entstehen

pidoubleyou avatar Mar 18 '25 19:03 pidoubleyou

Ich habe mal einen oberflächlichen Blick auf Eure MServer-Sourcen geworfen und gesehen, das die Suche nach User.*Agent einige Treffer ergibt, habe allerdings keine Ahnung wie der Crawler arbeitet; Vielleicht hilft Folgendes trotzdem weiter: Ich benutzte neben MediathekView machmal auch Firefox mit Video-Download-Helper. Es nervt mich schon seit längerem, dass beim ZDF nur noch das fürs Wohnzimmer und mein Archiv ziemlich ungeeignete WebM,VP9,Opus Format angeboten wird. Da ab dieser Woche auch noch MediatheView für den MP4 download vom ZDF wegfällt, habe ich mal wieder einen User-Agent-Switcher in Firefox installiert, und das erste mal seit den 80er Jahren bin ich Apple dankbar, denn mit folgendem User-Agent findet Video-Downlad-Helper nach kurzem anspelen des Videos, die mp4-URL:

Mozilla/5.0 (iPad; CPU OS 18_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Mobile/15E148 Safari/605.1.15

irgendwer321 avatar Mar 21 '25 15:03 irgendwer321

Gerade bemerkt, dass mein Script nicht mehr läuft. Zum Glück, die einzige Änderung, die ich machen musste, war den Fallback API Token in Betrieb zu nehmen, der in MServer enthalten war [1], dann aber entfernt wurde [2]. Die HTML Seite enthält den Token nicht mehr, schließlich soll ja diese API auslaufen.

Demnächst kann man auf API v2 (?) migrieren: https://zdf-prod-futura.zdf.de/mediathekV2/document/${document_id}, wobei ${document_id} der Teil nach dem letzten Schrägstrich in der URL ist. Die neuen URLs enden nicht mehr mit .html. Gibt man im Browser die alte ein, wird auf die neue automatisch umgeleitet.

[1] https://github.com/mediathekview/MServer/commit/6a886f745e3e50ab6cc12c9551730cc79c88bad4 [2] https://github.com/mediathekview/MServer/commit/d2b417ba5569975472cb8c17c512eb781242ec82

andreygursky avatar Mar 21 '25 19:03 andreygursky

@andreygursky danke für die Erkenntnis. Das ist zumindest ein temporärer Workaround und gibt mir Zeit für die Umstellung auf die neue Mediathek.

pidoubleyou avatar Mar 21 '25 21:03 pidoubleyou

Zur Überbrückung: den Mediathek-Link mit jdownloader nutzen, dann bekommt man Downloadmöglichkeiten in diversen Auflösungen im mp4-Format zur Verfügung gestellt.

GuessWhosKnocking avatar Mar 21 '25 23:03 GuessWhosKnocking

Wäre es nicht auch einfach möglich, übergangsweise die ZDF-Sendungen aus der ARD-Mediathek zu holen?

FrankZ85 avatar Mar 22 '25 08:03 FrankZ85

Hallo, vielleicht hilfts ja, bin auch am Suchen.

Habe mit den "Filmseiten" angefangen z.B.:

heuteShow: https://www.zdf.de/play/shows/heute-show-104/heute-show-vom-21-maerz-2025-100

das APIToken ist auch auf der Seite: "appToken":{"apiToken":"aa3noh4ohz9eeboo8shiesheec9ciequ9Quah7el"

und darin findet sich ein API-Aufruf (kann so nachgebaut werden):

curl 'https://api.zdf.de/tmd/2/ngplayer_2_5/vod/ptmd/mediathek/250321_sendung_hsh_dgs/3?caption_source=250321_sendung_hsh%2F3' --compressed -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0' -H 'Accept: application/vnd.de.zdf.v1.0+json' -H 'Accept-Language: de-DE,en-US;q=0.7,en;q=0.3' -H 'Accept-Encoding: gzip, deflate, br, zstd' -H 'Referer: https://www.zdf.de/' -H 'Api-Auth: Bearer ahBaeMeekaiy5ohsai4bee4ki6Oopoi5quailieb' -H 'Origin: https://www.zdf.de' -H 'DNT: 1' -H 'Sec-GPC: 1' -H 'Connection: keep-alive' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' -H 'Sec-Fetch-Site: same-site' -H 'Priority: u=4' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'TE: trailers'

oder einfach auch:

wget --header="Api-Auth: Bearer ahBaeMeekaiy5ohsai4bee4ki6Oopoi5quailieb" https://api.zdf.de/tmd/2/ngplayer_2_5/vod/ptmd/mediathek/250321_sendung_hsh_dgs/3

der liefert dann eine JSON in der sind die URLs der Filmdownloads (dummerweise für die mit Audio..???)

z.B.:

https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh_dgs/1/250321_sendung_hsh_dgs_6628k_p61v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh_dgs/1/250321_sendung_hsh_dgs_3328k_p15v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh_dgs/1/250321_sendung_hsh_dgs_1628k_p13v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh_dgs/1/250321_sendung_hsh_dgs_808k_p11v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh_dgs/1/250321_sendung_hsh_dgs_508k_p9v17.mp4

aus denen kann man dann aber die bauen:

https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh/1/250321_sendung_hsh_6628k_p61v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh/1/250321_sendung_hsh_3328k_p15v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh/1/250321_sendung_hsh_1628k_p13v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh/1/250321_sendung_hsh_808k_p11v17.mp4 https://nrodlzdf-a.akamaihd.net/none/zdf/25/03/250321_sendung_hsh/1/250321_sendung_hsh_508k_p9v17.mp4

und das sind die regulären VideoURls

xaverW avatar Mar 22 '25 10:03 xaverW

ist noch ein API-Aufruf drin:

wget --header="Api-Auth: Bearer ahBaeMeekaiy5ohsai4bee4ki6Oopoi5quailieb" https://api.zdf.de/tmd/2/ngplayer_2_5/vod/ptmd/mediathek/250321_sendung_hsh/3

der liefert dann gleich die richtigen FilmUrls Unterschied: hsh_dgs

wget --header="Api-Auth: Bearer ahBaeMeekaiy5ohsai4bee4ki6Oopoi5quailieb" https://api.zdf.de/tmd/2/ngplayer_2_5/vod/ptmd/mediathek/250321_sendung_hsh_dgs/3

xaverW avatar Mar 22 '25 12:03 xaverW

es gibt beim ZDF einige Beiträge die nur eine "kleine" URL haben, die landen dann nicht in der Liste. Wenn die NORMAL URL leer ist, wird nichts in die Liste aufgenommen.

ZB.: BR Retro, Tatort, einige Phönix Beiträge

habs mal (zum Testen im ZdfDownloadDtoDeserializer) ausprobiert und die Qualität fest auf "NORMAL" gesetzt:

// final LiveConst.Qualities qualityValue = parseVideoQuality(quality); final LiveConst.Qualities qualityValue = LiveConst.Qualities.NORMAL;

Wenn die gefundene Qualität fest auf NORMAL gesetzt wird, werden die Beiträge einsortiert. Ist das gewollt, dass nur Filme mit "NORMALER" Auflösung einsortiert werden?

xaverW avatar Mar 26 '25 10:03 xaverW

@xaverW es könnte sein, dass das erst seit einer kürzlich erfolgten Änderung in den Auflösungen passieren könnte (siehe #1032). Deine Beispiele beziehen sich auf Sender, die aktuell nicht aus der ZDF-Mediathek bestückt werden - somit dürfte es ein theoretisches Problem sein.

pidoubleyou avatar Mar 26 '25 20:03 pidoubleyou

MSearch [Vers.: 3.1.250] (aktuell von heute, MASTER)

Das habe ich zum Zählen geändert:

private void addFilm(final DownloadDto downloadDto, final ZdfFilmDto result) {
     boolean found = false;
     for (final String language : downloadDto.getLanguages()) {

         if (downloadDto.getUrl(language, Qualities.NORMAL).isPresent()) {
             DownloadDtoFilmConverter.getOptimizedUrls(
                     downloadDto.getDownloadUrls(language), Optional.of(optimizer));

             final DatenFilm filmWithLanguage = createFilm(result, downloadDto, language);
             taskResults.add(filmWithLanguage);
             System.out.println("=== mit URL: " + ++count1 + " " +
                     filmWithLanguage.arr[DatenFilm.FILM_THEMA] + " - " +
                     filmWithLanguage.arr[DatenFilm.FILM_TITEL]);
             found = true;
         }
     }

     if (!found) {
         for (final String language : downloadDto.getLanguages()) {
             if (downloadDto.getUrl(language, Qualities.SMALL).isPresent()) {
                 System.out.println("xxx keine URL: " + ++count2 + " " +
                         (result.getTopic().isPresent() ? result.getTopic().get() : "") +
                         " - " + result.getTitle());
                 break;
             }
         }
     }
 }

Habs mal (mit max 5Min) laufen lassen:

einmal damit: final Qualities qualityValue = parseVideoQuality(quality.getAsJsonObject());

=== mit URL: 525 Der Bergdoktor - Verantwortung (1) (S06/E03) (Audiodeskription) === mit URL: 526 The Bay - Verluste (S02/E04) === mit URL: 527 The Bay - Verluste (S02/E04) (Englisch) xxx keine URL: 441 SWR1 Leute - Sönke Iwersen - Investigativjournalist - So sieht es bei Tesla und Elon Musk wirklich aus xxx keine URL: 442 Eisenbahn-Romantik - Die Furka-Bergstrecke - eine legendäre Bahnlinie erwacht zu neuem Leben === mit URL: 528 Josefine, Törtel und die Tiere - Der Igelfreund (S01/E20) xxx keine URL: 443 ARD Klassik - Strauß (Sohn) · Furioso-Polka · WDR Sinfonieorchester · Manfred Honeck · WDR === mit URL: 529 Doku Reise - Im Hügelland der Venezianer === mit URL: 530 heute - in Deutschland - Weniger Frauen im Bundestag === mit URL: 531 Ratgeber - Kinder und Jugendliche mental stärken o ================================ o ================================ o und wird jetzt gestoppt o Zeit: 27.03.2025 14:09:30 o ================================ o ================================

und damit: final Qualities qualityValue = Qualities.NORMAL;

=== mit URL: 837 Der Alte - Blume des Bösen - Neue Folgen (S49/E01) (Audiodeskription) === mit URL: 838 KiKANiNCHEN - Das Schwein hat schlechte Laune === mit URL: 839 Die WG - Freundschaft für immer === mit URL: 840 KUMMERKASTEN - Fühlst du es? - Ekel === mit URL: 841 aktiv und gesund - Fermentierte Lebensmittel, bunte Beete, Kung Fu === mit URL: 842 das aktuelle sportstudio - Schäfer über Hoeneß-Gerücht: "Das ist falsch" - Fußball-Bundesliga | SC Freiburg - RB Leipzig 0:0 === mit URL: 843 Politik - CDU-Chef Merz: "Mehrere Bälle in der Luft" o ================================ o ================================ o und wird jetzt gestoppt o Zeit: 27.03.2025 14:21:38 o ================================ o ================================

habe dann mal den ganzen Durchlauf gamacht und mit der "normalen" Filmliste verglichen

<suchen-sender-wie>max</suchen-sender-wie>
<system-crawler-list>ZDF</system-crawler-list>
<suchen-max-warten>90</suchen-max-warten>

und das sind ein paar Themen die gefunden wurden und in der "normalen" Liste nicht enthalten sind (Sender: ZDF)

tagesthemen tagesschau Zwischen Spessart und Karwendel extra 3 Brokenwood – Mord in Neuseeland Filme im Ersten

Ist nur eine Info, vielleicht steh ich ja da irgendwo auf der Leitung :)

xaverW avatar Mar 27 '25 16:03 xaverW

Ein erster Stand ist im Master enthalten. Für DEV sind noch einige Todos im Code, die zu tun sind.

pidoubleyou avatar Jul 06 '25 14:07 pidoubleyou

@pidoubleyou sagte: Für DEV sind noch einige Todos im Code, die zu tun sind.

Image

Wie es scheint, kommen beim Sender 3sat (technisch beim ZDF gehostet) seit der letzten Änderung beim ZDF-Crawler keine neuen Sendungen in der Filmliste mehr an. Die letzten stammen vom 5.7. Die wenigen neueren Sendungen (15 an der Zahl) wurden wohl schon vorab vom Crawler erfasst.

Image

. Bsp. aus dem Forum: Kulturzeit (ZDF-Mediathek), welche bislang offenbar aus der 3sat-Mediathek gespiesen wurde (vgl. obiger Screenshot: 6.–8. Eintrag von unten).

styroll avatar Jul 09 '25 10:07 styroll

@styroll danke für den Hinweis. Phoenix ist auch betroffen, Fix ist auf dem Weg.

pidoubleyou avatar Jul 09 '25 20:07 pidoubleyou