Documentation de l'API LecteurMedia
Cette librairie a été conçue pour intégrer facilement des lecteurs de médias (YouTube, Twitter, TikTok, etc.) dans n'importe quel userscript, en particulier sur des sites de type forum.
Installation
Pour utiliser la librairie, ajoutez la directive @require suivante dans l'en-tête de votre userscript. Assurez-vous qu'elle est placée avant votre script principal.
// ==UserScript==
// @name Mon Super Script
// ...
// @require https://update.greasyfork.org/scripts/554422/1687584/LecteurMedia%20API%20Library.js
// ==/UserScript==
(function() {
'use strict';
// Votre code ici...
})();
Important : La librairie expose un objet global window.LecteurMedia. Vérifiez toujours sa présence avant de l'utiliser pour éviter les erreurs.
Démarrage Rapide : Deux Modes d'Utilisation
La librairie propose deux manières principales de fonctionner :
- Mode Autonome : La solution "plug-and-play". Idéal si votre script cible des sites comme jeuxvideo.com et que vous voulez que tout fonctionne automatiquement.
- Mode API : Pour un contrôle total. Vous choisissez quand et où analyser le contenu pour y intégrer les médias.
1. Mode Autonome (Le plus simple)
Ce mode configure tout pour vous : il détecte automatiquement les nouveaux messages sur les forums JVC/JVArchive et y intègre les médias. Il ajoute également une commande dans le menu du userscript pour la configuration.
if (typeof window.LecteurMedia === 'undefined') {
console.error("Erreur : La librairie Lecteur Media n'a pas pu être chargée.");
return;
}
// Initialise la librairie avec tous les providers par défaut
const lecteurMediaInstance = new window.LecteurMedia();
// Lance le mode autonome. C'est tout !
lecteurMediaInstance.initStandalone();
2. Mode API (Contrôle avancé)
Ce mode vous donne le pouvoir de décider quels éléments de la page sont analysés et à quel moment. C'est parfait pour les sites avec du contenu chargé dynamiquement (AJAX) ou pour des besoins très spécifiques.
if (typeof window.LecteurMedia === 'undefined') {
console.error("Erreur : La librairie Lecteur Media n'a pas pu être chargée.");
return;
}
// Initialise la librairie, mais ne fait rien pour l'instant
const lecteurMediaInstance = new window.LecteurMedia();
// Plus tard dans votre script, quand du nouveau contenu apparaît...
const nouveauContenu = document.getElementById('zone-de-nouveaux-messages');
if (nouveauContenu) {
lecteurMediaInstance.processNode(nouveauContenu);
}
Configuration du Lecteur
Lors de la création d'une nouvelle instance, vous pouvez passer un objet d'options pour personnaliser les médias qui seront chargés.
const lecteurMediaInstance = new window.LecteurMedia(options);
L'option principale est providers. Elle définit quels fournisseurs de médias activer.
Valeur de providers | Description |
|---|
'all' (ou non spécifié) | Active tous les fournisseurs de médias disponibles. |
'base' | Active uniquement les fournisseurs qui ne nécessitent aucune directive @connect (ex: YouTube, Twitch). |
'connect' | Active les fournisseurs qui nécessitent des directives @connect spécifiques (ex: Twitter, Facebook, SoundCloud). |
'wildcard' | Active les fournisseurs qui nécessitent la directive @connect * pour fonctionner (ex: intégration d'images/vidéos génériques, aperçus d'articles). |
['YouTube', 'Twitter'] | Un tableau de noms pour n'activer que les fournisseurs spécifiés. |
['base', 'connect'] | Un tableau de catégories pour combiner plusieurs groupes. |
Option collapsible
Cette option permet au développeur de désactiver la fonctionnalité d'en-tête réductible (collapse/expand) pour tous les médias.
Valeur de collapsible | Description |
|---|
true (ou non spécifié) | Les en-têtes réductibles sont activés par défaut (l'utilisateur final peut toujours les désactiver dans le menu). |
false | Désactive complètement les en-têtes réductibles. L'option n'apparaîtra pas pour l'utilisateur et les médias seront toujours affichés entièrement. |
Priorité : Si le développeur définit collapsible: false, l'utilisateur ne pourra pas réactiver la fonctionnalité. C'est une désactivation globale. Sinon, c'est le choix de l'utilisateur dans le panneau de configuration qui prime.
Exemple de configuration avancée
// Charger tous les providers de base et connect,
// mais désactiver les en-têtes réductibles pour un affichage plus simple.
const lecteurMediaInstance = new window.LecteurMedia({
providers: ['base', 'connect'],
collapsible: false
});
Méthodes de l'API
instance.processNode(node)
Analyse un élément HTML spécifique et ses enfants à la recherche de liens à transformer en médias intégrés.
node (HTMLElement) : L'élément du DOM à analyser.- Retourne : Une
Promise qui se résout à true si l'opération a réussi.
instance.addProvider(providerObject)
Permet d'étendre la librairie en ajoutant votre propre fournisseur de média personnalisé.
providerObject (Object) : Un objet décrivant le nouveau fournisseur (voir structure ci-dessous).
Structure d'un objet provider :
| Propriété | Type | Description |
|---|
name | string | Requis. Nom unique du provider (ex: 'MonSite'). |
selector | string | Requis. Sélecteur CSS pour trouver les liens (ex: 'a[href*="monsite.com/video/"]'). |
category | 'base' | 'connect' | 'wildcard' | Requis. La catégorie de permissions nécessaire. |
connect | string | string[] | Le ou les domaines pour la directive @connect si category est 'connect'. |
createEmbedElement | function | Requis. Fonction qui reçoit le lien (HTMLAnchorElement) et doit retourner l'élément HTML à intégrer (ou une Promise qui le résout). |
postProcess | function | (Optionnel) Fonction appelée après que l'élément a été ajouté au DOM. Utile pour les librairies externes (ex: Facebook SDK). |
Fonctions Utilitaires Statiques
Ces fonctions sont accessibles directement via la classe LecteurMedia.
LecteurMedia.getRequiredConnects(options)
C'est l'outil le plus utile pour vous, développeur ! Il génère automatiquement les lignes @connect que vous devez ajouter à l'en-tête de votre userscript en fonction des fournisseurs que vous avez choisis.
options (Object) : Le même objet d'options que pour le constructeur (ex: { providers: ['base', 'connect'] }).- Retourne : Un tableau de chaînes de caractères, prêtes à être copiées dans votre en-tête.
Comment l'utiliser :- Ajoutez temporairement cet appel dans votre script.
- Ouvrez la console de votre navigateur sur la page où le script s'exécute.
- Copiez les lignes affichées.
- Collez-les dans l'en-tête de votre userscript.
- Supprimez ou commentez l'appel de votre code.
// À mettre temporairement dans votre script pour voir les @connect nécessaires
const connectsRequis = window.LecteurMedia.getRequiredConnects({ providers: ['base', 'connect'] });
console.log("Connects à ajouter à l'en-tête du script :");
console.log(connectsRequis.join('\n'));
// Affiche dans la console :
// // @connect api.vxtwitter.com
// // @connect soundcloud.com
// // @connect ...et tous les autres
LecteurMedia.compatibleHttpRequest(options)
Un wrapper simple pour GM.xmlHttpRequest qui gère la compatibilité et retourne une Promise pour une utilisation facile avec async/await.
try {
const response = await window.LecteurMedia.compatibleHttpRequest({
method: "GET",
url: "https://api.example.com/data"
});
const data = JSON.parse(response.responseText);
console.log(data);
} catch (error) {
console.error("La requête a échoué :", error);
}
Exemples Complets de Cas d'Usage
Cas 1 : Script simple pour JVC
Le but est d'avoir tous les médias sur JVC, sans se compliquer la vie.
// ==UserScript==
// @name Mon Lecteur Média pour JVC
// @match https://www.jeuxvideo.com/forums/*
// @grant GM_addStyle
// @grant GM.xmlHttpRequest
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @connect *
// @require https://update.greasyfork.org/scripts/554422/1687584/LecteurMedia%20API%20Library.js
// ==/UserScript==
(function() {
'use strict';
if (typeof window.LecteurMedia === 'undefined') {
console.error("Erreur : La librairie Lecteur Media n'a pas pu être chargée.");
return;
}
// On active tous les providers, y compris ceux qui nécessitent @connect *
const lecteurMediaInstance = new window.LecteurMedia({ providers: 'all' });
// On laisse la librairie tout gérer automatiquement
lecteurMediaInstance.initStandalone();
})();
Cas 2 : Script léger avec seulement Twitter et YouTube
L'objectif est de créer un script minimaliste qui n'intègre que certains médias, sans demander trop de permissions.
// ==UserScript==
// @name Lecteur YouTube & Twitter
// @match https://www.example.com/*
// @grant GM_addStyle
// @grant GM.xmlHttpRequest
// @grant GM_registerMenuCommand
// @connect api.vxtwitter.com
// @require https://update.greasyfork.org/scripts/554422/1687584/LecteurMedia%20API%20Library.js
// ==/UserScript==
(function() {
'use strict';
if (typeof window.LecteurMedia === 'undefined') return;
// Étape 1 (à faire une seule fois) : trouver les @connect nécessaires
/*
const connects = window.LecteurMedia.getRequiredConnects({ providers: ['YouTube', 'Twitter'] });
console.log(connects.join('\n'));
// La console affichera : // @connect api.vxtwitter.com
*/
// Étape 2 : Initialiser la librairie avec les providers choisis
const lecteurMediaInstance = new window.LecteurMedia({
providers: ['YouTube', 'Twitter']
});
// Étape 3 : On analyse le corps de la page au chargement
lecteurMediaInstance.processNode(document.body);
// Optionnel : si le site charge du contenu dynamiquement, on peut utiliser un MutationObserver
const observer = new MutationObserver((mutations) => {
for (const mutation of mutations) {
for (const node of mutation.addedNodes) {
if (node.nodeType === Node.ELEMENT_NODE) {
lecteurMediaInstance.processNode(node);
}
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
})();