Comment insérer des résultats de recherche YouTube dans votre feuille de calcul à l’aide de macros

22 novembre 2023By Dasha

Cette macro intègre les résultats de recherche YouTube dans le tableur ONLYOFFICE. En intégrant la fonctionnalité de recherche YouTube, elle offre une solution pratique pour enrichir les feuilles de calcul avec du contenu multimédia. Voyons comment construire la macro.

A Macro that inserts Youtube Search Results in ONLYOFFICE Spreadhseet

À propos de l’API

Pour cette macro, nous intégrons la puissance de RapidAPI pour faciliter notre processus de récupération des données. En utilisant la fonctionnalité XMLHttpRequest, nous définissons l’URL cible et les en-têtes à l’aide des extraits de code fournis par RapidAPI. Nous avons décidé d’utiliser la référence API YouTube Search Results de Marin Delija. C’est un choix idéal, car le plan de base est gratuit et nous donne le feu vert pour 100 demandes par jour. De plus, des plans payants sont disponibles si nous avons besoin d’augmenter le nombre de demandes. C’est un choix pratique qui répond aux besoins et au budget de chacun !

Si vous faites déjà partie de la communauté RapidAPI, cliquez simplement sur le lien ci-dessus et abonnez-vous à la référence API. Pour les nouveaux utilisateurs, la procédure d’inscription est simple – il suffit de fournir votre adresse électronique et vous êtes prêt à partir !

Construction de la macro

  const data = null;
  const oWorksheet = Api.GetActiveSheet();
  let query = []; // empty query array to store the queries

Ces lignes récupèrent la feuille active dans le tableur ONLYOFFICE et l’affectent à la variable oWorksheet. Nous initialisons également un tableau vide query, qui stockera les requêtes à rechercher.

// Takes the queries from the cells A1, A2, and A3.
  for (let i = 1; i < 4; i++) {
    const value = String(oWorksheet.GetRange("A" + i).GetValue());
    if (value !== null && value.length !== 0) {
      query.push(value);
    }
  }

Cette boucle for parcourt les cellules A1 à A3, en saisissant les valeurs. Si une valeur existe et n’est pas vide, elle est ajoutée au tableau query.

  // polpulates the cells with the titles and links from the queries
  function populate(count, title, link) {
    let nRowTitle = 9;
    for (let j = 0; j < title.length; j++) {
      let passedTitleCount = count * 3;
      const text = JSON.stringify(title[j]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet.GetRangeByNumber(nRowTitle - 1, passedTitleCount).SetValue(query[count]);
      oWorksheet.GetRangeByNumber(nRowTitle - 1, passedTitleCount).SetAlignHorizontal("center");
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .AutoFit(false, true);
    }
    let nRowLink = 9;
    for (let h = 0; h < link.length; h++) {
      let passedLinkCount = count * 3 + 1;
      const text = JSON.stringify(link[h]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .AutoFit(false, true);
    }
  }

La fonction populate peut sembler impressionnante à première vue, mais elle n’est pas compliquée. La fonction populate prend trois paramètres : count (nombre), title (titre) et link (lien). En fonction du nombre, elle remplit les cellules appropriées de la feuille de calcul avec les résultats. Elle comporte deux boucles for ; l’une permettant de remplir les titres, l’autre les liens à côté des titres.

// refreshes the values in all the cells of the spreadsheet
  function reloadCellValues() {
    let reload = setTimeout(function () {
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    }, 5000);
  }

Dans cette partie, nous définissons une fonction reloadCellValues qui utilise setTimeout pour rafraîchir toutes les valeurs des cellules de la feuille de calcul après un délai de 5 secondes.

for (let count = 0; count < query.length; count++) {
    const url = `https://youtube-search-results.p.rapidapi.com/youtube-search/?q=${query[count]}`;
    const xhr = new XMLHttpRequest();
    xhr.onload = function () {
      const apiData = JSON.parse(this.response);
      const { videos: results } = apiData;
      const title = results.map((i) => i.title);
      const link = results.map((i) => i.link);
      populate(count, title, link);
    };

Ici, nous utilisons une boucle for pour itérer sur chaque requête stockée dans le tableau de requêtes, en effectuant des requêtes ultérieures à RapidAPI. Nous définissons une URL dynamique dans la variable url. Une constante xhr est initialisée avec l’objet XMLHttpRequest.

Avec xhr.onload, nous définissons un gestionnaire d’événement lorsque le XMLHttpRequest a terminé sa requête avec succès.

Dans la fonction onload, nous récupérons des données et déstructurons ensuite l’objet pour en extraire les valeurs nécessaires.

Ensuite, nous utilisons la méthode map pour parcourir tous les titres et tous les liens, en les stockant dans deux tableaux. Ces tableaux, ainsi que le nombre, sont ensuite transmis à la fonction populate.

 // XMLHttpRequest Code Snippets copied from RapidAPI
    xhr.open("GET", url);
    xhr.setRequestHeader(
      "X-RapidAPI-Key",
      YourApiKey
    );
    xhr.setRequestHeader(
      "X-RapidAPI-Host",
      "youtube-search-results.p.rapidapi.com"
    );
    xhr.send(data);
  }

Ensuite, nous définissons l’URL cible pour le XMLHttpRequest et configurons les en-têtes pour la requête. Ce segment de code est extrait des extraits de code fournis par RapidAPI pour un XMLHttpRequest. Vous devrez remplacer “YourApiKey” par votre clé API personnelle, qui peut être trouvée dans RapidAPI.

reloadCellValues();

Enfin, nous invoquons la méthode reloadCellValues que nous avons définie précédemment.

Code complet de la macro

Voici le code complet de la macro.

(function () {
  const data = null;

  const oWorksheet = Api.GetActiveSheet();

  let query = []; // empty query array to store the queries

  // Takes the queries from the cells A1, A2, and A3.
  for (let i = 1; i < 4; i++) {
    const value = String(oWorksheet.GetRange("A" + i).GetValue());
    if (value !== null && value.length !== 0) {
      query.push(value);
    }
  }

  // polpulates the cells with the titles and links from the queries
  function populate(count, title, link) {
    let nRowTitle = 9;
    for (let j = 0; j < title.length; j++) {
      let passedTitleCount = count * 3;
      const text = JSON.stringify(title[j]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowTitle - 1, passedTitleCount)
        .SetValue(query[count]);
      oWorksheet
        .GetRangeByNumber(nRowTitle - 1, passedTitleCount)
        .SetAlignHorizontal("center");
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .AutoFit(false, true);
    }

    let nRowLink = 9;
    for (let h = 0; h < link.length; h++) {
      let passedLinkCount = count * 3 + 1;
      const text = JSON.stringify(link[h]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .AutoFit(false, true);
    }
  }

  // refreshes the values in all the cells of the spreadsheet
  function reloadCellValues() {
    let reload = setTimeout(function () {
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    }, 5000);
  }

  // for loop for multiple queries
  for (let count = 0; count < query.length; count++) {
    const url = `https://youtube-search-results.p.rapidapi.com/youtube-search/?q=${query[count]}`;
    const xhr = new XMLHttpRequest();
    xhr.onload = function () {
      const apiData = JSON.parse(this.response);
      const { videos: results } = apiData;
      const title = results.map((i) => i.title);
      const link = results.map((i) => i.link);
      populate(count, title, link);
    };

    // XMLHttpRequest Code Snippets copied from RapidAPI
    xhr.open("GET", url);
    xhr.setRequestHeader("X-RapidAPI-Key", "YOUR API KEY GOES HERE");
    xhr.setRequestHeader(
      "X-RapidAPI-Host",
      "youtube-search-results.p.rapidapi.com"
    );
    xhr.send(data);
  }

  reloadCellValues();
})();

Voyons la macro en action.

Nous espérons que cette macro s’est avérée utile, en intégrant de manière transparente les données des résultats de recherche de YouTube directement dans votre feuille de calcul.

Ne manquez pas l’occasion d’exploiter la puissance de l’API ONLYOFFICE. Notre vaste bibliothèque de méthodes API est votre clé pour transformer vos idées en réalité. Si vous avez des questions ou des concepts innovants, nous vous encourageons à les partager avec nous. Votre contribution est très appréciée et nous sommes ravis de pouvoir collaborer avec vous. Nous vous souhaitons bonne chance dans vos projets exploratoires !