Google App Script LINE 投資 自動化

【GAS】米国株の約定をLINEに通知

はじめに

今回は、楽天証券の米国株式の約定通知メールをGmailで受けたら、約定内容をLINEに通知する仕組みをGoogle Apps Scriptで作成します。

楽天証券では、約定通知サービスがあり、約定したことをメールで受け取ることができます。

この内容をもとにGoogle Apps Scriptを使用してLINEに通知します。

対象読者

  • 楽天証券の口座を保有している
  • 楽天証券の約定通知メール設定において「配信希望」としている
  • 楽天証券からの配信メールにGmailを指定している
  • 配当金の入金情報をLINEで受けたい

Google App Scriptについては以下の記事を参照ください。

LINE通知の事前準備

LINEに通知するので事前準備が必要です。事前準備については以下の記事を参照ください。

あらかじめLINE notifyのトークンを取得しておく必要があります。

楽天証券の事前準備

楽天証券の配当金通知メール設定は、ログインしてから以下の画面で行うことができます。

  • マイメニュー
    • メールサービス
      • 約定通知メール
        • 登録・変更する

米国株式の通知の中の「詳細通知」を選択してください。

詳細は、楽天証券の以下のサイトを確認ください。

約定情報をLINEに通知する

ほとんどの処理は配当金入金のLINE通知と同様です。

主な違いは以下の3点です。

  • メール検索文字が楽天証券からの約定通知サービスである
  • メール本文内容解析(切り取る最初と最後の行の指定文字)
  • LINEに通知するメッセージは、銘柄名と約定単価と約定数量です。

未処理メールの抽出

楽天証券からの積立完了メールを抽出します。

メールの抽出条件の構文は、Gmailの抽出条件に設定できる構文と同じです。

// 処理済み後に付けるラベル名(ラベルが存在しなければ自動的に作られる)
var LABEL = '自動処理済';

var SEARCH_QUERY = 'is:unread -label:' + LABEL + ' from:tradesys@rakuten-sec.co.jp  subject:米国株式の注文が約定しました';

約定情報抽出処理

楽天証券の配当金入金通知サービスに登録すると、以下のようなメールが送られてきます。

この内容から、赤字で示している銘柄名、入金額を抽出してLINEに登録します。

約定情報メール

関谷  様

米国株式の注文が約定しました。

注文番号:0144
銘柄名(銘柄コード):テスラ(TSLA)
口座・売買:特定・買付
決済方法:円貨
約定単価:xxxx.xx米ドル
約定数量:xx株(口)
約定日時:YYYY/MM/DD hh:mm

約定は一部約定の場合があります。
詳細は約定照会画面でご確認ください。

■米国株式取引の約定照会
<ウェブ>
PCサイトにログイン後、「注文」→「米国株式」→「注文照会・訂正・取消」

<マーケットスピード>
ログイン後、「注文約定」→「米国株式」→「約定照会」

<iSPEED for iPhone/Android>
ログイン後、「注文」→「米国株式取引」→「約定照会」

■本メールの設定の確認・変更(配信・停止)
PCサイトにログイン後、「マイメニュー」→お客様情報の設定・変更「メールサービス」→通知メール「約定通知メール」
http://www.rakuten-sec.co.jp/cgi-bin/CTS/Direct_Login.cgi?homeid=USER&type=account&sub_type=&local=acc_mail_select&eventType=init

以下にGmailで受信したメールの処理を示します。

  • メールのプレーンテキストをmessage.getPlainBody()で取得します。
  • CUT_STARTからCUT_ENDまでの文字を抽出し、notifyに格納します。
  • LINEへの通知は、sendline()で行います。
  • 最後に処理済みフラグをメールに付与します。
// 検索文字列
var CUT_START = '米国株式の注文が約定しました。';
var CUT_END = '約定は一部約定の場合があります。';

function notifyContractInformationToLine() {

  // 条件に合うメール検索
  var threads = GmailApp.search(SEARCH_QUERY, 0, 1);
  if (threads.length === 0) {
    Logger.log('メールが見つかりません');
    return;
  }

  for(var k in threads){
    var thread = threads[k]
    var messages = thread.getMessages();
    for (var j in messages){
      var message = messages[j];
      var body = message.getPlainBody();    // HtmlメールからPlain textの本文を取得する
      //Logger.log(body);

      var notify= '';
      var cutFlg = false;
      var rows = body.split('\n');// 1行ごとに処理するために改行で分割する      
      for (var i in rows) {
        var row = rows[i];

        if(row.indexOf(CUT_START) >= 0){
          cutFlg = true;
        }
        else if(row.indexOf(CUT_END) >= 0){
          cutFlg = false;
        }
        else{
          // 通知内容を作る
          if(cutFlg){
            notify= notify + row + '\n';
          }          
        }
      }

      // LINEに通知する
      Logger.log(notify);
      sendLine(null, null, notify);
    
      // 処理済みメールとしてラベルを付ける
      putLabel(thread);
    }
  }
}

putLabel()関数については、下記記事のlibCtrlMailを参照ください。

LINE通知処理

LINEにメッセージを送るための前準備については以下を参照ください。

あらかじめLINE notifyのトークンを取得しましょう。

以下のコードが示すsendLine()に送信したいメッセージを渡すことでLINEにメッセージが送られます。

function sendLine(strDate, strSubject, strMessage){
   
  //Lineに送信するためのトークン
  var strToken = "<ここにLINE notifyで取得したトークンを記載します>";
  var options =
   {
     "method"  : "post",
     //"payload" : "message=" + strDate + strSubject + strMessage,
     "payload" : "message=" + strMessage,
     "headers" : {"Authorization" : "Bearer "+ strToken}
 
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}

実行結果

LINEには以下のように通知されます。

最後に

いかがでしたでしょうか。

LINEはリアルタイムの通知ができて、かつ、履歴も残るという仕組みのため、通知システムとして使うとのに優秀だと思います。

お勧めですので、お試しください。

では、今日も良い一日を。

-Google App Script, LINE, 投資, 自動化
-, , , , ,