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

关于 Whois
Whois 是 "Who is? "的缩写,是一个重要的互联网协议,可使用户获取有关域名和 IP 地址的全面信息。它是检索与注册所有者、管理和技术联系人、注册和到期日期、域名服务器甚至负责域名注册的机构有关的详细信息的宝贵资源。
访问应用程序接口
为了访问 Whois API,我们将使用 API Ninijas 提供的解决方案。
API Ninijas 网站是一个在线平台,提供有关 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 时间戳转换为人类可读的格式。这些格式化的日期存储在格式化创建日期、格式化过期日期和格式化更新日期等变量中:
// 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() 检索当前行,并将其存储在行变量中:
var oRange = sheet.GetRange("E" + row);使用 range.GetValue() 获取单元格的当前值,并将其存储到 currentValue 变量中:
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的潜力,并通过构建自己的宏来释放您的创造力。 如果您有任何问题或想法,请随时留言或联系我们。我们愿意倾听您的想法,并渴望与您合作。祝您在探索中取得成功!

渝公网安备50010702505508