使用 ONLYOFFICE 宏检索网站详细信息

2023年07月13日作者: Alina

上一篇文章中,我们基于一位用户发送的 VBA 参考构建了一个功能完善的 ONLYOFFICE 宏。今天,我们想再进一步,为其添加一些 Whois API 功能。

使用 ONLYOFFICE 宏检索网站详细信息

关于 Whois

Whois 是 “Who is?”(是谁?)的简写,是一个基础互联网协议,用户可以使用它来获取关于域名和 IP 地址的详尽信息。它可以是一大有价值的资源,用于检索关于注册所有者、管理和技术联系人、注册和到期日期、域名服务器,甚至是负责域名注册的组织的详细信息。

访问 API

我们使用 API Ninijas 提供的解决方案来访问 Whois API。

API Ninjas 网站是一个在线平台,提供 API 相关的各种资源与分析。它还提供一系列免费 API,供开发人员在项目中使用。该网站旨在成为一个实用的目标平台,供开发者寻找信息、工具和实际示例,助其提高 API 开发技能。

该平台提供帮助发出 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);
    }
});

构建宏

现在,我们将这个 .ajax 请求合并到我们的宏里面!我们代码的前几行保持不变,除了我们检索单元格 A4 的值这一部分。这次,单元格 A2 的值就够了:

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

然后,我们向 apiUrl 变量中指定的 API 端点发起一个 GET 请求:

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

API 响应成功后,我们继续处理数据。我们使用 JavaScript 的 Date 对象,将 UNIX 时间戳的创建日期、到期日期和更新日期转换为简单易读的格式。这些格式设置好的日期会被存储在 formattedCreationDate、formattedExpirationDate 和 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();

为使用检索到的域信息填充电子表格,我们对 dateRange 变量使用 forEach 循环。这个循环会遍历指定区域 (D1:D10) 内的每个单元格。在循环内,我们使用 range.GetRow() 检索当前行并将其存储在 row 变量中:

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

然后,我们使用 sheet.GetRange(“E” + row) 为 E 列中相应的单元格创建一个范围对象,并将其分配给 oRange 变量:

var currentValue = range.GetValue();

基于 currentValue 的值,我们使用 switch 语句来确定相应的操作。例如,如果 currentValue 是“域名”,我们使用 oRange.SetValue(result.domain_name) 将 result.domain_name 的值设置为相应的单元格:

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

同样,我们来处理其他事项,如注册商、whois 服务器、更新日期、创建日期、到期日期、域名服务器和 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;
      }
    });

最后,我们定义一个重新加载函数,这个函数在循环完成后调用 Api.asc_calculate(Asc.c_oAscCalculateType.All) 方法来对电子表格做重新计算。这可以确保新填充的值反映在电子表格中:

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

整个宏代码如下:

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

现在,我们来运行这个宏,看看它是如何工作的!

我们希望这个宏经实践检验,对您的项目颇有帮助,让您能高效检索和显示重要的网域详情。ONLYOFFICE API 灵活方便、功能实用,为任务的自定义和自动化开启无限可能。

我们欢迎您探索 ONLYOFFICE API 的潜力,构建自己的宏,释放无限创造力。欢迎提出问题或分享您的想法,欢迎发表评论或联系我们。我们乐意倾听您的想法,热切希望与您合作。祝好运!