はじめに
今回は、楽天証券の米国株式の約定通知メールを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はリアルタイムの通知ができて、かつ、履歴も残るという仕組みのため、通知システムとして使うとのに優秀だと思います。
お勧めですので、お試しください。
では、今日も良い一日を。