【GAS+AppSheet】百ます計算の問題を毎日自分に送って自作アプリで結果を記録する(前半)

完全引きこもりOLとなってはや5か月となり、最後に出勤してから4か月がたちました。
はやい、はやすぎる…!

ほとんど家から出ず、平日も休日も景色が同じ…。
脳が退化していくのを日々感じるため、ちょっとでも刺激を与えておこうと
小学生ぶりに百ます計算を始めることにしました。
(昔は足し算1分くらいでできた記憶があるのに1分半になっていてショック)

百ます計算を知らない方はこちらをどうぞ(Wiki)


そんなわけで今回は
毎日百ます計算をGASで通知
+
(ノンプロ研の「ノーコードアプリ」定例会に感化されて)
記録ができるアプリ
を作成しました。

今日はGASの部分についての記事です。

f:id:twixoreo:20191209000627p:plain

GASの部分

スクリプトの概要

毎日定期で問題のPDFをメールで通知してついでにこたえと時間計測のためのストップウォッチのサイトも一緒に送る。


最初は問題をスプレッドシートから完全自作しようとしていたのですが
なんと、毎日問題を自動配信している素敵なサイトを発見!
これを使わない手はないと思い、問題をPDFにして送ることにしました。
ちなみにPDFにする理由はiPadで書き込みを行いたいから…。

参考にしたサイト
dailywork.net

百ます計算のページをみると問題と解答があるので、そこを直接みにいきます。
Chromeの検証でみるとページのURLがわかります(見なくてもわかるけど…)。
f:id:twixoreo:20200730011030p:plain


GASのコード

//  ==============
//  メインの関数(トリガーはこっちを指定しておく)
//  ==============
function sendMail(){
  
//  ランダムで今日の計算を選ぶ
  let todayKeisan = createKeisan();
  
//  URLから今日の問題をPDFにする
  let url = 'https://dailywork.net/manabi/print.php?p_no=' + todayKeisan[1];
  let pdf = UrlFetchApp.fetch(url).getAs('application/pdf');

//  今日の答えのURL
  let urlAnswer = 'https://dailywork.net/manabi/print.php?p_no=' + todayKeisan[2];

// メール作成  
  const to = PropertiesService.getScriptProperties().getProperty('MY_EMAIL');
  const subject = "【定期配信】今日の百ます";
  let body ="今日の百ますは" + todayKeisan[0] + '\n\n' +
            'ストップウォッチ: https://stopwatch.onl.jp/' + '\n' +
            '今日の答え: ' + urlAnswer;

// メール送信
  GmailApp.sendEmail(to,
                     subject,
                     body,
                     {attachments: pdf})
}
//  ==============

//  ==============
//  ランダムで今日の計算を選ぶ関数
//  ==============
function createKeisan(){
  
  let items = ['足し算', '引き算', '掛け算', '割り算'];
  let random = Math.floor( Math.random() * items.length );
  let itemurl = [items[random]];  

//  選ばれた計算によってURLの語尾をセット[計算,問題のURL語尾,答えのURL語尾,]
  switch (items[random]) {
  case '足し算':
    itemurl.push('91010','91015');
    return itemurl;
    break;
  case '引き算':
    itemurl.push('91020','91025');
    return itemurl;
    break;
  case '掛け算':
    itemurl.push('91030','91035');
    return itemurl;
    break;
  case '割り算':
    itemurl.push('91080','91085');
    return itemurl;
    break;
  default:
    return ['エラーが出たので難しい割り算','91040','91045'];
}
};
//  ==============


無事に配信されました!!
WebページをPDFに変換できるのを今回初めて知りましたが、ほかにも応用がききそう!

f:id:twixoreo:20200730012115p:plain