Skip to content

Instantly share code, notes, and snippets.

@uahim
Last active June 20, 2024 15:15
Show Gist options
  • Save uahim/dc82bbedd3b5e6c999af39ab5d45c643 to your computer and use it in GitHub Desktop.
Save uahim/dc82bbedd3b5e6c999af39ab5d45c643 to your computer and use it in GitHub Desktop.
get stream url - 0.1.8 updated June 2024 to account for css changes
// ==UserScript==
// @name arte stream url
// @namespace http://tampermonkey.net/
// @version 0.1.7
// @description get arte m3u8 stream url
// @author You
// @match https://www.arte.tv/de/videos/*
// @match https://www.arte.tv/fr/videos/*
// ==/UserScript==
// this UserJavaScript provides a simple way to get the m3u8 to feed into VLC or any other player capable of playing streams.
// though it's probably best to get the url or download videos via yt-dlp or addons such as The Stream Detector for Firefox
// https://addons.mozilla.org/en-US/firefox/addon/hls-stream-detector/
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;
var filmtitle = document.querySelector('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("_-_","-");
window.onload = function () {
var para = document.createElement("a");
para.setAttribute('id', 'dwnl');
para.setAttribute('style', 'font-weight: bold');
para.setAttribute('style', 'color: white');
para.setAttribute('class', ' ds-adi73s');
var node = document.createElement("span");
node.setAttribute('class', ' ds-12ek84r');
node.innerText = "Stream URL";
para.appendChild(node);
if (document.getElementsByClassName(' ds-rymcfw')[0]) {
document.getElementsByClassName(' ds-rymcfw')[0].insertBefore(para, null);
} else if (document.getElementsByClassName(' ds-z8l0xl')[0]) {
document.getElementsByClassName(' ds-z8l0xl')[0].insertBefore(para, null);
}
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;
}
});
document.getElementById('dwnl').addEventListener("click", function(){
var test = prompt("stream URL (OK for ffmpeg command or cancel)", url);
if (test !== null) {
prompt("ffmpeg command", 'ffmpeg -referer "' + location.href + '" -user_agent "' + window.navigator.userAgent + '" -i "' + url + '" -c copy -bsf:a aac_adtstoasc "' + filmtitle + '.mp4"');
}
});
};
@uahim
Copy link
Author

uahim commented Nov 25, 2023

@jeanpierrebertola for downloading, it's recommended to use yt-dlp or at least ffmpeg, here's a guide for beginners:
https://www.rapidseedbox.com/blog/yt-dlp-complete-guide

@jeanpierrebertola
Copy link

thank you ++++++

@osvivant
Copy link

osvivant commented May 3, 2024

Hi, it stopped to work these days. Would you please have a look? thank you very much.

ex:
https://www.arte.tv/fr/videos/116710-062-A/le-dessous-des-images/

@uahim
Copy link
Author

uahim commented May 3, 2024

@osvivant try now

@osvivant
Copy link

osvivant commented May 3, 2024

thanks, it works!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment