Récupérez les détails d’un site web avec la macro ONLYOFFICE

12 juillet 2023By Dasha

Dans notre précédent article, nous avons créé une macro ONLYOFFICE entièrement fonctionnelle à partir d’une référence VBA envoyée par l’un de nos utilisateurs. Aujourd’hui, nous aimerions aller plus loin et lui ajouter quelques fonctionnalités de l’API Whois.

Récupérez les détails d'un site web avec la macro ONLYOFFICE

À propos de Whois

Whois, abréviation de “Who is ?”, est un protocole internet essentiel qui permet aux utilisateurs d’accéder à des informations complètes sur les noms de domaine et les adresses IP. Il s’agit d’une ressource précieuse pour obtenir des détails sur le propriétaire enregistré, les contacts administratifs et techniques, les dates d’enregistrement et d’expiration, les serveurs de noms de domaine et même l’organisation responsable de l’enregistrement du domaine.

Accès à l’API

Afin d’obtenir un accès à l’API Whois, nous utiliserons une solution fournie par l’API Ninijas.

Le site web API Ninjas est une plateforme en ligne qui offre une variété de ressources et d’informations sur les API. Il fournit également une sélection d’API gratuites que les développeurs peuvent utiliser dans leurs projets. Ce site web se veut une destination utile pour les développeurs à la recherche d’informations, d’outils et d’exemples pratiques pour améliorer leurs compétences en matière de développement d’API.

La plateforme propose des extraits de code qui aident à effectuer des requêtes 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);
    }
});

Construction de la macro

Maintenant, intégrons cette requête .ajax dans notre macro ! Les premières lignes de notre code restent intactes. A l’exception de la partie où nous avons récupéré la valeur de la cellule A4. Cette fois, la valeur de la cellule A2 suffit :

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

Ensuite, nous lançons une requête GET vers le point de terminaison de l’API spécifié dans la variable apiUrl :

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

Lorsque la réponse de l’API est positive, nous procédons au traitement des données. Nous convertissons les horodatages UNIX de la date de création, de la date d’expiration et de la date de mise à jour en formats lisibles par l’homme à l’aide de l’objet Date de JavaScript. Ces dates formatées sont stockées dans des variables telles que formattedCreationDate, formattedExpirationDate et 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();

Pour remplir la feuille de calcul avec les informations de domaine récupérées, nous utilisons une boucle forEach sur la variable dateRange. Cette boucle parcourt chaque cellule de la plage spécifiée (D1:D10). À l’intérieur de la boucle, nous récupérons la ligne actuelle à l’aide de range.GetRow() et la stockons dans la variable row :

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

La valeur actuelle de la cellule est obtenue à l’aide de range.GetValue() et stockée dans la variable currentValue :

var currentValue = range.GetValue();

En fonction de la valeur de currentValue, nous utilisons une instruction switch pour déterminer l’action appropriée. Par exemple, si currentValue est “nom de domaine”, nous fixons la valeur de result.domain_name à la cellule correspondante en utilisant oRange.SetValue(result.domain_name) :

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

De même, nous traitons d’autres cas tels que registraire, serveur whois, date de mise à jour, date de création, date d’expiration, serveurs de noms et 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;
      }
    });

Enfin, nous définissons une fonction de rechargement qui invoque la méthode Api.asc_calculate(Asc.c_oAscCalculateType.All) pour recalculer la feuille de calcul une fois la boucle terminée. Cela permet de s’assurer que les valeurs nouvellement renseignées sont reflétées dans la feuille de calcul :

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

Le code macro complet est le suivant :

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

Maintenant, exécutons notre macro et voyons comment elle fonctionne !

Nous espérons que cette macro s’avérera un outil utile pour vos projets, vous permettant de récupérer et d’afficher efficacement les détails importants d’un domaine. La flexibilité et les fonctionnalités offertes par l’API ONLYOFFICE ouvrent de vastes possibilités de personnalisation et d’automatisation de vos tâches.

Nous vous encourageons à explorer le potentiel de l’API ONLYOFFICE et à libérer votre créativité en créant vos propres macros. Si vous avez des questions ou des idées à partager, n’hésitez pas à laisser des commentaires ou à nous contacter. Nous sommes ouverts à vos idées et nous sommes impatients de collaborer avec vous. Nous vous souhaitons bonne chance dans vos projets d’exploration !