見出し画像

SBI証券の約定通知メールから約定時間や約定内容を抜き出して、GoogleSpredSheetにリスト化する方法

SBI証券を使って投資をしていて、自分の取引情報を見返す際に、約定時間を取得したいと思うことはありませんか?

取引履歴をSBI証券のサイトから取得できますが、何時何分に約定したかはわかりません。

約定した際に送付されるメールには約定時刻が記載されているため、それから自動で取得してリスト化できるようなプログラムを組みましたので概要を説明して、プログラム自体も公開します。メールはこのように送られてきます↓

画像1

上記内容から、約定日時、取引種別、銘柄名(コード)、株数、約定価格を取得して、スプレッドシートにリスト化します。結果できるリストはこんな感じ↓

画像9

作業にあたって、参考にしたサイトは以下になります。https://qiita.com/kazinoue/items/1e8ed4aebfb5c3c886db
以下手順でさらっと流している部分は、上記サイトも併せて参照いただければと思います。

<前提環境>
・取引はSBI証券である
・約定通知メールをGmail宛に送付する設定にしてある
・GoogleSpreadSheetを使える状況にしている

以上です。SBI証券以外でも応用が効くと思うので、自由にカスタマイズして使ってみてください。それが出来たら共有してもらえるととても喜びます。

<作業手順>
まずは、履歴を記録するためのスプレッドシートを作ってください。下図の十字のあるアイコンを押して新規作成します。題名は何でもOKです。

画像2

次に、プログラムで指定するので、画面一番下の、シートの名前を「約定履歴」としてください。

画像3

上部タブから、「ツール」⇒「スクリプトエディタ」をクリック

画像4

以下のプログラムを張り付ける
ーーーーーーーーーここから↓ーーーーーーーーーーー

//タイトルが[SBI証券]約定通知を含んでいて、差出人がalert_master@sbisec.co.jpで、直近1年分で、処理済みフラグがついていないメールを検索
var SearchString = "subject:[SBI証券]約定通知 from:alert_master@sbisec.co.jp newer_than:1Y -label:処理済みフラグ ";

function myFunction() {
var myThreads = GmailApp.search(SearchString, 0, 1);
var myMsgs = GmailApp.getMessagesForThreads(myThreads);

for ( var threadIndex = 0 ; threadIndex < myThreads.length ; threadIndex++ ) {
var mailBody = myMsgs[threadIndex][0].getPlainBody();

// 正規表現マッチにより、メール本文から情報を抽出する。
//日付
var time = mailBody.match(/約定日時.*/g)[0].replace('約定日時','');
//取引種別
var syubetu = mailBody.match(/取引種別.*/g)[0].replace('取引種別','');
//取引銘柄
var code = mailBody.match(/銘柄名(銘柄コード).*/g)[0].replace('銘柄名(銘柄コード)','');
//株数
var kabusu = mailBody.match(/株数.*/g)[0].replace('株数','');
//価格
var price = mailBody.match(/約定価格.*/g)[0].replace('約定価格','');


// 「約定履歴」シートへ値を追加する
var objSheet = SpreadsheetApp.getActive().getSheetByName("約定履歴");

// 指定されたシートの1行目は見出し行とし、最新のデータを常に2行目に表示させたいので、1行目の後ろ(2行目)に空行を差し込む。
objSheet.insertRowAfter(1);

// 抽出した情報は A2 セルから書き込む。
objSheet.getRange("A2").setValue(time);
objSheet.getRange("B2").setValue(syubetu);
objSheet.getRange("C2").setValue(code);
objSheet.getRange("D2").setValue(kabusu);
objSheet.getRange("E2").setValue(price);

// Gメールで処理済みラベルを付ける処理
var LabelProceed = _createLabel("処理済みフラグ");
myThreads[threadIndex].addLabel(LabelProceed);
}
}

function _createLabel(labelString) {
labelDomain = GmailApp.getUserLabelByName(labelString);

// 指定されたラベルが無い場合は作る
if ( labelDomain == null ) {
labelDomain = GmailApp.createLabel(labelString);
}

return labelDomain;
}
ーーーーーーーーーここまでーーーーーーーーーーー

<上記プログラムの説明>
機能は上記プログラム内にコメントを適宜書いているので理解はしやすいかと思います。基本的な流れは、
①処理済みフラグがない検索条件に該当するメールを1件検索
②内容を抽出してスプレッドシートに一行追加
③処理したメールに処理済みフラグを付与
となります。上記プログラムを張り付けられれば、その画面の上部に実行ボタンがあるので、実際のスプレッドシートを見ながらうまく動いているか確認してください。その過程でセキュリティ警告等出るかと思いますが、OKを押して動作できるように設定してください。

画像7

上記プログラムを繰り返すことで処理が完了するので、後は自動で処理を繰りかえす設定をすれば完了です。その機能はAppsScriptでできるので以下手順を説明します。
コーディングした下図の画面で、左側のエディタの下の、時計の絵の「トリガー」をクリックします。次の画面の右下の「トリガーを追加」をクリック

画像5

画像9

次の画面で下図のように設定
※下図では1分おきにしていますが、もう少し間隔があいてもいい場合は適宜調整ください。


画像6

保存して完了です。あとは1分おきにスプレッドシート上で行が追加されているはずなのでご確認ください。処理がすべて完了すると、処理が途中で終了するようになって行追加がされなくなるかと思います。お疲れさまでした。


この記事が気に入ったらサポートをしてみませんか?