今回はGAS(Google Apps Script)に関して書いていきます。
以前もGASに関する記事を書いています(以下リンク)。
上記の記事で、GASを活用したOCR処理の効率化に関して書いています。
プログラムも載せていますが、プログラムの具体的な説明はしませんでした。
今回の記事で、プログラムを具体的に説明していこうと思います。
ただ、プログラムはけっこう長いので何記事かに分けて書いています。
プログラムを具体的に説明する記事は、今回が1記事目です。
関連記事をリストにまとめると、以下のようになります。
- 【GAS】Google Driveの指定したフォルダ配下のファイル一覧を取得 ← 今回の記事
- 【GAS】Google Driveで画像ファイルをOCRする
- 【GAS】Googleドキュメントの中身を調整する(文字サイズ/文字色/余計な文言を除去)
ということで、今回は「Google Driveの指定したフォルダ配下のファイル一覧を取得する」部分に関して書いていきます。
それでは本題へ。
今回説明するところ
上記リンクに全体のプログラムが載っていますが、この記事では部分的にピックアップして説明していきます。
フローチャートでいうと、以下(赤枠部分)に関して説明していきます。
※getOcrTargetFileArray
ここの処理は、他にも流用できそうな内容に感じます。
やりたいこと
「画像」フォルダ配下のファイルを全て取得します。
「画像」フォルダを特定するために、フォルダIDを指定します。
上記の画像だと、
- サンプル画像1.jpg
- サンプル画像2.jpg
- サンプル画像3.jpg
の3ファイルを取得します。
プログラム事前準備
Drive APIを有効化します。
バージョンは「v2」と「v3」があり、今回は「v2」を選択します。
プログラム
// フォルダID const folderId = "フォルダIDを指定"; /** * メイン処理 */ function main() { const option = { "orderBy": "title", } const files = Drive.Children.list(folderId, option); for (const file of files.items) { const fileData = Drive.Files.get(file.id); if (fileData.explicitlyTrashed) continue; if (fileData.mimeType.indexOf("image") === -1) continue; console.log(fileData.title); // ファイル名 } }
上記のプログラムを実行すると、3つのファイル名がログ出力されます。
「Drive API」の詳細
上記のプログラムから、「Drive API」に関する処理をピックアップして具体的に説明します。
Drive.Children.list(指定したフォルダ配下のデータを取得)
// フォルダID const folderId = "フォルダIDを指定"; /** * メイン処理 */ function main() { const option = { "orderBy": "title", } // 指定したフォルダ配下のデータ一覧を取得 const files = Drive.Children.list(folderId, option); for (const file of files.items) { console.log(file); // ファイルIDは取得できるが、ファイル名などが取得できない } }
Drive.Children.listの詳細
「Drive.Children.list」で、指定したフォルダ配下のデータをリストで取得できます。
リファレンスをリンクしておきます。
developers.google.com
ファイルの詳細情報が取得できない
「Drive.Children.list」はファイルIDを取得できるものの、ファイル名などが取得できないようです。
ファイルIDが取得できればOKな場合もありますが、今回はファイル名も取得したいなと。
ということで、ファイル情報を取得する処理も追加します。
Drive.Files.get(ファイル情報を取得)
// フォルダID const folderId = "フォルダIDを指定"; /** * メイン処理 */ function main() { const option = { "orderBy": "title", } const files = Drive.Children.list(folderId, option); for (const file of files.items) { // ファイル情報を取得 const fileData = Drive.Files.get(file.id); console.log(fileData.title); // ファイル名 console.log(fileData.mimeType); // メディアタイプ console.log(fileData.explicitlyTrashed); // ごみ箱に入っているかどうか if (fileData.mimeType.indexOf("image") === -1) continue; if (fileData.explicitlyTrashed) continue; } }
Drive.Files.getの詳細
「Drive.Files.get」で、ファイルの詳細情報が取得できます。
リファレンスをリンクしておきます。
developers.google.com
Drive.Files.getの返却データ
「Drive.Files.get」からの返却データとして、「ファイル名」や「メディアタイプ」などがあります。
他にどんな情報が返却されているかは、以下リファレンスに詳しく載っています。
developers.google.com
ごみ箱データも取得してしまう
1つ前で紹介した「Drive.Children.list」だと、ごみ箱に入っているデータも取得してしまうようです。
※ごみ箱に入っている全てのデータを取得してしまうわけではないです。
※対象フォルダで削除したファイルに限り、取得してしまうようです。
ただ「Drive.Files.get」では、ごみ箱に入っているかどうかの情報も取得できます。
ごみ箱に入っているかどうかが分かれば、プログラムで除外することができます。
プログラム(別案)
上記のプログラムで2点、気になる部分がありました。
- 2つAPIを呼ばなければならない
- 「Drive.Children.list」と「Drive.Files.get」の2つ
- 「Drive.Files.get」に関しては取得したファイル分実行しなければならない
- ごみ箱データも取得してしまうため、除外するコードが必要になる
上記を解消するプログラムを別案として載せておきます。
// フォルダID const folderId = "フォルダIDを指定"; /** * メイン処理 */ function main() { const folder = DriveApp.getFolderById(folderId); const files = folder.getFiles(); while (files.hasNext()) { const file = files.next(); console.log(file.getName()); // ファイル名 } }
上記のプログラムで、気になる部分が解消されました。
読んでいるAPIは1つだけですし、ごみ箱データも取得してこないようです。
DriveApp.getFolderByIdの詳細
「DriveApp.getFolderById」で指定したフォルダ配下のデータをリストで取得できます。
リファレンスをリンクしておきます。
developers.google.com
DriveApp.getFolderByIdの返却データ
「getName」でファイル名を取得できます。
他にどんなファイル情報が取得できるかは、以下リファレンスに載っています。
developers.google.com
おわりに
ということで、「GASでGoogle Driveのフォルダ内のファイル一覧を取得する」に関してアレコレ書いてみました。
「プログラム(別案)」に関しては、こちらの記事を投稿した後に色々調べて見つけた方法なので、別案としました。
正直なところ、別案の方がプログラムがスッキリして良いなと。
プログラムを具体的に説明する記事は、今回が1記事目です。
おそらくあと2記事ほど投稿することになるかなと思います。
この記事が参考になれば幸いです。
関連記事のリスト、改めてリンクしておきます。
- 【GAS】Google Driveの指定したフォルダ配下のファイル一覧を取得 ← 今回の記事
- 【GAS】Google Driveで画像ファイルをOCRする
- 【GAS】Googleドキュメントの中身を調整する(文字サイズ/文字色/余計な文言を除去)
関連記事
GAS(Google Apps Script)に関してはいくつか記事にしています。
気になる記事があればぜひ。
GASの活用事例
GASを活用してGoogle DriveでのOCR処理を効率化 - 派生記事