😸

GASでURLからルートドメインのみを取り出す方法を解説

2024/06/07に公開

ルートドメインのみを取り出すGASのコードを作成しました。

function extractRootDomain() {
  var spreadsheetId = 'スプレッドシートID';
  var sheetId = 'シートID';
  var sheet = getSheetById(spreadsheetId, sheetId);
  var urls = sheet.getRange('C2:C' + sheet.getLastRow()).getValues();
  var rootDomains = [];
  
  for (var i = 0; i < urls.length; i++) {
    var url = urls[i][0];
    if (url) {
      var rootDomain = getRootDomain(url);
      rootDomains.push([rootDomain]);
    } else {
      rootDomains.push(['']);
    }
  }
  
  sheet.getRange(2, 1, rootDomains.length, 1).setValues(rootDomains);
}

function getRootDomain(url) {
  try {
    var hostname = (new URL(url)).hostname;
    var parts = hostname.split('.').slice(-2);
    return parts.join('.');
  } catch (e) {
    return ''; // URLが不正な場合、空文字を返す
  }
}

function getSheetById(spreadsheetId, sheetId) {
  var sheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetId() == sheetId) {
      return sheets[i];
    }
  }
  return null;
}

このコードは、Google Apps Scriptを使用してGoogleスプレッドシート内のURLリストからルートドメインを抽出し、それを同じシートの指定された範囲に出力するスクリプトです。具体的な動作を説明します。

extractRootDomain関数

  1. スプレッドシートとシートの指定:

    var spreadsheetId = 'スプレッドシートのID';
    var sheetId = 'シートID';
    var sheet = getSheetById(spreadsheetId, sheetId);
    
    • spreadsheetIdsheetIdを指定して、操作対象のシートを取得します。
  2. URLの取得:

    var urls = sheet.getRange('C2:C' + sheet.getLastRow()).getValues();
    
    • シートのC2から最終行までのURLを取得します。
  3. ルートドメインの抽出:

    var rootDomains = [];
    
    for (var i = 0; i < urls.length; i++) {
      var url = urls[i][0];
      if (url) {
        var rootDomain = getRootDomain(url);
        rootDomains.push([rootDomain]);
      } else {
        rootDomains.push(['']);
      }
    }
    
    • 取得したURLリストをループし、getRootDomain関数を使ってルートドメインを抽出し、rootDomains配列に格納します。
  4. 結果の出力:

    sheet.getRange(2, 1, rootDomains.length, 1).setValues(rootDomains);
    
    • 抽出したルートドメインをシートのA2から出力します。

getRootDomain関数

function getRootDomain(url) {
  try {
    var hostname = (new URL(url)).hostname;
    var parts = hostname.split('.').slice(-2);
    return parts.join('.');
  } catch (e) {
    return ''; // URLが不正な場合、空文字を返す
  }
}
  • 指定されたURLからホスト名を抽出し、ドメインの最後の2部分(例: example.com)を返します。無効なURLの場合は空文字を返します。

getSheetById関数

function getSheetById(spreadsheetId, sheetId) {
  var sheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetId() == sheetId) {
      return sheets[i];
    }
  }
  return null;
}
  • 指定されたスプレッドシートIDから全てのシートを取得し、指定されたシートIDに一致するシートを返します。一致するシートがない場合はnullを返します。

このスクリプトは、URLのルートドメインを簡単に抽出し、スプレッドシートに出力するために使用されます。

Discussion