Greasy Fork

Greasy Fork is available in English.

LecteurMedia API Library

Librairie pour l'intégration de médias sur des forums

当前为 2025-11-01 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/554422/1687596/LecteurMedia%20API%20Library.js

作者
FaceDePet
版本
0.0.1.20251101165342
创建于
2025-11-01
更新于
2025-11-01
大小
184.7 KB
许可证
暂无

API LecteurMedia

Une librairie JavaScript conçue pour être intégrée dans des userscripts afin d'analyser le DOM et d'intégrer des lecteurs multimédias à la place des liens.

1. Installation

Pour utiliser cette librairie, ajoutez la ligne suivante dans l'en-tête // ==UserScript== de votre projet :

// @require http://greasyfork.icu/scripts/497166-lecteur-media-api-library/code/Lecteur%20Media%20API%20Library.js

N'oubliez pas d'ajouter les permissions @grant nécessaires. Au minimum :

  • // @grant GM_addStyle

Si vous utilisez des providers qui font des requêtes réseau, vous aurez besoin de :

  • // @grant GM.xmlHttpRequest (ou GM_xmlhttpRequest)
  • Une ou plusieurs directives // @connect (voir la section 3).

2. Initialisation et Utilisation

L'API s'utilise en créant une nouvelle instance de la classe LecteurMedia. Le constructeur accepte un objet d'options pour sélectionner les providers que vous souhaitez activer.

Choix des Providers

Vous avez plusieurs façons de spécifier les providers à charger, via l'option providers dans le constructeur.

Méthode A : Charger tous les providers (Comportement par défaut)

C'est la méthode la plus simple, mais elle nécessite la permission @connect *.

// ==UserScript==
// ...
// @connect *
// ...
// ==/UserScript==

const lecteur = new window.LecteurMedia(); // Pas d'options = 'all'
lecteur.processNode(document.body);

Méthode B : Charger des catégories de providers

C'est l'approche recommandée pour un contrôle fin des permissions. Il existe trois catégories :

  • 'base' : Providers qui ne nécessitent aucune permission @connect.
  • 'connect' : Providers qui nécessitent des permissions @connect vers des domaines spécifiques (ex: api.vxtwitter.com).
  • 'wildcard' : Providers qui nécessitent @connect * (ex: aperçu d'articles).

// Charger uniquement les providers sûrs, sans @connect
const lecteurBase = new window.LecteurMedia({ providers: 'base' });
lecteurBase.processNode(document.body);

// Charger les providers sûrs ET ceux nécessitant une connexion spécifique
const lecteurConnect = new window.LecteurMedia({ providers: ['base', 'connect'] });
lecteurConnect.processNode(document.body);

Méthode C : Charger une liste de providers par leur nom

C'est la méthode la plus précise. Vous ne chargez que ce dont vous avez besoin.

// Charger uniquement YouTube, Twitter et Discord
const lecteurPerso = new window.LecteurMedia({
    providers: ['YouTube', 'Twitter', 'Discord']
});
lecteurPerso.processNode(document.body);

Méthodes principales

  • new LecteurMedia(options) : Crée une nouvelle instance du lecteur avec la configuration spécifiée.
  • instance.processNode(element) : Analyse un élément du DOM et ses enfants pour trouver et remplacer les liens par des lecteurs intégrés.
  • instance.addProvider(providerObject) : Ajoute dynamiquement un ou plusieurs providers à une instance existante.

3. Gérer les Permissions @connect

Pour savoir quelles lignes // @connect ajouter à votre script, la librairie expose une fonction utilitaire très pratique : window.LecteurMedia.getRequiredConnects(options).

Comment l'utiliser ?

  1. Créez un userscript temporaire avec le @require de la librairie.
  2. Ouvrez la console de votre navigateur sur n'importe quelle page.
  3. Exécutez la fonction avec les mêmes options que celles que vous utiliserez dans votre script final.

Exemple 1 : Obtenir les @connect pour les catégories 'base' et 'connect'

const connects = window.LecteurMedia.getRequiredConnects({ providers: ['base', 'connect'] });
console.log(connects.join('\n'));

Résultat dans la console :

// @connect      api.vxtwitter.com
// @connect      vm.tiktok.com
// @connect      vt.tiktok.com
// @connect      v.tiktok.com
// @connect      t.tiktok.com
// @connect      api.streamable.com
// @connect      facebook.com
// @connect      www.reddit.com
// @connect      soundcloud.com
// @connect      www.flickr.com
// @connect      gph.is
// @connect      maps.app.goo.gl
// @connect      backend.deviantart.com
// @connect      www.deviantart.com
// @connect      api.gyazo.com
// @connect      tenor.com
// @connect      postimg.cc
// @connect      ibb.co
// @connect      *.bandcamp.com
// @connect      distrokid.com
// @connect      discord.com
// @connect      api.stackexchange.com

Exemple 2 : Obtenir les @connect pour 'YouTube', 'Twitter' et 'Discord'

const connects = window.LecteurMedia.getRequiredConnects({ providers: ['YouTube', 'Twitter', 'Discord'] });
console.log(connects.join('\n'));

Résultat dans la console :

// @connect      api.vxtwitter.com
// @connect      discord.com

Copiez-collez simplement les lignes générées dans l'en-tête de votre userscript.

4. Exemple complet

Voici un script qui charge les lecteurs YouTube, Twitter et Discord.

// ==UserScript==
// @name         Mon Script avec Lecteur Média
// @namespace    http://tampermonkey.net/
// @version      1.0
// @match        https://mon-site-cible.com/*
// @grant        GM_addStyle
// @grant        GM.xmlHttpRequest
// @require      http://greasyfork.icu/scripts/497166-lecteur-media-api-library/code/Lecteur%20Media%20API%20Library.js
// @connect      api.vxtwitter.com
// @connect      discord.com
// ==/UserScript==

(function() {
    'use strict';

    if (typeof window.LecteurMedia === 'undefined') {
        console.error('La librairie Lecteur Media n\'a pas pu être chargée.');
        return;
    }

    // Initialise le lecteur avec une sélection de providers
    const lecteur = new window.LecteurMedia({
        providers: ['YouTube', 'Twitter', 'Discord']
    });

    // Scanne la page entière au chargement
    lecteur.processNode(document.body);

    // Bonus : si votre site charge du contenu dynamiquement, vous pouvez utiliser
    // un MutationObserver pour scanner les nouveaux éléments.
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            mutation.addedNodes.forEach((node) => {
                if (node.nodeType === 1) { // S'assurer que c'est un HTMLElement
                    lecteur.processNode(node);
                }
            });
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });

})();