※当サイトの商品・サービスのリンク先にPRを含みます。

Google Apps Script 時短ツール

【便利】GASで米国株の1日の値動きをLINEに毎朝通知

お仕事おつにゃッス🐈

文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!

あなたが持っている米国株の終値をアプリを開いて、毎朝確認するのは面倒くさいですよね?

この記事ではそのお悩みを、コピペOKのGoogle Apps Scriptのコードで解決します。

運営者は紹介するコードを作成して、朝の時間を10分も削減し、朝ごはんをゆっくりと食べることがができています。

あっきょ
この記事は以下で悩んでいる人におすすめ!

  • もっと簡単に米国株式を管理したい
  • 手間を省いて、もっと朝の時間を優雅に使いたい
  • プログラミングでJavaScriptを学んだけど、何を作っていいかわからない

誰でも無料で簡単にできますので、お気軽に学んでいきましょう!

LINEから株価を取得するアプリのイメージ

GASで米国株の1日の値動きをLINEに毎朝通知するアプリのイメージ

Google Apps Scriptとスプレッドシートを使って、LINEに米国株の終値を毎朝通知するアプリを作成します。

アメリカの株式市場の動向を起きてから調べていると、朝の貴重な時間が削られてしまいます。

そこでLINEと連携して、チラッと画面を確認するだけで終値がわかるシステムを開発します。

ぼくもこのアプリを開発して、朝ごはんをゆっくりと食べられるようになったッス!
あっきょ

LINEから株価を取得する準備

GASから米国株の情報を毎朝ラインに送信する準備をします。準備物は2つ必要です。

必要なファイル

  • Google スプレッドシート ・・・ 株式データの保存 & GASのプログラムの実行
  • LINE Notify         ・・・ GASから株価を受信

LINE Notify の登録

LINE Notify のサイトにアクセスし、緑色のバーの「ログイン」をクリックします。

LINE Notify のトップ画面

LINEに登録している自身のメールアドレスとパスワードを入力します。

LINEにログイン

ログインしたらトップページに戻ります。緑色のバーのユーザー名をクリックして「マイページ」を選択します。

LINE Notify マイページ

ページの下部に「アクセストークンの発行」があるので、「トークンを発行する」をクリックします。

LINE Notify トークン発行

トークン名とトークルームを決めます。この記事では、トークン名を「test」とします。トークルームは「1:1でLINE Notifyから通知を受け取る」を選択し、「発行する」をクリックします。

LINE Notify トークン作成

トークンが発行されます。画面を閉じるとトークンを二度と発行できないので、必ずメモしましょう。LINE Notify の登録は以上です。

LINE Notify トークンのコピー

Google スプレッドシートの準備

米国株の管理をするシートを作成します。

スプレッドシートでは簡単に株価を取得するGOOGLEFINANCE関数を使います。

スプレッドシートで米国株の株価を取得するGOOGLEFINANCE関数の説明

株価を取得する関数の詳細はこちらから。

【1行だけ】スプレッドシートで米国株の損益を自動更新 | デイコー
【1行だけ】スプレッドシートで米国株の損益を自動更新

続きを見る

「企業名」,「株式コード」,「現在の株価」,「前日の株価」の4項目を設定します。

シート名を「リスト」に変更します。Google スプレッドシートの設定は以上です。

リストシート作成

LINEに株価を通知するサンプルコード

Google Apps Scriptで米国株の終値をLINEに通知するサンプルコードの公開と解説します。

解説の項目

  • サンプルコード
  • A. 当日の日付を取得
  • B. LINEに送信するトークンの設定
  • C. 操作するスプレッドシートの定義
  • D. 登録した個別株のデータを取得
  • E. LINEに送信する文章を決定
  • F. LINEに送信
  • G. トリガーを実行する時間を指定

サンプルコード

ソースコードの全体です。右上にあるマークを押すとコードのコピペが一瞬でできます。また、コード内で文頭にアルファベットが付いているコメントごとに、詳細を説明していきます。

//A,当日の日付を取得
const today = new Date();
const monthNum = (today.getMonth())+1; //月
const dateNum = today.getDate(); //日
const day = today.getDay(); //曜日
const thisDate = monthNum + "月" + dateNum + "日";
const thisDay = ['日','月','火','水','木','金','土']; 


//スプレッドシートから登録している米国株の情報を取得し、LINEに送信する関数
function sendMessage(){

  //B,LINEに送信するトークンの設定
  const LINE_NOTIFY_TOKEN = "LINE Notify で取得したトークン";
  const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";

  //C,操作するスプレッドシートの定義
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = spreadSheet.getSheetByName('リスト');  
  const lastRow = listSheet.getLastRow();
  let stockList = ""; //スプレッドシート上に登録している銘柄情報を取得
  let message = ""; //LINEに送信する文章を挿入

  //D,登録した個別株のデータを取得
  for(var i=2; i<=lastRow; i++){
    const stockName = listSheet.getRange(i,1).getValue(); //企業名
    const stockCode = listSheet.getRange(i,2).getValue();  //株式コード(ティッカー)
    const todayPrice = listSheet.getRange(i,3).getValue(); //当日の株価
    const yesterdayPrice = listSheet.getRange(i,4).getValue(); //前日の株価
    const resultPrice = Math.round(todayPrice - yesterdayPrice); //当日の株価 - 前日の株価

    stockList += "【銘柄名】" + stockName + "(" + stockCode + ")" 
              +  "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
              +  "-------------------------------\n"; 

  }

  //E,LINEに送信する文章を決定
  if(stockList == "" || stockList == null){
    message = "\n個別に登録されている銘柄はありません。";
  }else{
    message = "\n" + thisDate + "(" + thisDay[day] + ")" + "の個別株の動きです。\n\n" + stockList;
  }


  //F,LINEに送信
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + message,
     "headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}
   };
  UrlFetchApp.fetch(LINE_NOTIFY_API, options);
  setTrigger();
}
 

//毎日午前7時にsendMessage関数を実行する関数
function setTrigger(){
 //G,トリガーを実行する時間を指定
  today.setDate(today.getDate() + 1);
  today.setHours(7); //時
  today.setMinutes(0); //分
  today.setSeconds(0); //秒
  ScriptApp.newTrigger('sendMessage').timeBased().at(today).create(); //翌日のトリガーを作成
}

A. 当日の日付を取得

//A,当日の日付を取得
const today = new Date();
const monthNum = (today.getMonth())+1; //月
const dateNum = today.getDate(); //日
const day = today.getDay(); //曜日
const thisDate = monthNum + "月" + dateNum + "日";
const thisDay = ['日','月','火','水','木','金','土']; 

Dateオブジェクトでインスタンスを作成して、当日の日付を年月日で取得します。

日付を取得する方法の詳細はこちらから。

当日の日付を取得するサムネイル
【入門】GASで当日の日付を「年月日」で取得

続きを見る

B. LINEに送信するトークンの設定

//B,LINEに送信するトークンの設定
const LINE_NOTIFY_TOKEN = "LINE Notify で取得したトークン";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";

LINE Notify を使うトークンを記入します。

定数 LINE_NOTIFY_TOKEN には取得したトークンに書き換え必須なので、必ず変更します。

C. 操作するスプレッドシートの定義

//C,操作するスプレッドシートの定義
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = spreadSheet.getSheetByName('リスト');  
const lastRow = listSheet.getLastRow();
let stockList = ""; //スプレッドシート上に登録している銘柄情報を取得
let message = ""; //LINEに送信する文章を挿入

使用するスプレッドシートを定義します。

「リスト」シートを指定した後、getLastRowメソッドで最終行を取得します。このメソッドの詳細はこちらから。

【5分で解決】GASでスプレッドシートの最終行と最終列を取得

続きを見る

D. 登録した個別株のデータを取得

//D,登録した個別株のデータを取得
for(var i=2; i<=lastRow; i++){
  const stockName = listSheet.getRange(i,1).getValue(); //企業名
  const stockCode = listSheet.getRange(i,2).getValue();  //株式コード(ティッカー)
  const todayPrice = listSheet.getRange(i,3).getValue(); //現在の株価
  const yesterdayPrice = listSheet.getRange(i,4).getValue(); //前日の株価
  const resultPrice = Math.round((todayPrice - yesterdayPrice) * 100) / 100;

  stockList += "【銘柄名】" + stockName + "(" + stockCode + ")" 
            +  "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
            +  "-------------------------------\n"; 
}

スプレッドシートから個別株のデータを取得します。

「リスト」シートの1行目の見出しは読み取り不要なので、for文の変数 i は2からスタートします。

シートの i行目にある株式データをそれぞれを取得した後、LINEに送る文字列を作成してstockList に代入します。

E. LINEに送信する文章を決定

//E,LINEに送信する文章を決定
if(stockList == "" || stockList == null){
  message = "\n個別に登録されている銘柄はありません。";
}else{
  message = "\n" + thisDate + "(" + thisDay[day] + ")" + "の個別株の動きです。\n\n" + stockList;
}

stockList が空の状態、つまり「リスト」シートに登録している銘柄がない場合は「個別に登録されている銘柄はありません。」と通知します。

対して、1つでも銘柄を登録していればLINEに株の当日の終値を通知します。

F. LINEに送信

//F,LINEに送信
var options =
   {
     "method"  : "post",
     "payload" : "message=" + message,
     "headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}
    };
UrlFetchApp.fetch(LINE_NOTIFY_API, options);
setTrigger();

GAS から LINE にメッセージを送信します。

送信完了後、翌日も同じ処理をするためにsetTrigger関数でタイマーを設定します。

LINEに送信する方法の詳細はこちらから。

GASとLINE Notifyを連携するサムネ
【便利】GASでLINE Notifyを使ってメッセージを送信

続きを見る

G. トリガーを実行する時間を指定

//G,トリガーを実行する時間を指定
today.setDate(today.getDate() + 1);
today.setHours(7); //時
today.setMinutes(0); //分
today.setSeconds(0); //秒
ScriptApp.newTrigger('sendMessage').timeBased().at(today).create(); //翌日のトリガーを作成

翌日も同じ処理を実行できるようにトリガーを設定します。

この例では、「翌日の午前7時に sendMessage 関数を実行」をするように設定しています。

トリガーの設定方法の詳細はこちら。

【3分で簡単】GASで希望した日時にトリガーを設定

続きを見る

サンプルコードの説明は以上です。

LINEに株価を通知するテスト

GASからラインに株価を送信できるかテストしてみましょう。

赤丸で囲った文字が「sendMessage」であることを確認し左側にある「実行」を押します。

sendMessage関数の実行

「このアプリはGoogleで確認されていません」と表示した場合はこちら

【3分で解決】GASの「このアプリはGoogleで確認されていません」を許可する方法

続きを見る

LINEを確かめてみましょう。「LINE Notify」からメッセージが届いていれば成功です。

LINE Notify 米国株の終値を通知

希望した時間に通知が来ない時の対処法

時間がずれて希望した時刻に処理できない場合は、時間の設定がアメリカに設定されているのが原因です。

日本の標準時に合わせる必要があります

以下の記事では、タイムゾーンを変更して正常な時間に戻す方法を解説しています。

【3分で解決】GASで出力した時間がずれたときにタイムゾーンを変更する方法

続きを見る

【さらに便利】GASで資産を管理するアプリ一覧

この記事では、米国株の終値を毎朝通知するアプリを開発しました。

スプレッドシートを使えば他にもS&P500などの株式指数為替の値も取得できますので、ぜひ今回紹介したコードと合わせて使ってみてください。

S&P500の値動きをスプレッドシートで自動取得
S&P500の値動きをスプレッドシートで自動取得

続きを見る

スプシで為替を変換するサムネ
【簡単】スプレッドシートで為替を自動で換算

続きを見る

GASで日本株を管理する方法は以下の記事から。

【不安解消】GASでLINEに日本株の1日の値動きを通知

続きを見る

GASで日本の個別株を取得する方法のサムネイル
【便利】GASで日本の個別株の株価を取得する方法

続きを見る

おわりに

以上、Google Apps Script で LINEに米国株の1日の値動きを毎朝通知する方法でした。

そのままコピペして日常業務で使いやすいように改修したり、プログラミングの練習や動作確認用に使ってみましょう。

GASでさらに業務効率化したい場合、参考書やプログラミングスクールを使うとあなた自身でアプリを作るスキルが身に付きます

プログラミング未経験者にもわかりやすく解説しています。

プログラミングスクールは82社を分析して厳選してるッスよ!
あっきょ

次回の記事もご期待ください!

-Google Apps Script, 時短ツール
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,