Tutoriel pour apprendre comment récupérer les détails d’un site web avec la macro ONLYOFFICE

Daria Lapikhina

Nous continuons notre série de tutoriels consacrée aux macros dans ONLYOFFICE. Dans cet article, nous allons créer une macro qui collecte les détails d’un site web dans une feuille de calcul en utilisant quelques fonctionnalités de l’API Whois.

Pour réagir au contenu de cet article, un espace de dialogue vous est proposé sur le forum. Commentez

- Titre : Tutoriel pour apprendre comment récupérer les détails d’un site web avec la macro ONLYOFFICE

- Auteur : Daria Lapikhina

- Parution : 13 février 2024

- Licence : Copyright ® 2024 Daria Lapikhina . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. À propos de macros ONLYOFFICE

- II. À propos de Whois

- III. Accès à l’API

- IV. Construction de la macro

- V. Code complet de la macro

- VI. Ressources utiles

- VII. Remerciements Developpez.com

I - À propos de macros ONLYOFFICE

En ce qui concerne l'automatisation des tâches, ONLYOFFICE Docs n'est pas compatible avec les macros VBA de Microsoft. Il utilise des macros JavaScript qui sont capables de réaliser les mêmes opérations de manière beaucoup plus sûre.

ONLYOFFICE utilise JavaScript pour les macros pour les raisons suivantes :

- Elles sont multiplateformes. Contrairement à Visual Basic de Microsoft Office, JavaScript est un langage de programmation plus courant. Par conséquent, les macros JavaScript peuvent facilement être exécutées sur les plateformes Windows, Linux et macOS.

- Elles sont faciles à utiliser. JavaScript est souvent recommandé aux débutants et sa communauté est en pleine expansion. De nombreuses personnes choisissent JavaScript comme premier langage de programmation parce qu'il existe de nombreux tutoriels et guides détaillés sur l'Internet.

- Les macros ONLYOFFICE sont plus sécurisées, car elles n'ont aucun accès au système. Le code JavaScript des macros ONLYOFFICE s'exécute dans la même fenêtre que les éditeurs. Par conséquent, les attaquants ne peuvent pas l'utiliser pour compromettre votre système, parce qu'ils n'y ont pas accès.

II - À 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.

III - Accès à l’API

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

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 :

1. var domain = 'example.com'

2. $.ajax({

3. method: 'GET',

4. url: 'https://api.api-ninjas.com/v1/whois?domain=' + domain,

5. headers: { 'X-Api-Key': 'your_API_key'},

6. contentType: 'application/json',

7. success: function(result) {

8. console.log(result);

9. },

10. error: function ajaxError(jqXHR) {

11. console.error('Error: ', jqXHR.responseText);

12. }

13. });

IV - Construction de la macro

Maintenant, intégrons cette requête .ajax dans notre macro ! Les premières lignes de notre code restent intactes. À 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 :

1. var sheet = Api.GetActiveSheet();

2. var domainValue = sheet.GetRange(GUILLEMET-KITOOODVPA2GUILLEMET-KITOOODVP).GetValue();

3. var dateRange = sheet.GetRange(GUILLEMET-KITOOODVPD1:D10GUILLEMET-KITOOODVP);

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

1. $.ajax({

2. method: 'GET',

3. url: apiUrl,

4. headers: { 'X-Api-Key': 'your_API_key' },

5. contentType: 'application/json',

6. success: function(result) {

7. 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 :

1. // Convert creation_date to a more readable format

2. var unixTimestamp = result.creation_date;

3. var creationDate = new Date(unixTimestamp * 1000);

4. var formattedCreationDate = creationDate.toDateString();

5. // Convert expiration_date to a more readable format

6. var expirationTimestamp = result.expiration_date;

7. var expirationDate = new Date(expirationTimestamp * 1000);

8. var formattedExpirationDate = expirationDate.toDateString();

9. // Convert updated_date to a more readable format

10. var updatedTimestamp = result.updated_date;

11. var updatedDate = new Date(updatedTimestamp * 1000);

12. 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(GUILLEMET-KITOOODVPEGUILLEMET-KITOOODVP + 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) :

1. switch (currentValue) {

2. case GUILLEMET-KITOOODVPdomain nameGUILLEMET-KITOOODVP:

3. oRange.SetValue(result.domain_name);

4. 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 :

1. oRange.SetValue(result.registrar);

2. break;

3. case GUILLEMET-KITOOODVPwhois serverGUILLEMET-KITOOODVP:

4. oRange.SetValue(result.whois_server);

5. break;

6. case GUILLEMET-KITOOODVPupdated dateGUILLEMET-KITOOODVP:

7. oRange.SetValue(formattedUpdatedDate);

8. break;

9. case GUILLEMET-KITOOODVPcreation dateGUILLEMET-KITOOODVP:

10. oRange.SetValue(formattedCreationDate);

11. break;

12. case GUILLEMET-KITOOODVPexpiration dateGUILLEMET-KITOOODVP:

13. oRange.SetValue(formattedExpirationDate);

14. break;

15. case GUILLEMET-KITOOODVPname serversGUILLEMET-KITOOODVP:

16. oRange.SetValue(result.name_servers.join(GUILLEMET-KITOOODVP, GUILLEMET-KITOOODVP));

17. break;

18. case GUILLEMET-KITOOODVPdnssecGUILLEMET-KITOOODVP:

19. oRange.SetValue(result.dnssec);

20. break;

21. default:

22. // Handle other cases if needed

23. break;

24. }

25. });

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 :

1. reload(); // Invoke reload function after the loop is completed

2. },

3. error: function ajaxError(jqXHR) {

4. console.error('Error: ', jqXHR.responseText);

5. }

6. });

7. function reload() {

8. let reloadInterval = setInterval(function() {

9. Api.asc_calculate(Asc.c_oAscCalculateType.All);

10. }, 100);

11. }

V - Code complet de la macro

1. (function()

2. {

3. var sheet = Api.GetActiveSheet();

4. var domainValue = sheet.GetRange(GUILLEMET-KITOOODVPA2GUILLEMET-KITOOODVP).GetValue();

5. var dateRange = sheet.GetRange(GUILLEMET-KITOOODVPD1:D10GUILLEMET-KITOOODVP);

6. var apiUrl = 'https://api.api-ninjas.com/v1/whois?domain=' + domainValue;

7. $.ajax({

8. method: 'GET',

9. url: apiUrl,

10. headers: { 'X-Api-Key': 'your_API_key' },

11. contentType: 'application/json',

12. success: function(result) {

13. console.log(result);

14. // Convert creation_date to a more readable format

15. var unixTimestamp = result.creation_date;

16. var creationDate = new Date(unixTimestamp * 1000);

17. var formattedCreationDate = creationDate.toDateString();

18. // Convert expiration_date to a more readable format

19. var expirationTimestamp = result.expiration_date;

20. var expirationDate = new Date(expirationTimestamp * 1000);

21. var formattedExpirationDate = expirationDate.toDateString();

22. // Convert updated_date to a more readable format

23. var updatedTimestamp = result.updated_date;

24. var updatedDate = new Date(updatedTimestamp * 1000);

25. var formattedUpdatedDate = updatedDate.toDateString();

26. dateRange.ForEach(function(range) {

27. var row = range.GetRow();

28. var oRange = sheet.GetRange(GUILLEMET-KITOOODVPEGUILLEMET-KITOOODVP + row);

29. var currentValue = range.GetValue();

30. switch (currentValue) {

31. case GUILLEMET-KITOOODVPdomain nameGUILLEMET-KITOOODVP:

32. oRange.SetValue(result.domain_name);

33. break;

34. case GUILLEMET-KITOOODVPregistrarGUILLEMET-KITOOODVP:

35. oRange.SetValue(result.registrar);

36. break;

37. case GUILLEMET-KITOOODVPwhois serverGUILLEMET-KITOOODVP:

38. oRange.SetValue(result.whois_server);

39. break;

40. case GUILLEMET-KITOOODVPupdated dateGUILLEMET-KITOOODVP:

41. oRange.SetValue(formattedUpdatedDate);

42. break;

43. case GUILLEMET-KITOOODVPcreation dateGUILLEMET-KITOOODVP:

44. oRange.SetValue(formattedCreationDate);

45. break;

46. case GUILLEMET-KITOOODVPexpiration dateGUILLEMET-KITOOODVP:

47. oRange.SetValue(formattedExpirationDate);

48. break;

49. case GUILLEMET-KITOOODVPname serversGUILLEMET-KITOOODVP:

50. oRange.SetValue(result.name_servers.join(GUILLEMET-KITOOODVP, GUILLEMET-KITOOODVP));

51. break;

52. case GUILLEMET-KITOOODVPdnssecGUILLEMET-KITOOODVP:

53. oRange.SetValue(result.dnssec);

54. break;

55. default:

56. // Handle other cases if needed

57. break;

58. }

59. });

60. reload(); // Invoke reload function after the loop is completed

61. },

62. error: function ajaxError(jqXHR) {

63. console.error('Error: ', jqXHR.responseText);

64. }

65. });

66. function reload() {

67. let reloadInterval = setInterval(function() {

68. Api.asc_calculate(Asc.c_oAscCalculateType.All);

69. });

70. }

71. })();

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.

VI - Ressources utiles

- Documentation API ONLYOFFICE

- Exemples de macros

- Site web officiel ONLYOFFICE

- Autres tutoriels ONLYOFFICE

VII - Remerciements Developpez.com

Nous tenons à remercier Malick pour la mise au gabarit et escartefigue pour la relecture orthographique.