2019年1月26日 星期六

用 Google 試算表追蹤網拍商品價格變化 (下)


2017年中的上集,我們學會了怎麼使用 Google 試算表從 PCHome 萃取喜歡商品的價格資訊了!可喜的是竟然到2019年都還可以正常運作!如果你還不知道怎麼做,請參考前文「 用 Google 試算表追蹤網拍商品價格變化 (上)」。

使用指令碼編輯器自動填入每天的價格

接下來,我們想要試算表每天自動記錄價格,並在價格更新的時候自動寄信通知自己。示範的表格如下:


我使用了上一篇所介紹的方法,把某件我喜歡的商品價格存在C3之中,然後,我希望這張表可以按照圖中的例子,每天早上自動把新價格記錄下來。這就需要一點簡單的程式碼來達成了!
選擇工具/指令碼編輯器,會開啟一個空白的專案,裡頭只有一個空的函數MyFunction()
我們修改程式碼如下,程式碼的說明直接寫在 // 註解 中。你可以直接複製以下內容到指令碼編輯器。
// 將函數命名為UpdatePrice
function UpdatePrice() {
  // 取得目前試算表中的名稱為 "工作表1" 物件
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("工作表1");

  // 從「工作表1」這個物件中,取得已使用儲存格的範圍
  var datarange = sheet.getDataRange();

  // 得到目前使用到第幾個row (橫列)
  var num_row = datarange.getNumRows();

  // sheet.getRange(row, column) 的意思是
  // 取得從左上角算起第 row 列、第 column 欄的格子

  // 在此我們取得尚未使用的橫列 -- 及 num_row+1 列的第一欄
  // .setValue 這個方法把內容改成現在的日期時間
  sheet.getRange(num_row+1,1).setValue(new Date());
  // 同時,將尚未使用橫列的第二欄設定成 C3 的值,即目前價格
  sheet.getRange(num_row+1,2).setValue(sheet.getRange("C3").getValue());
}
按下工作列中的執行鈕,因為我們取用了 Google spreadsheet 物件,初次執行會提示需要授權存取權限。

按下工作列中的執行
如果一切順利,你會發現本來的工作表中多了一列,如下圖:
今天的價格被紀錄下來了!

讓自訂的 UpdatePrice() 函數定時執行

接著,我們只要要求Google 試算表,每天某個時刻自動執行UpdatePrice()這個函數即可!接下「指令碼編輯器」中的時鐘圖示,設定現有專案的啟動程序。
進入設定畫面後,按下右下角的「新增觸發條件」,如下圖設定並按下儲存,即能在每天9點至10點間,自動執行方才建立的函數UpdatePrice,把今天的日期以及最新的價格填入試算表中!

價格變化時自動寄送 Email

最後,我們希望商品價格更動時,可以自動以 Email 通知。這也很簡單,只要再修改剛才的UpdatePrice()函數即可!
// 將函數命名為UpdatePrice
function UpdatePrice() {
  // 取得目前試算表中的名稱為 "工作表1" 物件
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("工作表1");

  // 從「工作表1」這個物件中,取得已使用儲存格的範圍
  var datarange = sheet.getDataRange();

  // 得到目前使用到第幾個row (橫列)
  var num_row = datarange.getNumRows();

  // sheet.getRange(row, column) 的意思是
  // 取得從左上角算起第 row 列、第 column 欄的格子

  // 在此我們取得尚未使用的橫列 -- 及 num_row+1 列的第一欄
  // .setValue 這個方法把內容改成現在的日期時間
  sheet.getRange(num_row+1,1).setValue(new Date());
  // 同時,將尚未使用橫列的第二欄設定成 C3 的值,即目前價格
  sheet.getRange(num_row+1,2).setValue(sheet.getRange("C3").getValue());

  //當最新的價格和前一列價格不同時,傳送 mail 通知 
  //直接取用 MailApp.sendEmail() 方法就能寄信 
  //收件人: xxx@ggmail.com (請記得修改 e-mail 地址!)
  //標題為:  關注的商品價格改變
  //內文為: 原價格:7000,新價格:15990 之類的。

  if (sheet.getRange(num_row+1,2).getValue() != sheet.getRange(num_row,2).getValue()) {
    MailApp.sendEmail("xxx@ggmail.com", "關注的商品價格改變", 
                      "原價格:"+sheet.getRange(num_row,2).getValue()+
                     ",新價格:" +sheet.getRange(num_row+1,2).getValue());
  }
}
完成後一樣按一下執行,會再要求授權權限寄送e-mail,請同意授權。如此一來,Google每天就會幫我們檢查商品價格並在有變化時主動通知囉!是不是相當方便呢?

結語

在這個大神們把工具都刻好的年代,讓電腦幫自己做一些實用的事情,已經不是難以入門的技藝了。稍做修改,就能夠同時關心多個商品的價格變化。
作為遲來的加碼,讓我們看看這一年來,我很喜歡的 Garmin Forerunner 935 價格在網購平台上如何變化呢?看來真的不是一隻很常特價的手錶呀!(這也代表當初在其他平台入手的價格,放到現在仍很划算呀!

Garmin Forerunner 935 在網購平台上的價格變化

2 則留言