Recupere detalhes do site com a macro ONLYOFFICE

18 julho 2023Por Klaibson

Em nosso outro post, construímos uma macro ONLYOFFICE totalmente funcional a partir de uma referência VBA enviada a nós por um dos nossos usuários. Hoje, gostaríamos de aumentá-lo e adicionar algumas funcionalidades da API Whois a ele.

Recupere detalhes do site com a macro ONLYOFFICE

Sobre o Whois

Whois, abreviação de “Quem é?” é um protocolo de internet essencial que permite aos usuários acessar informações abrangentes sobre nomes de domínio e endereços IP. Ele serve como um recurso valioso para recuperar detalhes relacionados ao proprietário registrado, contatos técnicos e administrativos, datas de registro e expiração, servidores de nome de domínio e até mesmo a organização responsável pelo registro de domínio.

Acessando a API

Para obter acesso à API Whois, usaremos uma solução fornecida pela API Ninjas.

O Site do API Ninjas é uma plataforma online que oferece uma variedade de recursos e insights sobre APIs. Ele também fornece uma seleção de APIs gratuitas que os desenvolvedores podem usar em seus projetos. Este site visa ser um destino útil para desenvolvedores que procuram informações, ferramentas e exemplos práticos para melhorar suas habilidades de desenvolvimento de API.

A plataforma oferece trechos de código que auxiliam na realização de solicitações HHTP:

var domain = 'example.com'
$.ajax({
    method: 'GET',
    url: 'https://api.api-ninjas.com/v1/whois?domain=' + domain,
    headers: { 'X-Api-Key': 'your_API_key'},
    contentType: 'application/json',
    success: function(result) {
        console.log(result);
    },
    error: function ajaxError(jqXHR) {
        console.error('Error: ', jqXHR.responseText);
    }
});

Construindo a macro

Agora vamos incorporar esta solicitação .ajax em nossa macro! As primeiras linhas do nosso código permanecem intactas. Exceto a parte em que recuperamos o valor da célula A4. Desta vez, o valor da célula A2 é suficiente:

var sheet = Api.GetActiveSheet();
var domainValue = sheet.GetRange("A2").GetValue();
var dateRange = sheet.GetRange("D1:D10");

Em seguida, iniciamos uma solicitação GET para o endpoint da API especificado na variável apiUrl:

$.ajax({
  method: 'GET',
  url: apiUrl,
  headers: { 'X-Api-Key': 'your_API_key' },
  contentType: 'application/json',
  success: function(result) {
    console.log(result);

Após uma resposta bem-sucedida da API, procedemos ao processamento dos dados. Convertemos os timestamps do UNIX para data de criação, data de expiração e data atualizada em formatos legíveis por humanos usando o objeto Date do JavaScript. Essas datas formatadas são armazenadas em variáveis como formattedCreationDate, formattedExpirationDate e formattedUpdatedDate:

 // Convert creation_date to a more readable format
    var unixTimestamp = result.creation_date;
    var creationDate = new Date(unixTimestamp * 1000);
    var formattedCreationDate = creationDate.toDateString();
    // Convert expiration_date to a more readable format
    var expirationTimestamp = result.expiration_date;
    var expirationDate = new Date(expirationTimestamp * 1000);
    var formattedExpirationDate = expirationDate.toDateString();
    // Convert updated_date to a more readable format
    var updatedTimestamp = result.updated_date;
    var updatedDate = new Date(updatedTimestamp * 1000);
    var formattedUpdatedDate = updatedDate.toDateString();

Para preencher a planilha com as informações de domínio recuperadas, usamos um loop forEach na variável dateRange. Este loop itera através de cada célula no intervalo especificado (D1:D10). Dentro do loop, recuperamos a linha atual usando range.GetRow() e a armazenamos na variável de linha:

var oRange = sheet.GetRange("E" + row);

O valor atual da célula é obtido usando range.GetValue() e armazenado na variável currentValue:

var currentValue = range.GetValue();

Com base no valor de currentValue, usamos uma instrução switch para determinar a ação apropriada. Por exemplo, se currentValue for “domain name”, definimos o valor de result.domain_name para a célula correspondente usando oRange.SetValue(result.domain_name):

    switch (currentValue) {
        case "domain name":
          oRange.SetValue(result.domain_name);
          break;

Da mesma forma, lidamos com outros casos, como registrador, servidor whois, data de atualização, data de criação, data de expiração, servidores de nome e dnssec:

   oRange.SetValue(result.registrar);
          break;
        case "whois server":
          oRange.SetValue(result.whois_server);
          break;
        case "updated date":
          oRange.SetValue(formattedUpdatedDate);
          break;
        case "creation date":
          oRange.SetValue(formattedCreationDate);
          break;
        case "expiration date":
          oRange.SetValue(formattedExpirationDate);
          break;
        case "name servers":
          oRange.SetValue(result.name_servers.join(", "));
          break;
        case "dnssec":
          oRange.SetValue(result.dnssec);
          break;
        default:
          // Handle other cases if needed
          break;
      }
    });

Por fim, definimos uma função de recarga que invoca o método Api.asc_calculate(Asc.c_oAscCalculateType.All) para recalcular a planilha após a conclusão do loop. Isso garante que os valores recém-preenchidos sejam refletidos na planilha:

    reload(); // Invoke reload function after the loop is completed
  },
  error: function ajaxError(jqXHR) {
    console.error('Error: ', jqXHR.responseText);
  }
});
function reload() {
    let reloadInterval = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
    }, 100);
}

Todo o código da macro é o seguinte:

(function()
{
  var sheet = Api.GetActiveSheet();
var domainValue = sheet.GetRange("A2").GetValue();
var dateRange = sheet.GetRange("D1:D10");
var apiUrl = 'https://api.api-ninjas.com/v1/whois?domain=' + domainValue;
$.ajax({
  method: 'GET',
  url: apiUrl,
  headers: { 'X-Api-Key': 'your_API_key' },
  contentType: 'application/json',
  success: function(result) {
    console.log(result);
    // Convert creation_date to a more readable format
    var unixTimestamp = result.creation_date;
    var creationDate = new Date(unixTimestamp * 1000);
    var formattedCreationDate = creationDate.toDateString();
    // Convert expiration_date to a more readable format
    var expirationTimestamp = result.expiration_date;
    var expirationDate = new Date(expirationTimestamp * 1000);
    var formattedExpirationDate = expirationDate.toDateString();
    // Convert updated_date to a more readable format
    var updatedTimestamp = result.updated_date;
    var updatedDate = new Date(updatedTimestamp * 1000);
    var formattedUpdatedDate = updatedDate.toDateString();
    dateRange.ForEach(function(range) {
      var row = range.GetRow();
      var oRange = sheet.GetRange("E" + row);
      var currentValue = range.GetValue();
      switch (currentValue) {
        case "domain name":
          oRange.SetValue(result.domain_name);
          break;
        case "registrar":
          oRange.SetValue(result.registrar);
          break;
        case "whois server":
          oRange.SetValue(result.whois_server);
          break;
        case "updated date":
          oRange.SetValue(formattedUpdatedDate);
          break;
        case "creation date":
          oRange.SetValue(formattedCreationDate);
          break;
        case "expiration date":
          oRange.SetValue(formattedExpirationDate);
          break;
        case "name servers":
          oRange.SetValue(result.name_servers.join(", "));
          break;
        case "dnssec":
          oRange.SetValue(result.dnssec);
          break;
        default:
          // Handle other cases if needed
          break;
      }
    });
    reload(); // Invoke reload function after the loop is completed
  },
  error: function ajaxError(jqXHR) {
    console.error('Error: ', jqXHR.responseText);
  }
});
function reload() {
    let reloadInterval = setInterval(function() {
        Api.asc_calculate(Asc.c_oAscCalculateType.All);
    });
}
})();

Agora, vamos rodar nossa macro e ver como funciona!

Esperamos que esta macro seja uma ferramenta útil para seus projetos, permitindo que você recupere e exiba com eficiência detalhes importantes do domínio. A flexibilidade e a funcionalidade oferecidas pela API do ONLYOFFICE abrem vastas possibilidades de personalização e automação de suas tarefas.

Incentivamos você a explorar o potencial da API do ONLYOFFICE e liberar sua criatividade criando suas próprias macros. Se você tiver alguma dúvida ou ideia para compartilhar, sinta-se à vontade para deixar comentários ou fale conosco. Estamos abertos para ouvir suas ideias e estamos ansiosos para colaborar com você. Boa sorte em seus esforços exploratórios!

Crie sua conta gratuita no ONLYOFFICE

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