見出し画像

【GAS】ファイルURLからディレクトリを取得する

Googleドライブ上のファイルのURL自体はブックマークしてあるからわかるけどこれどこに保存してあるんだっけ?というときにお使いいただけます。

コード

/**
 * DirectoryFetcher クラスは、指定されたGoogleドライブファイルのURLから
 * ファイルのディレクトリ階層を取得する機能を提供します。
 */
class DirectoryFetcher {
  /**
   * コンストラクタは、ファイルのURLを受け取り、ファイルIDを抽出します。
   * 
   * @param {string} fileUrl - ファイルのURL
   */
  constructor(fileUrl) {
    this.fileId = this.extractFileIdFromUrl(fileUrl);
    this.directoryHierarchy = null;
  }

  /**
   * URLからファイルIDを抽出します。
   * 
   * @param {string} url - GoogleドライブファイルのURL
   * @returns {string|null} ファイルID、または無効なURLの場合はnull
   */
  extractFileIdFromUrl(url) {
    const regex = /\/d\/([a-zA-Z0-9-_]+)/;
    const match = url.match(regex);
    return match ? match[1] : null;
  }

  /**
   * ファイルのディレクトリ階層を取得します。
   * 
   * @returns {Object} 成功時には{success: true, directoryHierarchy: string}を返し、
   *                   失敗時には{success: false, message: string}を返します。
   */
  fetchDirectoryHierarchy() {
    if (this.fileId) {
      try {
        const file = DriveApp.getFileById(this.fileId);

        // ディレクトリの階層を取得
        this.directoryHierarchy = this.getDirectoryHierarchy(file);

        // 成功時に階層を返す
        return {
          success: true,
          directoryHierarchy: this.directoryHierarchy
        };
      } catch (e) {
        return {
          success: false,
          message: 'ディレクトリ情報の取得に失敗しました: ' + e.message
        };
      }
    } else {
      return {
        success: false,
        message: '無効なURLです'
      };
    }
  }

  /**
   * ファイルの親フォルダの階層を再帰的に取得し、逆順に整形して返します。
   * 
   * @param {GoogleAppsScript.Drive.File} file - Googleドライブファイルオブジェクト
   * @returns {string} ディレクトリ階層を「/」区切りで返す
   */
  getDirectoryHierarchy(file) {
    const hierarchy = [];
    let folder = file.getParents().hasNext() ? file.getParents().next() : null;

    while (folder) {
      hierarchy.push(folder.getName());
      const nextParents = folder.getParents();
      if (!nextParents.hasNext()) break;
      folder = nextParents.next();
    }

    return hierarchy.reverse().join(' / ');
  }
}

// 使用例
/**
 * DirectoryFetcher クラスを使用して、指定したファイルのディレクトリ階層を取得します。
 */
function exampleUsage() {
  const fileUrl = 'https://drive.google.com/file/d/1hpLsYSdsRPt7HbQ8dvzbRJYhHq8eKEUW/view?usp=drive_link';  // ファイルのURLを指定してください
  const directoryFetcher = new DirectoryFetcher(fileUrl);
  const result = directoryFetcher.fetchDirectoryHierarchy();
  
  if (result.success) {
    Logger.log('ディレクトリ階層: ' + result.directoryHierarchy);
  } else {
    Logger.log('エラー: ' + result.message);
  }
}

この記事が気に入ったらサポートをしてみませんか?