// ==UserScript== // @name arte stream url // @namespace http://tampermonkey.net/ // @version 1.1.1 // @description get arte stream url with just one click // @author mihau // @match https://www.arte.tv/de/videos/* // @match https://www.arte.tv/fr/videos/* // @license MIT // @supportURL https://greasyfork.org/en/scripts/533451-arte-stream-url // @downloadURL none // ==/UserScript== // this script provides a very simple way to get the m3u8/hls url to feed into VLC, MPC-HC or any other player capable of playing streams; it also offers a pre-built oneliner for ffmpeg to download said stream // // works on both DE and FR and covers standard programs as well as arte concert // // other tools you should consider using are "yt-dlp" and addons such as "The Stream Detector" for Firefox // ( https://addons.mozilla.org/en-US/firefox/addon/hls-stream-detector/ ) // // the initial version was based on https://gist.github.com/t3k4y/a88afc5907bca0ffaec316de9bdb8184 // if you want to get the url the second the page loads, change this from 0 to 1: var loadonload = 0; // do not edit below this line $ = function(_) {return document.getElementById(_)} $tn = function(_) {return document.getElementsByTagName(_)} $cn = function(_) {return document.getElementsByClassName(_)} $qa = function(_) {return document.querySelectorAll(_)} $qs = function(_) {return document.querySelector(_)} var jsoncontainer = 0; for (var i = 0, l = $tn("script").length; i < l; ++i) { if ($tn("script")[i].innerText.indexOf("Generate/") != -1) { jsoncontainer = i; break; } } var nix = $tn("script")[jsoncontainer].innerText; var myregex = /Generate\/.*?\/\//; var match = nix.match(myregex); var mynewregex = new RegExp("\/.*", "gi") // very, very dirty regex, but hey - it works, no XHR necessary: var thisisthefilmid = match[0].replace("Generate/", "").replace(mynewregex, ""); var loc = window.location.pathname.split('/'); var lang = loc[1]; var id = loc[3]; var name = loc[4]; var url = ""; var api_base = " https://api.arte.tv/api/player/v2/config/" + lang + "/"; var download_url = api_base + id; url = "https://manifest-arte.akamaized.net/api/manifest/v1/Generate/" + thisisthefilmid + "/" + lang + "/XQ+KS+CHEV1/" + id + ".m3u8"; if ((loadonload != 0) && (thisisthefilmid != null) && (thisisthefilmid != "null") && (thisisthefilmid != "") && (thisisthefilmid != "undefined") && (thisisthefilmid != undefined) && (thisisthefilmid != NaN)) { showURL(); } var filmtitle = $qs('meta[property="og:title"]').content; [" | ARTE Concert", " | ARTE", " - Komplette Sendung", " - Programm in voller Länge", " - Film in voller Länge", " - Regarder le film complet", " - Regarder l’émission complète"].forEach((item) => { filmtitle = filmtitle.replace(item, "") }); filmtitle = filmtitle.replace(/ /g, "_").replace(/[^a-z0-9 \.,_-]/gim, "").replace("_-_", "-"); function showURL() { var test = prompt("stream URL (OK for ffmpeg command or cancel)", url); if (test !== null) { prompt("ffmpeg command (OK for yt-dlp command or cancel)", 'ffmpeg -referer "' + location.href + '" -user_agent "' + window.navigator.userAgent + '" -i "' + url + '" -c copy -bsf:a aac_adtstoasc "' + filmtitle + '.mp4"'); if (test !== null) { prompt("yt-dlp command", "yt-dlp " + url); } } } $tn("body")[0].onclick = function() { var para = document.createElement("a"); para.setAttribute('id', 'dwnl'); para.setAttribute('style', 'color: red; font-weight: 800; padding-left: 5px'); para.setAttribute('class', 'ds-64fl0u'); var node = document.createElement("span"); node.setAttribute('class', 'ds-11ckmbs'); node.setAttribute('style', 'padding-left: 10px; color: #FA481C'); node.innerText = "Stream URL"; para.appendChild(node); if ($cn('ds-1r0jukn')[0]) { $cn('ds-1r0jukn')[0].insertBefore(para, null); } else if ($cn('ds-1rm5mah')[0]) { $cn('ds-1rm5mah')[0].insertBefore(para, null); } if ((thisisthefilmid != null) && (thisisthefilmid != "null") && (thisisthefilmid != "") && (thisisthefilmid != "undefined") && (thisisthefilmid != undefined) && (thisisthefilmid != NaN)) { $('dwnl').addEventListener("click", function() { showURL(); }); } else { var getJSON = function(url, callback) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'json'; xhr.onload = function() { var status = xhr.status; if (status == 200) { callback(null, xhr.response); } else { callback(status); } }; xhr.send(); }; getJSON(download_url, function(err, data) { if (err != null) { console.error(err); } else { url = data.data.attributes.streams[0].url; $('dwnl').addEventListener("click", function() { url = "https://manifest-arte.akamaized.net/api/manifest/v1/Generate/" + thisisthefilmid + "/" + lang + "/XQ+KS+CHEV1/" + id + ".m3u8"; showURL(); }); } }); } $tn("body")[0].onclick = function() {} }; setTimeout('document.getElementsByTagName("body")[0].click()', 3500);