Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARTE: Crawler findet keine Einträge mehr #1009

Closed
pidoubleyou opened this issue Sep 17, 2024 · 21 comments · Fixed by #1010
Closed

ARTE: Crawler findet keine Einträge mehr #1009

pidoubleyou opened this issue Sep 17, 2024 · 21 comments · Fixed by #1010

Comments

@pidoubleyou
Copy link
Contributor

erste Analyse: Ermittlung der Videostreams scheitert mit 403

@andreygursky
Copy link

andreygursky commented Sep 17, 2024

Seit dem Abend 16.09.2024 funktioniert API

https://api.arte.tv/api/opa/v3/videoStreams?&limit=100&programId=12345-123-A

nicht mehr.

Die separaten Video- und Audio-Spuren funktionieren nach wie vor:

https://api.arte.tv/api/player/v2/config/de/12345-123-A --> json
json: data -> attributes -> streams -> url --> m3u8
m3u8:
  - video mp4 ... / 720p / 1080p / sehr selten HEVC h.265 1080p + HEVC h.265 2160p (4K)
  - audio m4a
  - Untertiteln vtt

@pidoubleyou
Copy link
Contributor Author

@andreygursky das ist korrekt. wir hatten uns vor einiger Zeit aufgrund der Client-Vielfalt bewusst dagegen entschieden, da mp4-Urls deutlich einfacher in der Handhabung sind.

Ich habe die Befürchtung, dass wir die Umstellung jetzt tatsächlich machen müssen 😒

@styroll
Copy link

styroll commented Sep 18, 2024

@pidoubleyou sagte: Ich habe die Befürchtung, dass wir die Umstellung jetzt tatsächlich machen müssen

In diesem Kontext ein Wunsch für die Umsetzung bei der Auswertung der Referenzen im m3u8-Playlist-File :
Wie bei der ARD die Zuweisung:

  • Höchste/Hoch: FHD ("RESOLUTION=1920x1080") oder besser: -map p:1 (bzw. -map v:1 -map a:0); nummeriert bzw. gelesen werden die Streams im Masterfile durch ffmpeg immer so: 0, 1, 2, 3 etc.
  • Mittel: HD ("RESOLUTION=1280x720"): -map p:2 (bzw. -map v:2 -map a:0)
  • Niedrig: SD ("RESOLUTION=640x360"): -map p:3 (bzw. -map v:3 -map a:0)

Begründung (wie bereits in diesem Thread aufgeführt): Diese 3 Auflösungen dürften rein mathematisch bzw. auch real die Bedürfnisse von fast allen Usern abdecken:

  1. SD: für Leute mit niedriger DL-Rate
  2. HD (mit einer Verdoppelung der Bildbreite gegenüber SD): für Leute, die so ziemlich alles auf externen HD speichern (Kompromiss zwischen Qualität und Speicherbedarf) oder Inhalte nur auf Bildschirmen konsumieren, wo FHD wenig Mehrwert bringt und/oder v.a. eine Sendung nur einmal anschauen (wie Talkssendungen, Doks etc) und diese nicht archivieren wollen.
  3. FHD (mit einer Verdreifachung der Bildbreite gegenüber SD): für Leute, welche immer die beste Qualität wollen

Beispiel für https://www.arte.tv/de/videos/109358-065-A/stadt-land-kunst/ wenn man den HD-Programmstream (p:2), d.h. die Video- inkl. darin referenzierte Audiospur abgreift:

ffmpeg -i https://manifest-arte.akamaized.net/api/manifest/v1/Generate/2024090706A91BDB3FF61C8BECAD67A79620F2CC7A/de/XQ+KS/109358-065-A.m3u8 -map 0:p:2 -c copy ~/Desktop/out.mp4

Ergibt in diesem Fall die HD-Variante mit 4 Tonspuren, wobei VLC und mpv automatisch die richtige Tonspur (deutsch) abspielen, falls man die ganze Sache über den "map"-Befehl lösen will oder muss.

Gleich vier Tonspuren (DE / FR / DE in klarer Sprache / DE in klarer Sprache) sind unschön. Die normale deutsche Tonspur ist die erste Tonspur (a:0), was kombiniert mit der Videospur in FHD-Auflösung (v:1) folgendes Mapping ergibt:

ffmpeg -i https://manifest-arte.akamaized.net/api/manifest/v1/Generate/2024090706A91BDB3FF61C8BECAD67A79620F2CC7A/de/XQ+KS/109358-065-A.m3u8 -map v:1 -map a:0 -c copy ~/Desktop/out.mp4

Natürlich wäre auch eine explizite Streamauswahl – wie bereits hier beschrieben – aus dem Masterfile möglich, aber das würde das Auslesen von 2 URL bedingen (im Bsp. HD und DE-Audiospur):

ffmpeg -i https://arte-cmafhls.akamaized.net/am/cmaf/109000/109300/109358-065-A/2024090706A91BDB3FF61C8BECAD67A79620F2CC7A/medias/109358-065-A_v720.m3u8 -i https://arte-cmafhls.akamaized.net/am/cmaf/109000/109300/109358-065-A/2024090706A91BDB3FF61C8BECAD67A79620F2CC7A/medias/109358-065-A_aud_VA-ALL_3.m3u8 -c copy ~/Desktop/out.mp4

@herbivoreMCS
Copy link

@pidoubleyou erste Analyse: Ermittlung der Videostreams scheitert mit 403

Wenn man die Url mit wget abruft, bekommt man 401 (und nicht 403). Also fehlende Zugangsdaten (z.B. Userid/Passwort) und nicht fehlende Berechtigung.

Wenn man die Url im Browser aufruft, bekommt man trotz 401 folgendes JSON angezeigt:

{
  "errors": [
    {
      "id": "ba12b86117c93f",
      "title": "Unauthorized",
      "detail": "No roles were provided.",
      "status": 401,
      "code": 10401
    }
  ],
  "title": "An error occurred",
  "detail": "No roles were provided.",
  "status": 401,
  "type": "/errors/401"
}

Was ebenfalls auf fehlende Zugangsdaten (No roles were provided) hinweist.

Vielleicht kennt jemand eine gültige Autorisierung oder wie man an eine solche kommt. Das wäre sicher einfach als eine Umstellung auf die Config mit den Streaming-Urls.

@styroll
Copy link

styroll commented Sep 19, 2024

Ein Blick auf Vavideo zeigt, dass das Abgreifen von Direktdownload-Adresssen noch möglich sein sollte (wenn auch weiterhin max. in HD, nicht in FHD wie beim HLS-Weg). Bsp.:
"Mit offenen Karten" (Sendung von gestern 18.9.): https://www.arte.tv/de/videos/116705-090-A/mit-offenen-karten-im-fokus/
Vavideo: https://www.vavideo.de/inhalt?id=3153383
Vavideo-Link: https://arteptweb-a.akamaihd.net/am/ptweb/116000/116700/116705-090-B_SQ_0_VA_09223199_MP4-2200_AMM-PTWEB-40481834350000_2OspS104Tjl.mp4

@pspzockerscene
Copy link

Wir bei JDownloader haben nun dasselbe Problem, wobei hier hinzukommt, dass wir den Download von HLS Streams mit getrenntem audio/video noch gar nicht unterstützen, daher bräuchten wir entweder den alten Weg oder die progressive MP4 URLs ("Direktdownload-Adressen").
@styroll Wie werden diese Links zusammengebaut?

@herbivoreMCS
Ich vermute ebenfalls, dass der API Call noch geht, aber ein anderer Authorization Header benötigt wird.

@herbivoreMCS
Copy link

@pidoubleyou
Jetzt weiß ich, warum du bzw. der Crawler 403 und ich 401 bekomme. Der Crawler verwendet (hardcodierte) Zugangsdaten (Bearer), nämlich:
public static final String AUTH_TOKEN = "Bearer Nzc1Yjc1ZjJkYjk1NWFhN2I2MWEwMmRlMzAzNjI5NmU3NWU3ODg4ODJjOWMxNTMxYzEzZGRjYjg2ZGE4MmIwOA";

Wenn ich das richtig sehe, ging es in #191 um genau dieses Problem.

Ich vermute, die Zugangdaten sind einfach nicht mehr gültig und man müsste neue ermitteln. Entweder wieder fest (bis es dann wieder kracht), oder jedes Mal dynamisch über https://api.arte.tv/api/sso/v3/token und ggf. https://auth.arte.tv/ssologin/setCustomToken?...

Ich werde weiter forschen, wollte aber schon mal dieses Zwischenergebnis mitteilen.

@pidoubleyou
Copy link
Contributor Author

@herbivoreMCS die Erkenntnis hatte ich auch schon gewonnen. Aber ich habe bisher immer noch nicht herausfinden können, wie ich an ein gültiges Token komme. Woher hast du die sso-Urls?

@herbivoreMCS
Copy link

@pidoubleyou Ok, dann mal mein Bericht über meine - leider bisher alle erfolglosen - Versuche.

Die Urls habe ich aus "Firefox/Menü/Extras/Browser Werkzeuge/Werkzeuge für Webentwickler/Netzwerkanalyse" (ggf. mit "Adresse durchsuchen" filtern nach api, auth oder sso). Der sso-Mechanismus wird allerdings wohl nur aufgerufen, wenn der anonymous-Bearer/-Token nicht schon im Cookie steht.

Als erstes erfolgt https://auth.arte.tv/ssologin/login?shouldValidateAnonymous=true, dann die beiden schon genannten Aufrufe. Dabei muss bei https://api.arte.tv/api/sso/v3/token bereits ein (Einstiegs-)Bearer angegeben werden, der sich aber im Quelltext jeder ARTE-Seite unter NEXT_PUBLIC_SSO_API_KEY findet. Dort steht auch NEXT_PUBLIC_SSO_TOKEN_API_KEY, mit dem ich aber bisher noch nichts anfangen konnte. Über den (Einstiegs-)Bearer und den Aufruf https://api.arte.tv/api/sso/v3/token bekommt man dann den anonymous-Bearer geliefert.

Ob man mit diesem aber überhaupt auf das bewusste V3-API zugreifen kann, ist fraglich. Mir ist es jedenfalls noch nicht gelungen (s.u.). Ich habs leider noch nicht mal geschafft, außerhalb des Browsers einen anonymous-Bearer abzurufen. Und dass, obwohl man sich bequem jeden Request als curl-Befehl kopieren und dann in der Eingabeaufforderung ausführen kann. Aber eben bei mir leider ohne das gewünschte Ergebnis.

Btw: Jeder der drei Aufrufe erfolgt zweimal, einmal als OPTION und einmal als GET oder POST.

Dann hab ich probiert, mit allem, was mir so eingefallen ist, direkt auf das das bewusste V3-API zuzugreifen:

  • Zuerst hab versucht, einen funktionierenden (statischen) Bearer im Netz zu finden. Unter [extractor/arte]: switch from api/v1 to api/v2 ytdl-org/youtube-dl#29640 gibt es sogar einen, aber der funktioniert leider auch nicht.

  • Dann hab ich NEXT_PUBLIC_SSO_API_KEY bzw. dem NEXT_PUBLIC_SSO_TOKEN_API_KEY direkt als Bearer probiert, leider auch ohne Erfolg.

  • Und dann hab ichs noch mit einem frisch ermittelten anonymous-Bearer aus Firefox probiert, aber auch das ging nicht. Was es natürlich fraglich macht, ob man auf diesem (SSO-)Weg überhaupt weiterkommt.

Deshalb habe ich zum Schluss noch Vavideo angeschrieben und freundlich gefragt, ob sie mir sagen würden, wie sie an ihren Bearer gekommen sind bzw. woher sie ihn haben. Hab aber leider (noch) keine Antwort.

Das ist mein "Forschungsstand".

Weißt du noch, wie ihr damals an den Bearer gekommen seid? Noch über den (leider nicht mehr existierenden) Weg https://static-cdn.arte.tv/guide/manifest.js?

Vielleicht schreibst du/ihr auch mal an Vavideo. Das erhöht die Chancen.

Ist der Vavideo-Code öffentlich? Wenn ja, könnte man da vielleicht was sehen. Dazu bin ich noch nicht gekommen. Ich hatte aber allgemein nach Code gesucht, der aufs ARTE-API zugreift. Da findet man auch einiges, aber ich hab bisher nichts gesehen, was (noch) funktioniert.

Soweit, so (bisher) erfolglos. Deshalb hatte ich auch von mir aus noch nichts darüber geschrieben, obwohl ich täglich geforscht hatte.

@dadidadit
Copy link

@herbivoreMCS
Der Link stammt aus dem Cache des Internet Explorers in Windows 7-32:

don-t-worry-weglaufen-geht-nicht[1].htm

https://manifest-arte.akamaized.net/api/manifest/v1/Generate/20240918174424BCD0E2F3D3F3AEDCC012C7C3A6CD/de/XQ+KS/115093-000-A.m3u8

Damit werden mit dem JDownloader2 alle 5 Auflösungen gelistet, gespeichert wird allerdings lediglich das jeweilige Video ohne Audio.
Vielleicht hilft dir diese Info irgendwie weiter.

@pidoubleyou
Copy link
Contributor Author

@herbivoreMCS danke für deine Erkenntnisse.

Nach meinen Analysen gehe ich davon aus, dass die sso-Calls mit "MeinARTE" zusammenhängen. Die Tokens dürften somit nicht für die nicht mehr funktionierenden Aufrufe Abhilfe schaffen.

Meine Recherchen waren genauso so erfolglos wie deine. Entweder wird der gleiche Ansatz wie bei MV verwendet oder noch ältere, ebenfalls nicht mehr funktionierende.

Weißt du noch, wie ihr damals an den Bearer gekommen seid? Noch über den (leider nicht mehr existierenden) Weg https://static-cdn.arte.tv/guide/manifest.js?

leider nicht mehr. ich hatte noch alte Links zur OpenAPI-Dokumentation von ARTE gefunden, aber diese funktionieren alle nicht mehr.

Ist der Vavideo-Code öffentlich?

ich vermute nicht.

Wenn ARD+ZDF alle ARTE-Filme integrieren würden...

Ich werde für MV heute Abend den Umbau auf m3u8 angehen - wenn das funktioniert, auf jeden Fall besser als nichts.
@styroll danke für deine Ideen, werde ich versuchen zu berücksichtigen.

@herbivoreMCS
Copy link

herbivoreMCS commented Sep 24, 2024

@pidoubleyou Es wäre schon schade, wenn MV Streaming-Urls verwenden würde, wo doch Vavideo weiterhin an die Direktlinks bekommt. Es muss also gehen! Schreib den von Vavideo doch wirklich mal freundlich an. Ich hatte nicht geschrieben, dass ich von MV komme (weil ich kein Offzieller bin), aber du könntest das tun. Vielleicht nützt das was. Er muss ja auch keinen Bearer rausrücken, sondern nur schreiben, wie man an einen kommt. Bei Vavideo funktioniert es definitiv!

Links zur OpenAPI-Dokumentation von ARTE gefunden, aber diese funktionieren alle nicht mehr.

Soviel zum Thema, das Internet vergisst nichts :-(

@herbivoreMCS
Copy link

@dadidadit
mit ffmpeg -i https://manifest-arte.akamaized.net/api/manifest/v1/Generate/20240918174424BCD0E2F3D3F3AEDCC012C7C3A6CD/de/XQ+KS/11 5093-000-A.m3u8 -c copy -map 0:a:0 -map 0:v:4 115093-000-A.mp4 bekommt man auch die Audio-Spur. Noch besser wäre vermutlich stattdessen ein mapping -map 0:p:4, wobei die 4 die Nummer des "Programms" ist, in der Reihenfolge, in der die Videoauflösungen in der .m3u8-Datei stehen, beginnend mit 0 für die erste Auflösung.

Helfen tut das aus meiner Sicht leider nichts, aus dem in vorigen Post genannten Grund (Direktlinks).

@pspzockerscene
Copy link

pspzockerscene commented Sep 25, 2024

@herbivoreMCS
Ich habe gestern versucht, Vavideo zu kontaktieren:

  • Anruf: Mailbox (hab eine Nachricht hinterlassen)
  • E-Mail: Kommt zurück und auch [email protected] funktioniert nicht
  • Kontaktformular: Scheint zu funktionieren; habe ich ebenfalls versucht

@herbivoreMCS
Copy link

herbivoreMCS commented Sep 25, 2024

@pspzockerscene und @pidoubleyou
Super! Wenn man nach den (ggf. verschiedenen Kombinationen der) Angaben des Webmasters aus dem Impressum sucht, findet man noch weitere Seiten mit teilweise anderen E-Mail-Adressen und auch einen passenden Facebook Account. Außerdem bekommt man auf den verschiedenen Kontaktseiten den Eindruck, dass eine Kontaktaufnahme nicht nur per Formular, sondern auch per E-Mail und Telefon durchaus erwünscht ist. Und auch, als würde er fachlich weiterhelfen können und wollen. Also sicher aussichtsreich, da am Ball zu bleiben.

@pidoubleyou
Copy link
Contributor Author

Dank eines Tipps von @codingPF habe ich doch einen Weg gefunden, über den sich aktuell mp4-Links ohne Authorization ermitteln lassen.
@herbivoreMCS @pspzockerscene Änderung in Zeile 31 aus cb52fc8

@andreygursky
Copy link

Und wieder wünscht man sich ein bisschen bessere Vernetzung von denen, die Interesse an arte API haben, denn der Trick war spätestens bereits am 19.02.2018 erwähnt: known-as-bmf/plugin.video.arteplussept#35 (comment)

@pspzockerscene
Copy link

Die "hbbtvv2" API scheint nicht für alle Videos zu funktionieren.
Beispiel:
https://www.arte.tv/de/videos/116976-000-A/weniger-internet-fuer-chinas-kinder/
->
https://www.arte.tv/hbbtvv2/services/web/index.php/OPA/v3/streams/116976-000-A/SHOW/de
Antwort:
{"videoStreams":[]}
Ist mein Request falsch oder hat ARTE eventuell nicht für alle Streams progressive Versionen?

@styroll
Copy link

styroll commented Sep 30, 2024

@psp sagte: hat ARTE eventuell nicht für alle Streams progressive Versionen?

Dein Beispielsendung ist ein Kurzbeitrag, der nie im TV gesendet wurde, in der APIv2 erkennbar an dem Tag "PROGRAMME WEB":
Screenshot_ 2024-09-30 at 14 57 53

Solche Web-only-Videos sind wohl absichtlich nicht via HbbTV zugänglich, im Unterschied zu Videos, die auch via TV verbreitet wurden (="PROGRAMME _ANTENNE"):
Screenshot_ 2024-09-30 at 15 00 27

MV hat bislang solche Web-only-Videos auch nur partiell erfasst, d.h. nur, wenn diese dort publiziert wurden, wo der Crawler auch suchte.

@pspzockerscene
Copy link

@styroll
Vielen Dank für die Erklärung; klingt schlüssig!
Ich lasse hier nochmal einen Link zu meinem Followup-Forenpost hier, für JDownloader User, die sich in dieses Github Ticket verirren:
https://board.jdownloader.org/showthread.php?p=539975#post539975

@pspzockerscene
Copy link

pspzockerscene commented Oct 1, 2024

@styroll
Nachtrag:
Solche Items lassen sich doch über die API abfragen. Dort wo "SHOW" steht muss in diesem Fall "BONUS" stehen, was aus dem Feld kind entnommen werden kann.
Da das vorherige Video mittlerweile offline ist, hier ein aktuelles Beispiel:
https://www.arte.tv/de/videos/122359-000-A/wie-steht-libanons-bevoelkerung-zur-hisbollah/
->
https://www.arte.tv/hbbtvv2/services/web/index.php/OPA/v3/streams/122359-000-A/BONUS/de

PCigales added a commit to PCigales/DLNAPlayOn that referenced this issue Nov 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants