Automatiser l’importation des articles WordPress dans Google Sheets

Dans le monde numérique actuel, la gestion efficace du contenu de votre site web est cruciale. Heureusement, la technologie offre des solutions innovantes pour simplifier cette tâche. Notamment, l’intégration entre WordPress et Google Sheets se révèle être un pont digital efficace pour automatiser et optimiser le processus de gestion de contenu.

WordPress, la plateforme de création de sites web la plus utilisée, permet aux utilisateurs de publier et de gérer leur contenu facilement. D’un autre côté, Google Sheets offre une plateforme flexible pour le traitement et l’analyse des données. Ensemble, ils forment un duo puissant pour les webmasters et les rédacteurs de contenu.

Voici comment vous pouvez tirer parti de cette intégration grâce à un script simple en Google Apps Script, qui synchronise automatiquement le contenu de votre site WordPress avec une feuille de calcul Google Sheets. Cela vous permet de garder un œil sur vos publications, catégories, et bien plus, directement depuis Google Sheets.

Commencer l’intégration

Tout d’abord, ouvrez Google Sheets et créez une nouvelle feuille de calcul. Ensuite, accédez à « Extensions > Apps Script » et copiez le script fourni dans l’éditeur. Ce script crée un menu personnalisé dans votre feuille Google Sheets, offrant une option pour importer le contenu de votre site WordPress.

Le coeur du script

Le script commence par créer un nouveau menu dans l’interface utilisateur de Google Sheets, ajoutant ainsi une facilité d’accès à ses fonctionnalités. Lorsque vous sélectionnez l’option ‘Importer WordPress’, une boîte de dialogue s’affiche, vous invitant à entrer l’URL de votre site WordPress. Une fois l’URL fournie, le script extrait et analyse les données de vos articles WordPress, y compris les titres, liens, dates de publication, extraits, et catégories, et les insère dans votre feuille Google Sheets.

De plus, pour garantir que vous n’importe pas seulement les 100 premiers articles mais bien l’ensemble de votre contenu, le script pagine automatiquement les requêtes à l’API WordPress. Cette approche assure que tous vos articles sont récupérés et listés dans Google Sheets.

Le code complet

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Crée un nouveau menu
  ui.createMenu('Importer WordPress')
    .addItem('Démarrer l\'importation', 'demanderURL')
    .addSeparator()
    .addItem('À propos', 'afficherInfosDeveloppeur') // Ajout de l'option du menu    
    .addToUi();
}

function demanderURL() {
  var ui = SpreadsheetApp.getUi();
  var result = ui.prompt('Entrez l\'URL de votre site WordPress (par exemple, https://monsite.com)', ui.ButtonSet.OK_CANCEL);
  
  // Vérifie si l'utilisateur a cliqué sur OK
  if (result.getSelectedButton() == ui.Button.OK) {
    var urlBrute = result.getResponseText();
    // Utilise une expression régulière pour extraire le domaine
    var correspondanceDomaine = urlBrute.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/i);
    var domaine = correspondanceDomaine ? correspondanceDomaine[1] : null; // Extrait le domaine ou retourne null si non trouvé
    
    if (domaine) {
      importerArticlesWordPress(domaine);
    } else {
      ui.alert('URL invalide. Veuillez entrer une URL valide.');
    }
  }
}


function importerArticlesWordPres(urlSite) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  feuille.clear();
  
  // Insère l'entête et met en gras
  feuille.appendRow(["Titre", "Lien", "Date de publication", "Extrait", "Catégories"]);
  feuille.getRange("A1:E1").setFontWeight("bold");
  feuille.setFrozenRows(1); // Fige la première ligne
  
  var page = 1;
  var articlesTotal = [];

  // Affiche une notification à l'utilisateur que le traitement est en cours
  ss.toast('Traitement en cours...', 'Analyse du site ' + urlSite, -1); // Le dernier paramètre, -1, signifie que le message reste indéfiniment jusqu'à ce qu'il soit explicitement fermé
 
  
  while (true) {
    var options = {
      muteHttpExceptions: true // Permet de ne pas interrompre le script en cas d'erreur HTTP
    };
    var reponse = UrlFetchApp.fetch("https://" + urlSite + "/wp-json/wp/v2/posts?per_page=100&page=" + page, options);
    var statusCode = reponse.getResponseCode();
    
    if (statusCode === 200) {
      var json = JSON.parse(reponse.getContentText());
      if (json.length > 0) {
        articlesTotal = articlesTotal.concat(json);
        page++;
      } else {
        // Sortie de la boucle si la réponse est vide
        break;
      }
    } else if (statusCode === 400) {
      // Sortie de la boucle si le numéro de page est invalide
      break;
    } else {
      Logger.log('Erreur non gérée. Code: ' + statusCode);
      break;
    }
  }

  var categoriesMap = obtenirCategoriesMap(urlSite); // Obtient la carte des catégories
  
  articlesTotal.forEach(function(article) {
    var titreDecoded = decoderHtml(article.title.rendered);
    var datePublication = new Date(article.date);
    var dateFormatted = Utilities.formatDate(datePublication, Session.getScriptTimeZone(), "dd/MM/yyyy");
    var extraitDecoded = decoderHtml(article.excerpt.rendered).replace(/<[^>]+>/g, '');
    var catNames = article.categories.map(function(catId) { return categoriesMap[catId]; }).join(', ');
    
    feuille.appendRow([titreDecoded, article.link, dateFormatted, extraitDecoded, catNames]);
  });
  
  // Alignement horizontal de toutes les cellules
  feuille.getRange(1, 1, feuille.getLastRow(), feuille.getLastColumn()).setVerticalAlignment("middle");

  // Ferme la notification une fois le traitement terminé
  ss.toast('Importation terminée.', 'Étape finale', 5); // Le message disparaîtra après 5 secondes
}


function decoderHtml(html) {
  return XmlService.parse('<doc>' + html + '</doc>').getRootElement().getText();
}

function obtenirCategoriesMap(urlSite) {
  var reponse = UrlFetchApp.fetch("https://" + urlSite + "/wp-json/wp/v2/categories");
  var categories = JSON.parse(reponse.getContentText());
  var map = {};
  categories.forEach(function(cat) {
    map[cat.id] = cat.name;
  });
  return map;
}
   
function afficherInfosDeveloppeur() {

  const htmlContent = `
    <html>
      <head>
        <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet">
        <style>
          body {
            font-family: 'Roboto', sans-serif;
            margin: 20px;
            color: #202124; /* Google Workspace text color */
          }
          strong {
            color: #202124; /* Darker text for emphasis */
          }
          p {
            line-height: 1.6;
          }
          .linkedin-logo {
            vertical-align: middle;
            margin-right: 5px;
          }
        </style>
      </head>
      <body>
        <p>Développé par Fabrice Faucheux <a href='https://atelier-informatique.com' target="_blank">L'atelier informatique</a></p>
        <p>Me retrouver sur LinkedIn <a href='https://www.linkedin.com/in/fabricefaucheux' target="_blank"><img class="linkedin-logo" src="https://upload.wikimedia.org/wikipedia/commons/c/ca/LinkedIn_logo_initials.png" alt="LinkedIn" width="20" height="20"/>Fabrice Faucheux</a></p>
      </body>
    </html>
  `;
  const dialogue = HtmlService.createHtmlOutput(htmlContent)
    .setWidth(450)
    .setHeight(120); // Ajustez la hauteur si nécessaire
  SpreadsheetApp.getUi().showModalDialog(dialogue, 'À propos');
}

Intégration et utilisation

Après avoir intégré le script dans l’éditeur de scripts de Google Sheets et sauvegardé vos modifications, un nouveau menu intitulé « Importer WordPress » apparaîtra dans votre feuille de calcul. En sélectionnant Démarrer l'importation et en saisissant l’URL de votre site WordPress, le script débutera le processus d’importation, peuplant votre feuille de calcul avec les derniers articles de votre site.

Personnalisation et flexibilité

Après l’exécution, le script organise les données importées et applique une mise en forme de base, comme le gras pour les en-têtes et l’alignement des cellules, rendant votre feuille de calcul non seulement informative mais également esthétiquement agréable.

Conclusion

L’intégration de WordPress avec Google Sheets via Google Apps Script offre une solution élégante et puissante pour améliorer la gestion de contenu de votre site. Ce guide pratique fournit les étapes et le code nécessaires pour mettre en place cette synchronisation, rendant la gestion de contenu plus efficace et accessible. En exploitant la flexibilité de Google Sheets et la puissance de WordPress, vous pouvez désormais gérer le contenu de votre site web plus facilement que jamais.

Laisser un commentaire