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

Google Apps Script 時短ツール

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

お仕事おつにゃッス🐈

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

あなたが持っている日本株の終値をアプリを開いて仕事中に確認するのは、面倒くさいですよね?

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

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

  • もっと簡単に日本株の管理をしたい
  • 手間を省きたい
  • プログラミングでJavaScriptを学んだけど、何を作っていいかわからない

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

株価予想を学べるプログラミングスクール3選

DMM WEBCAMPは未経験者向けプログラミングスクールでNo.1。

  • 経験豊富な現役エンジニアが講師
  • 自己調整学習理論で即戦力
  • データサイエンスコースで株価予測を実践的に経験

実務でも使えるスキルを身に着けたい人におすすめです。

デイトラは業界最安値級のスクール。

  • 受講生14,000人突破
  • 1年間の長期間サポート
  • Pythonコースで株価予想アプリを学習

少しでも受講料を抑えたい人におすすめです。

Aidemyは社会人が選ぶDX人材育成サービスNo.1の実績。

  • 受講料70%オフの教育給付金対象講座
  • 運営企業は東証グロース上場
  • データ分析講座で株価予想を学習

AIや機械学習も専門的に学ぶならおすすめです。

LINEに株価を通知する完成イメージ

GASでLINEに日本株の1日の値動きを通知するアプリの完成イメージ

GASとスプレッドシートで、LINEに日本株の終値を15時30分に通知するアプリを作成。

あなたがサラリーマンなら、仕事途中でも株価が気になって作業に集中できない時もあるでしょう。

そこで、LINEの通知で終値をチラッと確認できるツールを作成します。

この記事で例に出した銘柄はあくまで例です。運営者が保有もしくは売買を推奨している株式ではありません。

日本株を取得してLINEに通知する方法

GASでLINEに日本株の1日の値動きを通知する方法

GASで日本株を取得するには、「スクレイピング」というWeb上のデータを自動取得する技術を使います。

取得後に読みやすいデータを加工した後、LINEに通知します。

このアプリは米国株版を応用して作成。

詳細はこちら。

【注意】アプリ作成の難易度は高め

注意しなければならないのは、このアプリの開発難易度は比較的高め。

理由は4つの技術を混ぜ合わせて開発するためです。

使う技術
現在の日付を取得Dateオブジェクトを使ってリアルタイムで日付を取得
スクレイピングWeb上の文字を自動で取得して株価を取得
LINE Notify の使用無料かつ自動で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 スプレッドシートの準備

日本株の管理をするシートを作成します。

「コード」と「会社名」の2項目を設定します。

シート名を「日本株」に変更します。

Google スプレッドシートの設定は以上です。

LINEに日本株の終値を通知するサンプルコード

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

サンプルコード

右上にあるマークを押すとコードのコピペが一瞬でできます。

コード内で文頭にアルファベットが付いているコメントごとに、詳細を説明していきます。

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

//B,スクレイピングで本日の終値を取得
function getPrice(code){
  let url = "https://www.google.com/finance/quote/" + code + ":TYO";
  const html = UrlFetchApp.fetch(url).getContentText();
  let stockPrice = Parser.data(html)
    .from('<div class="YMlKec fxKbKc">')
    .to("</div>")
    .build(); //スクレイピングで終値を取得

  return stockPrice.replace("¥","").replace(",",""); //文字列を数字に変換
}

//C,スクレイピングで前日の終値を取得
function beforePrice(code){
  let url = "https://www.google.com/finance/quote/" + code + ":TYO";
  const html = UrlFetchApp.fetch(url).getContentText();
  let stockArray = Parser.data(html)
    .from('<div class="P6K39c">')
    .to("</div>")
    .iterate(); //スクレイピングで配列を取得
  const beforePrice = stockArray[0]; //取得した配列内の1番目の要素が前日の終値

  return beforePrice.replace("¥","").replace(",",""); //文字列を数字に変換
}

//D, LINEに日本株の終値を通知
function sendMessage(){

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

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

  //登録した個別株のデータを取得し、LINEに送信する文章を作成
  for(var i=2; i<=lastRow; i++){
    const stockCode = listSheet.getRange(i,1).getValue(); //証券コード
    const stockName = listSheet.getRange(i,2).getValue(); //企業名
    const todayPrice = getPrice(stockCode); //今日の終値
    const yestPrice = beforePrice(stockCode); //昨日の終値
    let resultPrice = Math.round(((todayPrice - yestPrice) * 100) / 100); //今日の終値 - 昨日の終値

    //当日の終値が前日の終値より高ければ、文字列の「+」を追加
    if(resultPrice > 0){
      resultPrice = "+" + String(resultPrice);
    }

    //LINEに送信する文章を作成
    stockList +="【銘柄名】" + stockName + "(" + stockCode + ")" 
            +  "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
            +  "-------------------------------\n"; 
  }

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

  //LINEに送信
  const token = LINE_NOTIFY_TOKEN;
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + message,
     "headers" : {"Authorization" : "Bearer "+ token}
   };
  UrlFetchApp.fetch(LINE_NOTIFY_API, options); //フェッチ通信でLINEに送信
  setTrigger(); //翌日分のトリガーを作成
}
 
//E,翌日分のトリガーを作成
function setTrigger(){
 //G,トリガーを実行する時間を指定
  today.setDate(today.getDate() + 1); //翌日
  today.setHours(15); //時
  today.setMinutes(30); //分
  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, スクレイピングで本日の終値を取得

//D,スクレイピングで本日の終値を取得
function getPrice(code){
  let url = "https://www.google.com/finance/quote/" + code + ":TYO";
  const html = UrlFetchApp.fetch(url).getContentText();
  let stockPrice = Parser.data(html)
    .from('<div class="YMlKec fxKbKc">')
    .to("</div>")
    .build(); //スクレイピングで終値を取得

  return stockPrice.replace("¥","").replace(",",""); //文字列を数字に変換
}

スクレイピングを行って本日の終値を取得する関数

返り値で2回もreplaceメソッドを使うのは、取得した文字列を数字に変換するためです。

GASでスクレイピングして株価を取得する方法の詳細はこちら。

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

続きを見る

C, スクレイピングで前日の終値を取得

//E,スクレイピングで前日の終値を取得
function beforePrice(code){
  let url = "https://www.google.com/finance/quote/" + code + ":TYO";
  const html = UrlFetchApp.fetch(url).getContentText();
  let stockArray = Parser.data(html)
    .from('<div class="P6K39c">')
    .to("</div>")
    .iterate(); //スクレイピングで配列を取得
  const beforePrice = stockArray[0]; //取得した配列内の1番目の要素が前日の終値

  return beforePrice.replace("¥","").replace(",",""); //文字列を数字に変換
}

スクレイピングで前日の終値を取得する関数です。

当日の終値の取得とは異なり、配列から前日の終値を取得。

配列の1番目の要素に前日の終値のデータがあるので、取り出して返り値として送ります。

D, LINEに日本株の終値を通知

//B, LINEに日本株の終値を通知
function sendMessage(){

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

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

  //登録した個別株のデータを取得し、LINEに送信する文章を作成
  for(var i=2; i<=lastRow; i++){
    const stockCode = listSheet.getRange(i,1).getValue(); //証券コード
    const stockName = listSheet.getRange(i,2).getValue(); //企業名
    const todayPrice = getPrice(stockCode); //今日の終値
    const yestPrice = beforePrice(stockCode); //昨日の終値
    let resultPrice = Math.round(((todayPrice - yestPrice) * 100) / 100); //今日の終値 - 昨日の終値

    //当日の終値が前日の終値より高ければ、文字列の「+」を追加
    if(resultPrice > 0){
      resultPrice = "+" + String(resultPrice);
    }

    //LINEに送信する文章を作成
    stockList +="【銘柄名】" + stockName + "(" + stockCode + ")" 
            +  "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
            +  "-------------------------------\n"; 
  }

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

  //LINEに送信
  var options =
   {
     "method"  : "post", //POSTメソッドで通信
     "payload" : "message=" + message, //送信するメッセージ
     "headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}
   };
  UrlFetchApp.fetch(LINE_NOTIFY_API, options); //フェッチ通信でLINEに送信
  setTrigger(); //翌日分のトリガーを作成

}

スクレイピングした日本株の終値を取得してLINEに送信する関数です。

定数 LINE_NOTIFY_TOKEN内にはコピーしたトークンに書き換えます

コードの内容は米国株の終値をLINEで送信を参考にしています。

ほとんど変わりませんが、変更点は以下の3つ。

  • 今日の終値をgetPrice関数から取得
  • 昨日の終値をbeforePrice関数から取得
  • 当日の終値が前日の終値より高ければ、文字列の「+」を追加

それ以外はすべて同じです。

米国株の株価をLINEで取得する詳細はこちら。

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

続きを見る

E, 翌日分のトリガーを作成

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

翌日分のトリガーを作成します。

翌日の15時30分にLINEに日本株の終値を通知するsendMessage関数を実行するトリガーを作成。

コードの説明は以上です。

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

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

赤丸で囲っている文字が「sendMessage」なのを確認して左側の「実行」を押します。

sendMessage関数の実行

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

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

続きを見る

LINEを確かめてみましょう。

「LINE Notify」からメッセージが届いていれば成功です。

GASでLINEに日本株の1日の値動きを通知するアプリの実行結果

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

時間がずれて、希望した時刻に処理できない場合は以下の記事をクリック。

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

続きを見る

株価を予想するアプリを作れるプログラミングスクール3選

プログラミングで株価を予測するスキルが身に付くスクールを3つ紹介。

というのも、プログラミング独学の挫折率は60%近くと高め

エラーを解決できなかったり相談できる人がいなかったりと理由はさまざまです。

モチベを保てる環境を整えたのがスクールで挫折率を1割未満に抑えられます。

そこで、デイコーで調査した82社から厳選して解説します。

投資がもっと楽&スキルアップできるッスよ!
あっきょ
  • DMM WEBCAMP | 現役エンジニアが学習サポート
  • デイトラ | 業界最安値級
  • Aidemy | 東証グロースに上場

DMM WEBCAMP | 現役エンジニアが学習サポート

DMM WEBCAMPのトップ画面
引用:DMM WEBCAMP

DMM WEBCAMPはIT企業大手のDMM.comが運営するプログラミングスクール。

経験豊富な現役エンジニアがあなたの学習をサポートします。

  • 週2回のオンラインメンタリング
  • 24時間いつでもOKのチャットサポート
  • 無制限で受けられるレビュー

自己調整学習理論にもとづく独自メソッドで即戦力のスキルが身に付きます。

データサイエンスコースでは、Pythonを用いて機械学習を学習。

株価データをモデリングと予測を実践的に経験していきます。

未経験者の割合が97%と学びやすいのがわかるッス!
あっきょ
無料相談で不安解消! 公式サイト

デイトラ | 業界最安値級

デイトラのトップ画面
引用:デイトラ

デイトラは業界最安値級で学べるオンラインスクール。

未経験者でも挫折しないで勉強できるサポートが充実しています。

  • 1年間の長期間サポート
  • 閲覧無制限&アップデートされるカリキュラム
  • 現役プロに質問や作品のフィードバック

Pythonコースでは、Djangoというフレームワークを使ってオリジナルアプリを開発。

株価予想アプリやYoutube人気動画分析アプリなど幅広く作成します

プログラミングの基礎基本も学ぶので初心者でも安心です。

学習内容を詳しく紹介 Pythonコースの詳細
最短10秒で無料会員登録! 公式サイト

Aidemy | 東証グロースに上場

アイデミーのトップ画面
引用 : Aidemy

AidemyはDX時代の新スキルを基礎から学ぶ Python 特化型のプログラミングスクール。

初心者にとって難しい内容でも挫折しないで学べる環境が整っています。

  • 仲間と学べるバーチャル学習室
  • チャットで質問し放題
  • 講師のコードレビュー
  • 1回25分のオンラインカウンセリング
  • オリジナルのポートフォリオ作成支援

転職サポートもあるので、未経験からエンジニアも目指せます。

データ分析講座では、Pythonを利用してデータを分析するスキルを習得。

自然言語処理と時系列分析を用いて株価の予測を行います

最新技術で一歩先を目指すビジネスマンにおすすめです。

給付金の受け取り方は公式サイトをチェック!
あっきょ
学習内容を閲覧可能 データ分析講座の詳細
1分で無料オンライン相談予約! 公式サイト

おわりに | GASで株式の管理を楽に!

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

そのままコピペしたり株式管理に使ったりしてみましょう。

今回紹介したサンプルコード以外にも、GASで株式の管理をすることは可能。

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

続きを見る

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

続きを見る

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

続きを見る

ヒューマンエラーが起きやすく時間がかかる作業をGASに任せましょう。

不明点やスクール選びで悩んでいるならデイコーのお問い合わせまでご連絡を。

あなたのお力になります。

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