Come inserire i risultati di ricerca di YouTube nel tuo foglio di calcolo con una macro

22 novembre 2023By Elena

Questa macro integra i risultati di ricerca su YouTube in ONLYOFFICE Editor di fogli di calcolo. Incorporando la funzionalità di ricerca su YouTube, offre una soluzione conveniente per arricchire i fogli di calcolo con contenuti multimediali. Vediamo come costruire questa macro.

A Macro that inserts Youtube Search Results in ONLYOFFICE Spreadhseet


Per questa macro, stiamo integrando la potenza di RapidAPI per facilitare il nostro processo di recupero dei dati. Utilizzando la funzione XMLHttpRequest, definiamo l’URL di destinazione e impostiamo le intestazioni utilizzando gli snippet di codice forniti da RapidAPI. Abbiamo deciso di utilizzare risultati di ricerca YouTube di Riferimento API di Marin Delija. È una scelta ideale perché il piano base è gratuito, dandoci il via libera per 100 richieste ogni giorno. Inoltre, sono disponibili piani a pagamento se abbiamo bisogno di aumentare le tue richieste. È una scelta pratica che bilancia le esigenze e il budget di tutti.

Se fai già parte della comunità RapidAPI, fai semplicemente clic sul collegamento qui sopra e iscriviti al riferimento API. Per i nuovi utenti, il processo di registrazione è semplice: basta fornire il tuo indirizzo email e sei a posto.

Creazione della macro

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

Queste righe recuperano il foglio attivo nell’editor di fogli di calcolo di ONLYOFFICE e lo assegnano alla variabile oWorksheet. Inizializziamo anche un array vuoto query, che memorizzerà le query da cercare.

// 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);
    }
  }

Questo ciclo for scorre tra le celle da A1 ad A3, catturando i valori. Se un valore esiste e non è vuoto, viene aggiunto all’array 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 funzione popola potrebbe sembrare complicata all’inizio, ma non è complicata. La funzione popola accetta tre parametri: conteggio, titolo e link. In base al conteggio, popola le celle appropriate nel foglio di calcolo con i risultati. Ha due cicli for; uno aiuta a popolare i titoli, mentre l’altro ciclo for compila i link accanto ai titoli.

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

In questa parte definiamo una funzione reloadCellValues che utilizza setTimeout per aggiornare tutti i valori delle celle nel foglio di calcolo dopo un ritardo di 5 secondi.

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);
    };

Qui utilizziamo un ciclo for per scorrere ogni query memorizzata nell’array query , effettuando richieste successive a RapidAPI. Definiamo un URL dinamico nella variabile url . Una costante xhr viene inizializzata con l’oggetto XMLHttpRequest .

Con xhr.onload, definiamo un gestore di eventi per quando XMLHttpRequest ha completato con successo la sua richiesta.

All’interno della funzione onload, recuperiamo i dati e quindi destrutturiamo l’oggetto per estrarre i valori necessari.

Quindi utilizziamo il metodo map per scorrere tutti i titoli e i collegamenti, memorizzandoli in due array. Questi array, insieme al count, vengono poi passati alla funzione popola .

 // 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);
  }

Successivamente, definiamo l’URL di destinazione per XMLHttpRequest e configuriamo le intestazioni per la richiesta. Questo segmento di codice viene estratto dai frammenti di codice forniti da RapidAPI per una XMLHttpRequest. Dovrai sostituire “YourApiKey” con la tua chiave API personale, che puoi trovare in RapidAPI.

reloadCellValues();

Infine, invochiamo il metodo reloadCellValues che abbiamo definito in precedenza.

L’intero codice della macro

Ecco l’intero codice della 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();
})();

Vediamo la macro in azione.

Ci auguriamo che la macro si sia rivelata utile, integrando perfettamente i dati dei risultati di ricerca di YouTube direttamente nel tuo foglio di calcolo.

Non perdere l’occasione di sfruttare la potenza dell’API ONLYOFFICE. La nostra vasta libreria di metodi API è la chiave per trasformare le tue idee in realtà. Se hai domande o concetti innovativi, ti invitiamo a condividerli con noi. Il tuo contributo è molto apprezzato e siamo entusiasti della possibilità di collaborare con te. Buona fortuna per i tuoi sforzi esplorativi!