Google Apps Script (GAS)でDriveのファイルの一覧を作成する
はじめに
前回ファイル一覧テストデータとしてスプレットシートの内容をGET要求でJSONの取得をする流れを記事にしました。
Google Apps Script (GAS)でスプレッドシートをGETする
今回はGoogle Driveの公開済みフォルダを読み取り、スプレッドシートにファイル名とファイルURLをリストアップします。この処理を定期実行することで新しい状態のファイル一覧をAPIで取得することができることを目標にいたしました。
実装
function main() {
//プロジェクトのスクリプトプロパティから値を取得
const folderId = PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
const spreadsheetId = PropertiesService.getScriptProperties().getProperty('SHEET_ID');
const sheetPageName = PropertiesService.getScriptProperties().getProperty('SHEET_PAGE_NAME');
//folderIdからdriveのファイルオブジェクトを取得
const folder = DriveApp.getFolderById(folderId)
const files = folder.getFiles()
//必要な値を配列化
let filesDataArray = []
while (files.hasNext()) {
const file = files.next()
const fileName = file.getName()
const fileUrl = file.getUrl()
const fileDataArray = [fileName,fileUrl]
filesDataArray.push(fileDataArray)
}
//書き込みに行くスプレッドシートの指定
const spreadsheet = SpreadsheetApp.openById(spreadsheetId)
const sheet = spreadsheet.getSheetByName(sheetPageName)
//配列のlengthだけrangeを指定しclear後値を挿入
sheet.getRange(1,1,filesDataArray.length,2).clear()
sheet.getRange(1,1,filesDataArray.length,2).setValues(filesDataArray)
}
Google Driveで公開フォルダを作成する
ルートフォルダを対象にする場合、フォルダIDを指定することができないようなので、任意のフォルダを作成して[アクセスを管理]、[一般的なアクセス]、[リンクを知っている全員]に設定します。
URLにあるhttps://drive.google.com/drive/folders/XXXXXXXXXXXX?usp=sharing
のXXXXXXXXに当たる部分がフォルダIDとなるため、これをGASのプロジェクトのスクリプトプロパティに設定します。
スプレッドシートのgetRrangeを配列数だけ可変長に指定する
スプレッドシートに記入する行列の範囲を指定するgetRangeでは入力するデータの数から多くても少なくてもエラーとなってしまいます。
そのため、絶対座標で指定することになる[A1:B5]という指定では可変長にすることができません。
sheet.getRange('A1:B5')
範囲を数値で指定することができる引数を使い可変長にしています。
sheet.getRange(1,1,filesDataArray.length,2)
この場合、最初の引数2つが範囲の左上のセルを表し、第3,4の引数が右下のセルを表します。
実行結果
ファイル名とファイルのURLをスプレットシートに書き込むことができました。
定期実行
スプレットシートの内容をなるべく新しい状態に保つため、この処理を今回は1日おきに定期実行する設定を行いました。
定期実行に関しては以下の記事を参考にいたしました。
まとめ
GET要求することで特定のフォルダ内のファイル一覧をJSONで取得することができるAPIを作成することができました。
これにより例えば作業者が特定のフォルダにPDFをアップロードするだけで、比較的新しい状態のフォルダ情報を知ることのできるWEBページを作成することもできます。
GASはGoogleスプレットシートやGoogleフォームなど周辺のサービスと連携させたAPIを無料で作成することができるため、様々な活用法が広がっていると思います。
コメントを残す