ONLYOFFICEマクロでウェブサイトの詳細を取得する方法

2023年07月12日著者:Denis

前回の投稿では、ユーザーから送られてきたVBAリファレンスから、完全に機能するONLYOFFICEマクロを構築しました。今日はそれをさらに進化させ、Whois API機能を追加したいと思います。

Retrieve website details with ONLYOFFICE macro

Whoisについて

Whoisとは、「Who is?(誰ですか?)」の略で、ドメイン名やIPアドレスに関する包括的な情報にアクセスするための重要なインターネットプロトコルです。登録所有者、管理者、技術連絡先、登録日と有効期限、ドメインネームサーバー、さらにはドメイン登録の責任組織に関する詳細情報を取得するための貴重なリソースとして機能します。

APIへのアクセス

Whois APIにアクセスするには、API Ninijasが提供するソリューションを使用します。

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 レスポンスが成功すると、データの処理に進む。作成日、有効期限、更新日のUNIXタイムスタンプを、JavaScriptのDateオブジェクトを使って人間が読める形式に変換します。これらのフォーマットされた日付は、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);

セルの現在値はrange.GetValue()を使って取得され、currentValue変数に格納されます:

var currentValue = range.GetValue();

currentValueの値に基づいて、switch文を使って適切なアクションを決定します。例えば、currentValueが “domain name “であれば、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 関数を定義します。これにより、新しく入力された値がスプレッドシートに反映されるようになります:

    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の可能性を探求し、独自のマクロを構築することであなたの創造性を解き放つことをお勧めします。 ご質問や共有したいアイデアがありましたら、お気軽にコメントを残すか、私たちにご連絡ください。私たちはあなたのアイデアを聞き、皆さまのコラボレーションを熱望しています。