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">¥([\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); }
定期実行
スクリプトエディタ上で↓のボタンを押し、
↓のように設定すれば完了
参考
Overview of Google Apps Script | Apps Script | Google Developers