const fs = require("fs").promises; const puppeteer = require("puppeteer-core"); // Nicht zwingend nötig. const profileDir = "/tmp/video-profile"; async function main() { await fs.mkdir(profileDir, { recursive: true }); const browser = await puppeteer.launch({ headless: true, userDataDir: profileDir, executablePath: "/usr/bin/chromium" }); const page = await browser.newPage(); const videoPlaylist = page.waitForResponse((response) => { // Wird für alle Requests aufgerufen, wir filtern (return true) nur die Video-Playlist: // console.debug(`checking ${response.url()}`); if (response.status() == 200 && response.url().match(/\/index.m3u8/)) return true; return false; }); await page.goto('https://mediaklikk.hu/m2-elo/', { waitUntil: 'networkidle0' }); // console.log("at", page.url()); const response = await videoPlaylist; console.log(`Video-Stream-URL: ${response.url()}`); // Entweder direkt url weigergeben an kodi/vlc // Oder: Urls in der Playlist in absolute URLs umwandeln, Datei schreiben /* const baseurl=response.url().replace(/\/\d*\.m3u8.*$/,''); let data = await response.text(); data=data.replace(/^0/mg,baseurl+'/0'); await fs.writeFile("index.m3u8",data); console.log("Playlist written"); */ // aufräumen // console.log("closing page"); await page.close(); // console.log("closing browser"); await browser.close(); } main().then(()=>console.debug("Done")).catch(e => { console.error(e); process.exit(1); });