Hallo! Kennt jemand ein Kommandozeilen-Tool für Linux, das so arbeitet, wie der Video-Download-Helper (Firefox Addon)? Es wäre schön, wenn man dort die URL der Webseite angibt und man die Streaming Links zurückbekommt. Hintergrund wäre, dass ich gerne ein kleines Skript schreiben würde, das mir beim Hochfahren eines Raspberry-Pis mit LibreELEC die Senderliste vom Simple-IPTV-Addons aktualisiert, denn leider wird der Stream-Link eines Senders jeden Tag verändert. Wenn ich die Webseite aufrufe, wird vom Video-Download-Helper der Link sofort erkannt. (Man braucht den Stream nicht mal zu starten.) Danke im Voraus!
:
youtube-download wär einen versuch wert. Das kann sehr viele verschiedene Video-Seiten, nicht nur den Namensgeber. Wenn nicht, und sich die Webseite stark gegen solche Tools "wehrt": Puppeteer. Hab damit erst grad wieder was automatisiert... Webseite aufmachen, Cookie-Banner wegklicken falls er angezeigt wird und falls ein Redirect auf das Login-Formular erfolgt: Benutername+Passwort+"remember me", die vielen hundert IMG/CSS/JS/XHR/API-Requests filtern, den einen interressanten abfangen, JSON-Daten in ein CSV speichern, fertig. grad mal so 50 Zeilen Code.
1 | const browser = await puppeteer.launch({ headless: true, userDataDir: profileDir, executablePath: "/usr/bin/chromium" }); |
2 | const page = await browser.newPage(); |
3 | await page.goto('https://somewhere', { waitUntil: 'networkidle0' }); |
4 | if (await page.$('#no-cookies-please')) { |
5 | console.log("Denying cookies..."); |
6 | await page.click('#no-cookies-please'); |
7 | } |
8 | if (page.url().match(/sso.some.domain\/signin/)) { |
9 | await page.type('#username', credentials.username); |
10 | await page.type('#password', credentials.password); |
11 | await page.click('#remember-me-checkbox'); |
12 | const [response] = await Promise.all([ |
13 | frame.waitForNavigation({ waitUntil: 'networkidle0' }), |
14 | frame.click('#login-btn-signin'), |
15 | ]); |
16 | if (!response.ok()) throw new Error("Login Failed"); |
17 | } |
18 | // usw. |
und mit "headless: false" könntest du dem Script auch live beim Arbeiten zusehen.
Hallo! Danke für den Tipp! Youtube-DL geht leider nicht. Puppeteer ist, wenn ich es richtig verstehe, kein reines Kommandozeilentool. Kennst du (oder andere hier) vielleicht etwas, wo man ähnlich wie beim Youtube-DL einfach den Link eingibt und den Streaming-Link retour bekommt, was man dann z.B. auch in VLC einsetzen könnte? Danke!
PC schrieb: > Puppeteer ist, wenn ich es richtig verstehe, kein reines > Kommandozeilentool. Nö, es ist primär ein Werkzeug, um Tools/Scripte zu erzeugen, die mit Webseiten interagieren. Gibt auch kommandozeilen-tools dafür/damit, die sind aber eher auf "automatisiert screenshots erzeugen" oder "interaktiv die Seite per Konsole bedienen" ausgelegt. (puppeteer-cli, repl, ..) PC schrieb: > einfach den Link eingibt und den > Streaming-Link retour bekommt Das geht so generell nicht. Manchmal reicht ein "curl | grep | sed", manchmal muss man eben in JS implementiere Verschleierungsalgorithmen ausführen, um an die URL zu kommen. Wenn deine Wunsch-Streamingseite nicht hoch-geheim ist, verrate uns doch einfach, um was es geht.
:
Bearbeitet durch User
Εrnst B. schrieb: > Wenn deine Wunsch-Streamingseite nicht hoch-geheim ist, verrate uns doch > einfach, um was es geht. Es ist https://mediaklikk.hu/m2-elo/
PC schrieb: > Es ist https://mediaklikk.hu/m2-elo/ Im Anhang eine Quick-n-Dirty Lösung, die dir z.B. https://c202-node62-cdn.connectmedia.hu/1101/7cf6f24598234992a9e7fb38efab9d25/60ea9ccb/index.m3u8?v=5i daraus extrahiert. Ist so eher die "Holzhammer"-Methode. Statt den Seitenquelltext zu analysieren und daraus nur das nötigste zu extrahieren, macht das einfach einen vollwertigen Chromium-Browser (aber mit eigenem Profil & ohne Fenster) auf, läd Alles von der Seite, also alle Javascripts, alle Werbung, alle Cookies usw. und schaut dem Chromium dabei über die Schulter, ob ein "index.m3u8"-Request vorbeikommt. Von dem hätten wir dann gerne die URL.
Beitrag #6753875 wurde von einem Moderator gelöscht.
Beitrag #6753877 wurde von einem Moderator gelöscht.
PC schrieb: > Hallo! > > Danke für den Tipp! > > Youtube-DL geht leider nicht. Hast Du Dir mal die Optionen von Youtube-dl angeschaut? Deinen Usecase kann ich nicht so richtig nachvollziehen, nach Deiner Beschreibung koennte YT-dl aber eventuell doch funktionieren: Nimm z.B. das Streaming eines OeR-Senders, z.B. wdr >https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default Dann kannst Du Dir mit 'youtube-dl -F' die Formate ausgeben lassen: (Ich hab mir die diversen youtube-dl Befehle mit den entsprechenden Schaltern als alias direkt ansprechbar gemacht) youtube-dl -F https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default [ARDBetaMediathek] Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU: Downloading JSON metadata [ARDBetaMediathek] 21520924: Downloading m3u8 information [info] Available formats for 21520924: format code extension resolution note hls-635-0 mp4 480x270 635k , avc1.77.30, 50.0fps, mp4a.40.2 hls-635-1 mp4 480x270 635k , avc1.77.30, 50.0fps, mp4a.40.2 hls-1130-0 mp4 640x360 1130k , avc1.4d401f, 50.0fps, mp4a.40.2 hls-1130-1 mp4 640x360 1130k , avc1.4d401f, 50.0fps, mp4a.40.2 hls-2120-0 mp4 960x540 2120k , avc1.4d401f, 50.0fps, mp4a.40.2 hls-2120-1 mp4 960x540 2120k , avc1.4d401f, 50.0fps, mp4a.40.2 hls-3990-0 mp4 1280x720 3990k , avc1.640020, 50.0fps, mp4a.40.2 hls-3990-1 mp4 1280x720 3990k , avc1.640020, 50.0fps, mp4a.40.2 (best) Danach das gewuenschte Format auswaehlen und mit -f und -g dann die URL aus dem Manifest extrahieren: youtube-dl -f hls-3990-1 -g https://www.ardmediathek.de/live/Y3JpZDovL2Rhc2Vyc3RlLmRlL0xpdmVzdHJlYW0tRGFzRXJzdGU/?toolbarType=default https://derste247livede.akamaized.net/hls/live/658317-b/daserste_de/master_1280p_3628.m3u8 Das liesse sich bestimmt auch automatisieren.
Beitrag #6753957 wurde von einem Moderator gelöscht.
Εrnst B. schrieb: > Im Anhang eine Quick-n-Dirty Lösung Das ist node.js javascript code Bei mir installiert: node v9.9.0
1 | mkdir ~/node_hu; cd ~/node_hu |
2 | wget "https://www.mikrocontroller.net/attachment/524008/index.js" |
3 | wget "https://www.mikrocontroller.net/attachment/524009/package.json" |
4 | npm install # will install deps from package.json into project folder |
5 | node index.js https://m4sport.hu/rovatok/tokio2020/ |
GEHT NICHT:
1 | /home/guest/node_hu/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js:247 |
2 | for await (const chunk of readable) { |
3 | ^^^^^
|
4 | |
5 | SyntaxError: Unexpected reserved word |
6 | at new Script (vm.js:51:7) |
7 | at createScript (vm.js:136:10) |
8 | at Object.runInThisContext (vm.js:197:10) |
9 | at Module._compile (module.js:613:28) |
10 | at Object.Module._extensions..js (module.js:660:10) |
11 | at Module.load (module.js:561:32) |
12 | at tryModuleLoad (module.js:501:12) |
13 | at Function.Module._load (module.js:493:3) |
14 | at Module.require (module.js:593:17) |
15 | at require (internal/module.js:11:18) |
X. H. schrieb: > Bei mir installiert: node v9.9.0 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of Deine Version ist zu alt, die v10.0.0 könnte es. Aktuell im Long-Term-Support wäre die v14-Reihe. Geh gleich auf die, notfalls eine v12 (die hat noch bis April 2022 Support). https://nodejs.org/en/about/releases/ > node index.js https://m4sport.hu/rovatok/tokio2020/ Mein "quick-n-dirty" Beispielprogramm nimmt keine Kommandozeilen-Parameter. Das musst du selber nachrüsten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.