然後選擇『空白專案』
貼上以下程式碼
/* Ref: https://developers.google.com/apps-script/reference/drive/drive-app https://developers.google.com/apps-script/reference/drive/file https://developers.google.com/apps-script/reference/drive/folder https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app https://developers.google.com/apps-script/reference/url-fetch/o-auth-config https://developers.google.com/apps-script/reference/base/blob https://developers.google.com/apps-script/reference/utilities/utilities */ var _backupKeepAmount = 10; var _backupFolderName = 'blogger_backup'; var _backupFolder; function main(){ var folders = DriveApp.getFoldersByName(_backupFolderName); if(folders.hasNext()){ _backupFolder = folders.next(); }else{ _backupFolder = DriveApp.createFolder(_backupFolderName); } setAuth(); backupBlogger('{my_blog_1}', '{blog_id}', false); backupBlogger('{my_blog_2}', '{blog_id}', false); MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Backup Blogger To Google Drive', Logger.getLog()); } /** * @param {String} prefixName 備份檔名的前綴 * @param {String} blogId * @param {Boolean} isBigSize 如果備份的檔案超過 10M,請設為 true */ function backupBlogger(prefixName, blogId, isBigSize){ logMsg('Backup Start', prefixName); /* 取得之前的備份清單 */ var files = _backupFolder.getFilesByType('application/xml'); var beforeFiles = []; while (files.hasNext()) { var file = files.next(); if(file.getName().indexOf(prefixName) == -1){ continue; } beforeFiles.push(file); } beforeFiles.sort(function (a, b) { return b.getName().localeCompare(a.getName()); }); /* 下載並儲存檔案 */ var isChange; if(isBigSize){ isChange = downloadAndSaveBigSizeArchiveXml(prefixName, blogId, beforeFiles[0]); }else{ isChange = downloadAndSaveArchiveXml(prefixName, blogId, beforeFiles[0]); } /*沒有異動結束處理*/ if(!isChange){ return; } /* 刪除舊檔案 */ var oleFiles = beforeFiles.slice(_backupKeepAmount); for(var i=0; i < oleFiles.length; i++){ oleFiles[i].setTrashed(true); } logMsg('Backup Complete', prefixName); } function logMsg(status, msg){ Logger.log('%s | %s', status, msg); } function setAuth(){ var scope = "https://www.blogger.com/feeds/"; var oAuthConfig = UrlFetchApp.addOAuthService("blogger"); oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope); oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); // oAuthConfig.setConsumerKey("anonymous"); // oAuthConfig.setConsumerSecret("anonymous"); } function getArchiveXmlResponse(blogId){ var options = { "oAuthServiceName" : "blogger", "oAuthUseToken" : "always" }; var url = 'https://www.blogger.com/feeds/' + blogId + '/archive'; var response = UrlFetchApp.fetch(url, options); /*下載失敗,錯誤記錄*/ if(response.getResponseCode() != 200){ logMsg('Download Failed', response.getAllHeaders().toSource()); return null; } return response; } function downloadAndSaveArchiveXml(prefixName, blogId, beforeFile){ var response = getArchiveXmlResponse(blogId); if(!response){ return false; } var downloadContent = response.getContentText(); /* 檢查檔案異動 */ if(beforeFile){ var content = beforeFile.getBlob().getDataAsString(); if(beforeFile && Math.abs(content.length -downloadContent.length) < 100){ logMsg('Not Change', prefixName); return false; } } /* 儲存下載 */ var fileName = Utilities.formatDate(new Date(), "+8", "yyyyMMdd_HHmmss'.xml'"); _backupFolder.createFile(prefixName + '_' + fileName, downloadContent, 'application/xml'); return true; } function downloadAndSaveBigSizeArchiveXml(prefixName, blogId, beforeFile){ var response = getArchiveXmlResponse(blogId); if(!response){ return false; } /* 儲存下載 */ var fileName = Utilities.formatDate(new Date(), "+8", "yyyyMMdd_HHmmss'.xml'"); var downloadBlob = response.getBlob(); downloadBlob.setName(prefixName + '_' + fileName); downloadBlob.setContentType('application/xml'); var downloadFile = _backupFolder.createFile(downloadBlob); /* 檢查檔案異動 */ if(beforeFile && Math.abs(beforeFile.getSize() - downloadFile.getSize() ) < 1000){ downloadFile.setTrashed(true); logMsg('Not Change', prefixName); return false; } return true; }
修改 {my_blog_1} 及 {blog_id},{my_blog_1} 是備份檔名的前綴,{blog_id} 則可以在文章管理的網址上找到
儲存檔案,並取名為『Backup Blogger To Google Drive』
先來測試一下備份是否能正常執行,請選擇執行的函數為『main』,並按下『執行』,然後先為此程式授權
如果都沒問題,接著來設定排程,選擇『啟動程序』
新增一個觸發程序
選擇執行的函數『main』,然後時間定在晚上 11 點,接著選擇『通知』
這個設定主要是發生錯誤的時候可以寄送通知
0 回應:
張貼留言