[Google Apps]--FetchURLs using Google App Script

很久沒有寫 Google Apps Script 了(也只寫過一次好嗎)...

有網友看了之前寫的一篇文章 [Google Apps]--My First Google Apps Script,問我一個是否可以使用 Google Spreadsheet 來作為 server alive & failed notice 的腳本

查了一下 Google Apps Script 文件,發現有現成的API可以使用,就直接套用做成一個可以探詢 Server List 是否存活的App

https://docs.google.com/spreadsheets/d/1uPhxJGx9HyvLDOSEW8NDDWen2I543Lq3RW-p4uTEKsc/edit?usp=sharing

網友提出的想法是這樣的,他希望有兩個Sheet,一個紀錄要查詢的Server,一個紀錄Server 的 Administrator,當網站不存在時,就通知網站管理員

我大致上開了兩個工作表如下:
一個是 Server List


一個是管理員 List,兩者間為1:1關係(如多個管理員,就以逗號區分,理論上應該可以自動判斷,如果不行就要自己 split)



資料準備好了,那我們就來寫程式吧(如何建立的過程,請參考前一篇 [Google Apps]--My First Google Apps Script)


function loadServerList() {

 var sheetApp = SpreadsheetApp.getActiveSpreadsheet();
 var sheet1=sheetApp.getSheets()[0];
 var sheet2=sheetApp.getSheets()[1];
 var serverlist=new Array(), adminlist= new Array();
 var iRow=2,i;
             
  // 先將 Server List 讀進 Array
 // iRow=2 從第二列開始讀,讀到空白行
 while (!sheet1.getRange(iRow, 1).getValue()==""){
  serverlist[iRow-2]=sheet1.getRange(iRow, 1).getValue();
  iRow++;
 }

 iRow=2;

  // 將 Administrator 讀進 Array
 while (!sheet2.getRange(iRow, 1).getValue()==""){
  adminlist[iRow-2]=sheet2.getRange(iRow, 1).getValue();
  iRow++;
 }

  // 透過 try catch 攔截錯誤,發送 email
 try{
  for (i=0; i < serverlist.length; i++){
   var response = UrlFetchApp.fetch(serverlist[i]);
   MailApp.sendEmail(adminlist[i], 'UrlFetchApp OK:'+serverlist[i], response.getContentText());
   Logger.log(response.getContentText());
  }
 } catch (e){
  MailApp.sendEmail(adminlist[i], 'UrlFetchApp Failed:'+serverlist[i], '');
  Logger.log("Url Fetch Failed!")+serverlist[i];
 }
}

Google Apps Script 內建的 Service API 有一個是 URLFetch
讓你可以擷取網站的資料回傳,我們就透過這個 Service,來當作網站存活的查詢,查詢失敗就透過 exception block 傳送失敗通知 

這邊為了測試這個 Service 的運作方式,所以將查詢成功的部份也寄送 email 得到的 mail 結果如下:(第二個網址是我故意寫錯,測試用)


這樣就可以執行了 (App 執行的過程,會要求認證與授權,授權過之後就不會再出現了) 

...好像還少了什麼...

 誰去執行?

當然是要讓系統自己做啊!

 按一下 Script Editor 上面的時鐘,新增觸發程序,完工!


1 意見 :

當連線有問題時,為了要了解錯誤之原因,以方便處理問題,在以下原程式增加 "response.getContentText()" 這段程式碼,以便發送mail時,可於內容附加錯誤訊息之內容,但在執行時會產生錯訊息如下,
"TypeError: 無法呼叫 undefined 的「getContentText」方法。 (第 32 行,檔案名稱:)關閉"
不知原因為何??請指教,謝謝~~

catch (e){ MailApp.sendEmail(adminlist[i], 'UrlFetchApp Failed:'+serverlist[i], response.getContentText());

Reply

張貼留言