scanner un site à la recherche d'images obsolètes.

NikoNiko Messages 152Membre
30 mai modifié dans Discussions libres

Bonjour,
Il arrive que nous changions des images dans notre site sans prendre la peine d'effacer les images que nous n'utilisons plus le plus souvant par paresse oubli. Parfois, nous devons relooker un site pour quelqu'un et c'est un vrai foutoir.
J'ai un petit script en js qui fonctionne sur le serveur local mais demande quelques manips sur un site distant

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Scanner d'images obsolètes</title>
  </head>
  <body>
    <h1>Scanner d'images obsolètes</h1>
    <script>
    //  JavaScript
    const checkImageStatus = async (imageUrl) => {
  try {
    const response = await fetch(imageUrl, { method: 'HEAD' });
    return response.status !== 404;
  } catch (error) {
    console.error(`Erreur lors de la vérification de l'image ${imageUrl}: ${error}`);
    return false;
  }
};

const scanSiteImages = async (siteUrl) => {
  const obsoleteImages = [];

  try {
    const response = await fetch(siteUrl);
    const html = await response.text();
    const parser = new DOMParser();
    const doc = parser.parseFromString(html, 'text/html');

    const imageTags = doc.querySelectorAll('img');
    for (const imageTag of imageTags) {
      const imageUrl = new URL(imageTag.src, siteUrl).href;
      const isValid = await checkImageStatus(imageUrl);
      if (!isValid) {
        obsoleteImages.push(imageUrl);
      }
    }

    const internalLinks = Array.from(doc.querySelectorAll('a'))
      .map((link) => new URL(link.href, siteUrl).href)
      .filter((url) => url.startsWith(siteUrl));

    for (const internalLink of internalLinks) {
      const response = await fetch(internalLink);
      const html = await response.text();
      const parser = new DOMParser();
      const doc = parser.parseFromString(html, 'text/html');

      const imageTags = doc.querySelectorAll('img');
      for (const imageTag of imageTags) {
        const imageUrl = new URL(imageTag.src, siteUrl).href;
        const isValid = await checkImageStatus(imageUrl);
        if (!isValid) {
          obsoleteImages.push(imageUrl);
        }
      }
    }
  } catch (error) {
    console.error(`Erreur lors du scan du site ${siteUrl}: ${error}`);
  }

  return obsoleteImages;
};

// Exemple d'utilisation


    const siteUrl = 'https://lesite.fr./';
    scanSiteImages(siteUrl)
      .then((obsoleteImages) => {
        console.log('Images obsolètes trouvées :');
        obsoleteImages.forEach((imageUrl) => console.log(imageUrl));
      })
      .catch((error) => console.error(error));
  </script>

  </body>
</html>

Vous allez rencontrer des erreurs affichées dans la console, le problème provient de la politique de sécurité "Same Origin" appliquée par les navigateurs web. Cette politique empêche les scripts JavaScript d'effectuer des requêtes cross-origin (vers d'autres domaines) à moins que le site distant n'autorise explicitement ces requêtes en configurant les en-têtes CORS (Cross-Origin Resource Sharing) appropriés.

Si vous avez le contrôle du serveur, vous pouvez ajouter l'origine de la requête à la liste des domaines autorisés à accéder aux ressources du serveur en l'ajoutant aux valeurs de l'en-tête Access-Control-Allow-Origin.

Cela implique généralement de définir l'en-tête "Access-Control-Allow-Origin" avec la valeur appropriée (comme "*" pour autoriser toutes les origines, ou une liste spécifique d'origines autorisées).
Malheureusement, pas accès à la configuration du site distant, je ne peux pas modifier les en-têtes CORS moi-même chez mon hébergeur.

Je me demandais si un plugin en php style wordpress cleaner serait intéressant à développer pour campus destiné à grossir très vite ?

Post edited by Niko on
______________________________________________________________________________________________________
https://artweave.fr.fo

Commentaires

  • fredfred Messages 1,769Administrateur

    Salut Niko
    Si j'ai bien compris l'idée c'est d'identifier les images dans site/file/source pour lister les images absentes du contenu des pages et du thème ?

    The f....g boss
  • NikoNiko Messages 152Membre

    Salut Fred,
    Lister les images absentes mais aussi les images présentent dans /source mais qui ne sont plus reprisent dans une page existante.
    J'ai récupéré le dossier d'un site où le client n'a pas éffacé les photos qui n'étaient plus utilisées. Et donc, il a fallu les vérifier une à une pour les supprimer et récupérer de l'espace hébergement.
    Bon, avec un peu de méthode et de discipline c'est une situation qu'on ne devrait pas rencontrer normalement sauf qu'avec zwii des débutants sans aucune connaissance techniques, ils n'ont pas tous les bons gestes

    ______________________________________________________________________________________________________
    https://artweave.fr.fo

  • fredfred Messages 1,769Administrateur

    Cela peut arriver régulièrement, c'est une fonction de purge qui peut être intéressante. Par exemple, dans Campus, on manipule beaucoup d'images, à un moment, il reste des "poussières".
    Que penses-tu d'une page qui liste les images (ou autres) présentent dans file/source (ou un sous-dossier spécifique), ressources absentes du site ou du thème ?

    The f....g boss
  • NikoNiko Messages 152Membre

    C'est une idée

    ______________________________________________________________________________________________________
    https://artweave.fr.fo

Connectez-vous ou Inscrivez-vous pour répondre.