リモート開発メインのソフトウェア開発企業のエンジニアブログです

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)
}
Moba Pro

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日おきに定期実行する設定を行いました。

定期実行に関しては以下の記事を参考にいたしました。

【GAS】GASで定期的にプログラムを実行する

まとめ

GET要求することで特定のフォルダ内のファイル一覧をJSONで取得することができるAPIを作成することができました。

これにより例えば作業者が特定のフォルダにPDFをアップロードするだけで、比較的新しい状態のフォルダ情報を知ることのできるWEBページを作成することもできます。

GASはGoogleスプレットシートやGoogleフォームなど周辺のサービスと連携させたAPIを無料で作成することができるため、様々な活用法が広がっていると思います。

← 前の投稿

次の投稿 →

jar ファイルをまとめてデコンパイルする方法 x 2

コメントを残す