はじめに
ESP32-CAMを使ったウェブカメラを製作。
撮影した画像は、Googleドライブに保存しています。
【IoT】ESP32-CAMを使ってWEBカメラを自作してみた(使い方編)
そして、保存しているとファイルが溜まる一方なので、定期的に削除するプログラムを作ってみました。
【自動削除】Google Driveに保存したファイルを定期的に削除するプログラム
ただし、ファイル数が多くなると、稀に次のエラーが通知が届くようになりました。
ファイル数が少ない場合は、上記のコードで上手くいきました。
エラーメッセージの考察
コード的には、指定した時間のタイムアウト時に再度トリガーを設定するようにしていました。
このエラーメッセージを読むと、トリガー数が多すぎるというエラーのようです。
Start | Function | Error Message | Trigger | End |
---|---|---|---|---|
2023-10-16 01:04:56 Japan Standard Time | deleteOldFiles | Exception: This script has too many triggers. Triggers must be deleted from the script before more can be added. | time-based | 2023-10-16 01:08:57 Japan Standard Time |
対策コードを書いてみる
タイムアウト時のトリガーの再設定から、ファイルを分割して削除する方法に変更します。
これでトリガー数のエラーは回避できるはず。
function deleteOldFiles() { var folderName = "abc"; // 対象のフォルダ名 var daysThreshold = 30; // バッファを見て30日 var folder = DriveApp.getFoldersByName(folderName).next(); var files = folder.getFiles(); var now = new Date(); while (files.hasNext()) { var file = files.next(); var createdDate = file.getDateCreated(); var daysPassed = Math.floor((now - createdDate) / (1000 * 60 * 60 * 24)); // 日数の差分を計算 if (daysPassed >= daysThreshold) { file.setTrashed(true); // ゴミ箱に送る } // 処理時間を監視し、制限時間を超えたら処理を終了する if (new Date() - now >= 30000) { // 30秒(30000ミリ秒)を制限時間とする ScriptApp.newTrigger("deleteOldFiles") // トリガーの再設定 .timeBased() .after(2000) // 2秒後に再実行 .create(); break; } } }
おわりに
2週間ほど運用しましたが、いまのところエラーはありません。
関連記事
- 【webカメラ】ESP32-CAMで撮影した写真をgoogleドライブに転送してみた。【前編】
- 【webカメラ】ESP32-CAMで撮影した写真をgoogleドライブに転送してみた。【前編】
- 【自動削除】Google Driveに保存したファイルを定期的に削除するプログラム
追記
最終版?ともいえる安定板を公開します。
タイムアウト対策で1回の処理で100件に制限しています。 その代わりにトリガーを2時間おきに設定してエラー時に次のトリガーでフォローします。
【最終版?】GoogleDriveに保存したファイルの自動削除プログラム
コメント