ないんのブログ

気になったネタをつぶやきます

GAS×LINE Notifyで宅配野菜(らっでぃっしゅぼーや)のお届け内容通知botを作ってみた

我が家で進めているおうちハックの紹介です。 今回は宅配野菜(らでぃっしゅぼーや)のお届け内容を自動で通知してくれるbotを作ってみました。

我が家では1年ほど前から宅配野菜(らでぃっしゅぼーや)の契約をしています。 自分で食材を買って料理していると献立が偏りがちなので、 毎週旬の野菜をバランス良く届けてくれるサービスというのはとても便利です。

ただ、毎週届く野菜が決まっているわけではないので、献立計画や買い物計画を立てるのが不便です。 1〜2日前になるとWebサイト上にお届け内容が公開されるのですが、いちいち見に行くのも面倒です。

そこで今回はGAS×LINE Notifyを使ってお届け内容をスクレイピングして、自動で通知してくれるbotを作成してみました。 f:id:osanine:20190506201111j:plain:w480

LINE Notifyのアクセストークンを取得する

LINE Notifyで通知するためにはアクセストークンを取得する必要があります。 LINEアカウントで下記サイトにログインしてマイページ上でアクセストークンを発行出来ます。

参考: qiita.com

ぱれっとお届け内容のURLを取得する

次に定期宅配の野菜の取得URLを取得します。 お届け内容や曜日は人によって異なると思うので、下記サイトにアクセスして地域・曜日・コースを選択して、 検索結果に一つだけ結果が表示されている状態にします。 そのページのURLを取得します。

www.radishbo-ya.co.jp

f:id:osanine:20190506111217p:plain
お届け内容のURLを取得

GAS作成

  • LINE Notifyトーク
  • お届け内容のURL

が取得出来たらGASの作成を行います。

SpreadSheetの作成

まずは下記サイトから新規SpreadSheetの作成をします。 www.google.com

次にGASのエディタを開きます。

f:id:osanine:20190506112310p:plain
SpreadSheet

スクレイピングの際に外部ライブラリ(Parser)を利用するので、リソース→ライブラリ...選択して、 ライブラリを追加の部分に下記キーをコピペして追加します。

M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV

f:id:osanine:20190506181345p:plain

スクリプト

らでぃっしゅぼーやのお届け内容を取得するスクリプトとLINE Notify経由でユーザーに通知するスクリプトです。 ついでに後から過去のお届け内容を確認出来るようにスプレッドシートに結果を追記しています。 エディタ上でコードの実行してみてLINE Notifyで通知されれば成功です。

var LINE_TOKEN = '<LINE Notify トークン>';
var URL = '<お届け内容のURL>';

// 宅配日を取得
function get_date(html) {
  var date_html = Parser.data(html).from('palette_delivery_info_heading').to('お届け分').build();
  var date_str = Parser.data(date_html).from('&nbsp;').to(')', offset=1).build();
  return date_str;
}

// お届け内容を取得
function get_items(html) {
  var palettes = Parser.data(html).from('<ul class="palette_delivery_item_list ">').to('</ul>').iterate();
  var next_palette = palettes[0];
  var items = Parser.data(next_palette).from('target="_blank">').to('</a>').iterate();
  return items;
}

// LINE Notifyで通知
function notify_line(date, items) {
  message = date + '\n' + items.join('、');
  Logger.log(message);
  var options = {
        "method"  : "post",
        "payload" : "message=" + message,
        "headers" : {"Authorization" : "Bearer "+ LINE_TOKEN}
  };

  UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}

// 結果をスプレッドシートに保存
function save_to_spreadsheet(date, items) {
 var sheet = SpreadsheetApp.getActiveSheet();
 sheet.appendRow([date].concat(items));
}


function main() {
  var html = UrlFetchApp.fetch(URL).getContentText();
  
  var date = get_date(html);
  var items = get_items(html);
  save_to_spreadsheet(date, items);
  notify_line(date, items);
  
  Logger.log(items);
}

定期実行の設定

最後に定期実行の設定です。 大抵はお届け予定日の2日前には更新されているようです。 うちでは前日の朝に通知する設定にしています。

編集→現在のスクリプトのトリガーからトリガー設定を行います。

f:id:osanine:20190506183436p:plain

まとめ

今回は宅配野菜の内容を自動で通知してくれるbotを作ってみました。 我が家では他にも色々と自動化を進めているのでまた紹介したいと思います。 面倒臭い作業は全部自動化していまいましょう!