【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);
}
}
この記事が気に入ったらサポートをしてみませんか?