Como inserir resultados de pesquisa do YouTube em sua planilha usando macros
Esta macro integra os resultados de pesquisa do YouTube em ONLYOFFICE Editor de Planilhas. Ao incorporar a funcionalidade de pesquisa do YouTube, oferece uma solução conveniente para enriquecer planilhas com conteúdo multimídia. Vamos ver como construir a macro.
Sobre a API
Para esta macro, estamos integrando o poder do RapidAPI para facilitar nosso processo de recuperação de dados. Usando o recurso XMLHttpRequest, definimos o URL de destino e definimos cabeçalhos usando os trechos de código fornecidos pelo RapidAPI. Decidimos ir com Referência da API de resultados de pesquisa do YouTube de Marin Delija. É a escolha ideal porque o plano básico é gratuito, dando-nos luz verde para 100 solicitações por dia. Além disso, existem planos pagos disponíveis se precisarmos aumentar suas solicitações. É uma escolha prática que equilibra as necessidades e o orçamento de todos!
Se você já faz parte da comunidade RapidAPI, basta clicar no link acima e assinar a referência da API. Para novos usuários, o processo de inscrição é simples – basta fornecer seu endereço de e-mail e pronto!
Construindo a macro
const data = null;
const oWorksheet = Api.GetActiveSheet();
let query = []; // empty query array to store the queries
Essas linhas recuperam a planilha ativa na planilha do ONLYOFFICE e a atribuem à variável oWorksheet. Também inicializamos uma consulta de array vazia, que armazenará as consultas a serem pesquisadas.
// 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);
}
}
Este for loop percorre as células A1 a A3, capturando os valores. Se um valor existir e não estiver vazio, ele será anexado à matriz de consulta.
// 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);
}
}
A função populate pode parecer complicada à primeira vista, mas não é complicada. A função de preenchimento usa três parâmetros: contagem, título e link. Com base na contagem, ele preenche as células apropriadas na planilha com os resultados. Possui dois loops for; um ajuda a preencher os títulos, enquanto o outro for loop preenche os links ao lado dos títulos.
// refreshes the values in all the cells of the spreadsheet
function reloadCellValues() {
let reload = setTimeout(function () {
Api.asc_calculate(Asc.c_oAscCalculateType.All);
}, 5000);
}
Nesta parte, definimos uma função reloadCellValues que usa setTimeout para atualizar todos os valores de células na planilha após um atraso de 5 segundos.
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);
};
Aqui, usamos um loop for para iterar cada consulta armazenada no array de consultas, fazendo solicitações subsequentes ao RapidAPI. Definimos um URL dinâmico na variável url. Uma constante xhr é inicializada com o objeto XMLHttpRequest.
Com xhr.onload, definimos um manipulador de eventos para quando o XMLHttpRequest tiver concluído sua solicitação com êxito.
Dentro da função onload, recuperamos os dados e depois desestruturamos o objeto para extrair os valores necessários.
Em seguida, usamos o método map para iterar todos os títulos e links, armazenando-os em dois arrays. Essas matrizes, junto com a contagem, são então passadas para a função 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);
}
A seguir, definimos a URL de destino para XMLHttpRequest e configuramos os cabeçalhos da solicitação. Este segmento de código é extraído dos trechos de código fornecidos pelo RapidAPI para um XMLHttpRequest. Você precisará substituir “YourApiKey” pela sua chave de API pessoal, que pode ser encontrada no RapidAPI.
reloadCellValues();
Por fim, invocamos o método reloadCellValues que definimos anteriormente.
O código de macro completo
Aqui está todo o código da 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();
})();
Vamos ver a macro em ação.
Esperamos que a macro tenha se mostrado útil, integrando perfeitamente os dados dos resultados de pesquisa do YouTube diretamente em sua planilha.
Não perca a chance de aproveitar o poder da API ONLYOFFICE. Nossa extensa biblioteca de métodos API é a chave para transformar suas ideias em realidade. Se você tiver alguma dúvida ou conceitos inovadores, encorajamos você a compartilhar conosco. Sua contribuição é altamente valorizada e estamos entusiasmados com a possibilidade de colaborar com você. Boa sorte em seus empreendimentos exploratórios!
Crie sua conta gratuita no ONLYOFFICE
Visualize, edite e colabore em documentos, planilhas, slides, formulários e arquivos PDF online.