Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

15 agosto 2022Por Klaibson

A pesquisa na Web tornou-se uma parte essencial da nossa vida. Fazemos isso diariamente. Mas e se precisarmos armazenar os resultados da pesquisa em algum lugar? Em uma planilha por exemplo? É uma maneira muito conveniente de operar com seus dados. Nesta postagem do blog, mostraremos como criar uma macro do ONLYOFFICE que insere os resultados da Pesquisa Google em uma planilha.

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Sobre a API rápida

API significa Interface de Programação de Aplicativos e é uma pedra angular da Internet nos dias de hoje. Está em todo lugar. Seja um aplicativo de previsão do tempo ou um mensageiro em seu telefone. API é um protocolo que um aplicativo da web usa para se comunicar com um servidor. Escusado será dizer que a recuperação dos resultados da Pesquisa Google também requer API.

Por conveniência, sugerimos obter a Google Web Search API por meio da plataforma Rapid API. É um mercado usado por mais de um milhão de desenvolvedores para descobrir e se conectar a milhares de APIs. Oferece planos gratuitos, freemium e pagos. Cada API vem com um trecho de código que economiza muito tempo.

Escolhendo a API

Após um registro bem-sucedido na API Rapid, procuramos a API Google Web Search. Neste momento, existem várias opções disponíveis.

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Para testar nossa macro, escolhemos esta  API. Oferece um plano freemium com 300 solicitações por mês. Esse plano será suficiente para vermos do que nossa macro é capaz. Caso precise de mais solicitações, você pode escolher uma API diferente ou assinar um plano pago.

Observação! Cada API fornece uma chave de acesso exclusiva. Sua macro funcionará apenas com as APIs nas quais você se inscreveu.

Como definir parâmetros de API

Na página da API, podemos ver quais parâmetros podem ser aplicados à nossa solicitação de pesquisa. Deixaremos a API rápidaURL de solicitaçãoParâmetros de cabeçalho intactos. É disso que nossa API precisa para interagir com o servidor. Os Parâmetros Obrigatórios contêm nossa solicitação de pesquisa. Aqui colocamos “Onlyoffice editors.”

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Além disso, você pode adicionar alguns parâmetros opcionais à sua solicitação. No nosso caso, podemos especificar quais páginas queremos recuperar, o número de resultados (o máximo é 100 e o valor padrão é 20), a localidade da solicitação de pesquisa, o filtro de tempo e o país. Estamos deixando esses parâmetros padrão. Portanto, os dados recuperados conterão 20 resultados em inglês, começando na primeira página sem filtro de tempo aplicado.

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Agora precisamos escolher um idioma no qual faremos nossa solicitação de API. Faremos uma solicitação XML/HTTP em JavaScript. Então, vamos para o painel direito e, em Code Snippets, selecionamos JavaScript > XML/HttpRequest.

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Antes de prosseguirmos para nossa macro, vamos ver quais dados voltam. Podemos fazê-lo nesta página. Para isso, precisamos clicar no botão Test Endpoint. Os resultados serão exibidos no painel direito.

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

A solicitação de API retornou 2 itens. O que estamos procurando é a matriz de resultados. Ele contém os resultados da pesquisa que vamos colar em nossa planilha. Se olharmos mais de perto, veremos que cada matriz de resultados de pesquisa tem os elementos título, link e snippet. Mais tarde, buscaremos apenas os elementos title e link e os inseriremos em nossa planilha. Mas agora voltamos aos snippets de código e copiamos nossa solicitação XML/HTTP.

Inserir duas linhas em uma coluna

Nesta variação da nossa macro, vamos combinar os valores do título e do link e inseri-los em uma coluna juntos.

Então, abrimos o ONLYOFICE Editors, criamos uma nova macro e colamos a solicitação XML/HTTP que copiamos acima. Vamos para a if statement que começa após o evento readystatechange e removemos a linha com o método console.log. Nós não precisamos disso. Vamos adicionar nosso próprio código aqui.

Primeiro, precisamos converter os dados que recuperamos da solicitação em um formato JSON. Para isso, usamos o método JSON.parse e armazenamos o resultado na variável oData:

(function()
{
   const data = null;

  const xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  xhr.addEventListener("readystatechange", function () {
    if (this.readyState === this.DONE) {
      const oData = JSON.parse(xhr.responseText);

Então começamos a filtrar os dados. Primeiro, buscamos o array de resultados e o armazenamos em uma variável separada:

const { results } =  oData;

Agora podemos acessar os elementos títulolink nesta matriz. Em nossa próxima etapa, usamos o método map para combinar os valores título e link e armazená-los na variável dataComb. Dessa forma, eles formarão uma linha e a inserirão nas células da planilha posteriormente:

 const dataComb = results.map((item) => ({
      title: item.title,
      link: item.url,
    }));

Portanto, temos a variável dataComb que contém elementos. Cada elemento inclui o título e o valor do link. Nosso objetivo agora é inseri-los nas células. Para fazer isso, criamos um for loop. Ele irá percorrer cada elemento na variável, convertê-lo em uma string e inseri-lo em uma célula correspondente:

 let nRow = 0;
      for (let i = 0; i < dataComb.length; i++) {
       const text = JSON.stringify(dataComb[i]); 
        var oWorksheet = Api.GetActiveSheet();
  oWorksheet.GetRangeByNumber(nRow, 0).SetValue(text);
  oWorksheet.GetRangeByNumber(nRow, 0).AutoFit(false, true);
  nRow++;
      }

Primeiro, criamos a variável nRow. Mais tarde, usamos como índice com o método GetRangeByNumber para selecionar a linha. Incrementamos a variável nRow para alternar para a próxima linha em cada iteração. Iteramos cada elemento na variável dataComb, convertemos em uma string e usamos o método SetValue para inserir valores nas linhas selecionadas. Para isso, pegamos a variável i que declaramos nos parâmetros e a usamos como índice. Além disso, usamos o método AutoFit para ajustar o tamanho da célula.

O código completo da macro é o seguinte:

(function()
{
   const data = null;

  const xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  xhr.addEventListener("readystatechange", function () {
    if (this.readyState === this.DONE) {
      const oData = JSON.parse(xhr.responseText);
      const { results } =  oData;
      const dataComb = results.map((item) => ({
      title: item.title,
      link: item.url,
    }));
    let nRow = 0;
      for (let i = 0; i < dataComb.length; i++) {
       const text = JSON.stringify(dataComb[i]); 
        var oWorksheet = Api.GetActiveSheet();
  oWorksheet.GetRangeByNumber(nRow, 0).SetValue(text);
  oWorksheet.GetRangeByNumber(nRow, 0).AutoFit(false, true);
  nRow++;
      }
    }
  });

  xhr.open("GET", "https://google-search26.p.rapidapi.com/search?q=Onlyoffice%20editors&hl=en&tbs=qdr%3Aa");
  xhr.setRequestHeader("X-RapidAPI-Key", "3a059ddf9bmshc40ba13a409d0abp12b76bjsn8fd6f316f49b");
  xhr.setRequestHeader("X-RapidAPI-Host", "google-search26.p.rapidapi.com");

  xhr.send(data);
})();

Agora vamos executar nossa macro e ver como ela funciona:

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Inserir linhas em colunas separadas

Nesta variação de nossa macro, inseriremos o título e os valores do link em duas colunas separadas.

Para isso, usamos o método map para salvar os valores do título e do link em duas variáveis:

 const { results } =  oData;
    
      const title = results.map((item) => item.title);
      const link = results.map((item) => item.link);

Agora criamos dois laços for. Um irá percorrer a variável title e inserir os valores na primeira coluna:

   let nRowTitle = 0;
      for (let i = 0; i < title.length; i++) {
       const text = JSON.stringify(title[i]); 
          var oWorksheet = Api.GetActiveSheet();
  oWorksheet.GetRangeByNumber(nRowTitle, 0).SetValue(text);
  oWorksheet.GetRangeByNumber(nRowTitle, 0).AutoFit(false, true);
  nRowTitle++;
      }

Outro irá percorrer a variável de link e inserir os valores na segunda coluna:

 let nRowLink = 0;
       for (let i = 0; i < link.length; i++) {
       const text = JSON.stringify(link[i]); 
  oWorksheet.GetRangeByNumber(nRowLink, 1).SetValue(text);
  oWorksheet.GetRangeByNumber(nRowLink, 1).AutoFit(false, true);
  nRowLink++;
       }

Observe que alteramos o segundo parâmetro do método GetRangeByNumber para 1. Esse parâmetro corresponde à posição das colunas. Dessa forma, os valores do link serão inseridos na segunda coluna.

O código completo da macro é o seguinte:

(function()
{
    const data = null;

  const xhr = new XMLHttpRequest();
  xhr.withCredentials = true;

  xhr.addEventListener("readystatechange", function () {
    if (this.readyState === this.DONE) {
      const oData = JSON.parse(xhr.responseText);
      const { results } =  oData;
      const title = results.map((item) => item.title);
      const link = results.map((item) => item.link);
    let nRowTitle = 0;
      for (let i = 0; i < title.length; i++) {
       const text = JSON.stringify(title[i]); 
          var oWorksheet = Api.GetActiveSheet();
  oWorksheet.GetRangeByNumber(nRowTitle, 0).SetValue(text);
  oWorksheet.GetRangeByNumber(nRowTitle, 0).AutoFit(false, true);
  nRowTitle++;
      }
     let nRowLink = 0;
       for (let i = 0; i < link.length; i++) {
       const text = JSON.stringify(link[i]); 
  oWorksheet.GetRangeByNumber(nRowLink, 1).SetValue(text);
  oWorksheet.GetRangeByNumber(nRowLink, 1).AutoFit(false, true);
  nRowLink++;
       }
    }
  });

xhr.open("GET", "https://google-search26.p.rapidapi.com/search?q=Onlyoffice%20editors&hl=en&tbs=qdr%3Aa");
xhr.setRequestHeader("X-RapidAPI-Key", "3a059ddf9bmshc40ba13a409d0abp12b76bjsn8fd6f316f49b");
xhr.setRequestHeader("X-RapidAPI-Host", "google-search26.p.rapidapi.com");

xhr.send(data);
})();

Agora, vamos executar nossa macro:

Insira os resultados da Pesquisa Google em uma planilha com a macro ONLYOFFICE

Esperamos que esta macro ajude a automatizar as tarefas rotineiras e a estruturar os dados de forma mais conveniente. É apenas uma fração do que as macros ONLYOFFICE podem fazer.

Nossas macros são baseadas em JavaScript, o que as torna extremamente versáteis e fáceis de serem adaptadas às suas necessidades. Gentilmente encorajamos você a experimentar e criar suas próprias macros. Não hesite em fazer perguntas e compartilhar conosco suas idéias ou macros. Estamos abertos à discussão e cooperação.

Crie sua conta gratuita no ONLYOFFICE

Visualize, edite e colabore em documentos, planilhas, slides, formulários e arquivos PDF online.