Recupera i dettagli del sito web con la macro ONLYOFFICE

12 luglio 2023By Elena

Nel nostro post precedente, abbiamo creato una macro ONLYOFFICE completamente funzionante da un riferimento VBA inviatoci da uno dei nostri utenti. Oggi vorremmo fare una cosa in più e aggiungere alcune funzionalità dell’API Whois.

Retrieve website details with ONLYOFFICE macro

A proposito di Whois

Whois, abbreviazione di “Chi è?” è un protocollo Internet essenziale che consente agli utenti di accedere a informazioni complete su nomi di dominio e indirizzi IP. Serve come una risorsa preziosa per il recupero dei dettagli relativi al proprietario registrato, ai contatti amministrativi e tecnici, alle date di registrazione e scadenza, ai server dei nomi di dominio e persino all’organizzazione responsabile della registrazione del dominio.

Accesso all’API

Per ottenere un accesso all’API Whois, utilizzeremo una soluzione fornita dall’API Ninijas.

Il sito Web API Ninjas è una piattaforma online che offre una varietà di risorse e approfondimenti sulle API. Fornisce inoltre una selezione di API gratuite che gli sviluppatori possono utilizzare nei loro progetti. Questo sito Web vuole essere una destinazione utile per gli sviluppatori che cercano informazioni, strumenti ed esempi pratici per migliorare le proprie capacità di sviluppo di API.

La piattaforma offre frammenti di codice che aiutano a fare richieste 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);
    }
});

Building the macro

Ora incorporiamo questa richiesta .ajax nella nostra macro! Le prime righe del nostro codice rimangono intatte. Ad eccezione della parte in cui abbiamo recuperato il valore della cella A4. Questa volta il valore della cella A2 è sufficiente:

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

Quindi, avviamo una richiesta GET all’endpoint API specificato nella variabile apiUrl:

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

Dopo una risposta API di successo, procediamo all’elaborazione dei dati. Convertiamo i timestamp UNIX per la data di creazione, la data di scadenza e la data aggiornata in formati leggibili dall’uomo utilizzando l’oggetto Date di JavaScript. Queste date formattate sono memorizzate in variabili come 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();

Per popolare il foglio di calcolo con le informazioni sul dominio recuperate, utilizziamo un ciclo forEach sulla variabile dateRange. Questo ciclo scorre ogni cella nell’intervallo specificato (D1:D10). All’interno del ciclo, recuperiamo la riga corrente utilizzando range.GetRow() e la memorizziamo nella variabile:

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

Il valore corrente della cella viene ottenuto utilizzando range.GetValue() e memorizzato nella variabile currentValue:

var currentValue = range.GetValue();

In base al valore di currentValue, utilizziamo un’istruzione switch per determinare l’azione appropriata. Ad esempio, se currentValue è “domain name”, impostiamo il valore di result.domain_name sulla cella corrispondente utilizzando oRange.SetValue(result.domain_name):

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

Allo stesso modo, gestiamo altri casi come registrar, server whois, data di aggiornamento, data di creazione, data di scadenza, name server 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;
      }
    });

Infine, definiamo una funzione di ricaricamento che richiama il metodo Api.asc_calculate(Asc.c_oAscCalculateType.All) per ricalcolare il foglio di calcolo dopo il completamento del ciclo. In questo modo si garantisce che i nuovi valori popolati si riflettano nel foglio di calcolo:

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

L’intero codice della macro è il seguente:

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

Ora eseguiamo la nostra macro e vediamo come funziona!

Ci auguriamo che questa macro si dimostri uno strumento utile per i tuoi progetti, consentendoti di recuperare e visualizzare in modo efficiente importanti dettagli del dominio. La flessibilità e le funzionalità offerte dall’API ONLYOFFICE aprono vaste possibilità di personalizzazione e automazione delle tue attività.

Ti invitiamo a esplorare il potenziale dell’API ONLYOFFICE e a liberare la tua creatività costruendo le tue macro. Se hai domande o idee da condividere, lasciaci commenti o contattaci. Siamo aperti alle tue idee. Buona fortuna per i tuoi sforzi esplorativi!