AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

Google App ScriptでWebスクレイピングしたら楽だった

とある商品の価格を監視したくてなんかいい方法ないかと考えていたところ、Google App Scriptでやったという記事を見たのを思い出してやってみた。

実装

スプレッドシートを作成→ツール→スクリプトエディタで作成開始。 今回はデバッグ用に実行ボタンを追加する関数と実行関数を書いた。 中身はWebサイトのHTMLを取ってきて正規表現で価格を取り出す。前回の結果をA1のセルに保存しておいて下がったら自分のGmailに送るというシンプルな実装。

function addExecuteToMenu() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    {
      name : "Execute",
      functionName : "myFunction"
    }
  ];
  sheet.addMenu("Execute script", entries);
};

function myFunction () {
  // Change URL
  var html = UrlFetchApp.fetch('http:/xxxxxxxxxx').getContentText();
  // Change for the site content you want to get
  var reg = /<div class="price">&yen;([\s\S]*?)<\/div>/i; 
  var match = reg.exec(html);
  var price = match[1];
  price = price.replace(",", "")
  
  var book = SpreadsheetApp.getActiveSpreadsheet();
  // Get previous price from A1 in sheet1
  var sheetData = book.getSheetByName("sheet1");
  var prevPrice = sheetData.getRange(1, 1).getValue()
  if (prevPrice > price) {
    // Send Gmail
    var email = Session.getActiveUser().getEmail();
    var subject = "Price down";
    var body = 'Price: ' + prevPrice + ' -> ' + price;
    GmailApp.sendEmail(email, subject, body);
  }
  // Store current price to A1 in sheet1
  sheetData.getRange(1, 1).setValue(price);
}

定期実行

スクリプトエディタ上で↓のボタンを押し、

f:id:phicdy:20180206221217p:plain

↓のように設定すれば完了

f:id:phicdy:20180206221225p:plain

参考

Overview of Google Apps Script  |  Apps Script  |  Google Developers

qiita.com

qiita.com

qiita.com