勉強したことのメモ

webプログラマが勉強したことのメモ。

GASでNintendo Storeをチェックし指定したソフトが〇円以下の際に通知する方法

   

Nintendo Storeで指定したソフトが指定した価格以下もしくは未満の際に通知メールを受け取りたい。Google Apps Scriptで実装できたので以下に作成方法をメモ。

 

スプレッドシートの作成

1行目は後で見たときに分かりやすいよう以下のようにカラム名を入れておく。

シート名は「nintendo」とする。

 

ライブラリの追加

スクリプトエディタページの左側にある「ライブラリ」をクリックするとダイアログが表示されるので、「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」にて検索し、Parserライブラリを追加する。

 

スクリプトの作成

スプレッドシートのページの上部から「拡張機能」→「Apps Script」と進み以下ソースコードを記述する。

function getNintendo(){

    //スプレッドシートの読み込み
    const sheet = SpreadsheetApp.getActiveSpreadsheet();

    //シートを指定
    const nintendoSheet = sheet.getSheetByName('nintendo');

    //シートのデータ取得
    const nintendoSheetVal = nintendoSheet.getDataRange().getValues();

    //結果用配列
    let resultVal = nintendoSheetVal;

    //戻り値用変数
    let returnMessage = '';

    //ループ処理
    for( let i = 1; i < nintendoSheetVal.length; i++ ){

        //パース用オブジェクト
        const parseData = new Object();

        //通知用フラグ
        let notifyFlg = false;

        //行からデータ取得
        const row = nintendoSheetVal[i];
        const title = row[0];
        const url = row[1];
        const price = row[2];
        const sheetUpdate = row[3];

        //HTMLデータ取得する
        const html = UrlFetchApp.fetch(url).getContentText('UTF-8');

        //価格を抽出し、カンマ区切りの文字列から数値に変更
        const tmpData = Parser.data(html).from('js-productMainRenderedPrice">').to('</div>').iterate();
        const tmpPrice = tmpData[0].match(/<span>(.*?)<\/span>/);
        let newPrice = parseInt(tmpPrice[1].replace(/,/g, ''));

        //価格がシートの値より小さくなっている場合
        if( price > newPrice ){
            returnMessage += "switchセール通知\n" + url + "\n\n";
        }

        //チェック日時
        const now = new Date();
        const date = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss');
        resultVal[i][3] = date;

    }

    //シートにまとめて書き込み
    nintendoSheet.getRange(1, 1, nintendoSheetVal.length,nintendoSheetVal[0].length).setValues(resultVal);

    return returnMessage;
}

function getData(){
    let message = getNintendo();

    if( message ){
        //送信先メールアドレス
        const recipient = 'hogehoge@gmail.com';

        //メール件名
        const subject = 'switchセール通知';

        //メール送信
        GmailApp.sendEmail(recipient, subject, message) 
    }

}

getData関数の送信先メールアドレス部分は適宜変更する。

 

トリガーの設定

ページ左側の時計マークから「トリガーを追加」をクリックし、「実行する関数を選択」は「getData」を選択、「イベントのソースを選択」は「時間手動型」に変更、「時間ベースのトリガーのタイプの選択」は「時間ベース or 分ベースのタイマー」を選択、「時間の間隔を選択」は適宜選択する。

 - Google Apps Script, Google, その他

  関連記事

ボタン作成のジェネレーター

Bootstrapとか使ってると楽だけど、デフォのままだと ボタンのデザインがあ ...

Cookieの最大文字(byte)数

CookieにID等の文字数を大量に保存したかった。ただ、どの程度の文字(バイト ...

スーパーリロード

ファイルを書き換えてもキャッシュの関係で、 表示が変わらないことがある。 今まで ...

httpsによるセキュリティ警告

httpsからhttpに遷移したり、 画像を張っているとIEでセキュリティ警告が ...

CSVファイルをアップロードしてWordPressに記事を投稿

CSVファイルをアップロードすることでWordPressに記事を投稿したかった。 ...

GASで「小説家になろう」サイトの更新通知をLINEに送る

Google Apps Scriptの勉強として「小説家になろう」サイトの特定小 ...

ファイル書き込み時のエラー

failed to open stream: HTTP wrapper does ...

GoogleMapでメインカラーを変更する方法

GoogleMapAPIを用いたMAPでカラー変更をしたかった。カラーコードの指 ...

GASで特定サイトにログインした後にスクレイピングを行う方法

Google Apps Scriptの勉強として特定サイトにログインし、その後に ...

SSHのクライアントソフトはTeraTermよりRLoginのが便利

SSHのクライアントソフトはずっとTeraTermを使っていたけど、どうもRLo ...