はじめに
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に保存したファイルの自動削除プログラム





コメント