保有銘柄の適時開示情報をLINEに日々通知する

適時開示情報を毎度自分から見に行くのが面倒だったので、1日に1度LINEにまとめて通知するようにしてみました。こんな感じです。



仕組み

定時起動したGoogle Apps Script上のプログラムが、①Google Sheetsで管理しているポートフォリオから保有銘柄の証券コード一覧を取得し、②証券コードごとにTDnetに問い合わせて適時開示情報を取得し、③IFTTT経由で④LINEに通知しています。



適時開示情報閲覧サービス:TDnet には公式のWeb APIがないため、やのしんさんが運営してくれているAPIを利用しています。


もしこのAPIが廃止された場合は、自力でスクレイピングするか、速報性や情報の種類は変わってしまいますが、EDINETの公式APIに切り替える予定です。

動かしかた

1. Applet@IFTTT、 2. Google Apps Script  3. GAS起動トリガー の3つを作ります。

Applet@IFTTT作成

トリガーとしてWebhook、アクションとしてLINEを持つAppletを作ります。IFTTTの基本的な使い方はぐぐればたくさん出てくるので省略しますが、私の場合は次のようなAppletを作りました。送信された値を丸ごとLINEで通知する汎用のAppletです。



Webhookに送信するためのイベント名(上記ではnotify_to_me)とkeyは後で必要になるので控えておきます。keyは以下のDocumentのリンク先から確認できます。keyは個人ごとに払い出されているので、各自で確認します。


Google Apps Script

通知を受けたい銘柄の証券コード(4桁)のリストを記載したGoogle Sheetsを開き、メニューから [ツール] → [スクリプトエディタ] を選んで以下のコードを貼り付けます。冒頭の4つの変数は自分の環境にあわせて書き換えが必要なので、コメントを参照ください。なお、自分の環境でしか動かしていない&JavaScriptのコードも適当なので動かなかったらゴメンナサイ。

// 銘柄リストの記載されたシート名
var sheet_name = "xxxxxxx";
// 銘柄リストの範囲
var stock_list = "XXXX:XXXX";
// IFTTTのWebhookイベント名
var event_name = "notify_to_me";
// IFTTTのWebhook用キー名
var key = "xxxxxxxxxxxx";

function notifyFromTdnet() {
  var url = "https://webapi.yanoshin.jp/webapi/tdnet/list/today.json?limit=1500";
  var response = UrlFetchApp.fetch(url);
  var o = JSON.parse(response.getContentText());
  
  // Spreadsheetから保有銘柄をリスト化
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var stockList = Array.from(new Set(sheet.getRange(stock_list).getValues().map((cell) => cell[0]).filter((value) => value).map((v) => v + "0")));
  Logger.log(stockList);
  
  // 通知用結果オブジェクト
  var message = "";
  
  // 銘柄ごとにフィルタ
  for (var scode of stockList) {
    var doclist = o.items.filter((doc) => doc.Tdnet.company_code == scode);
    
    for (var doc of doclist) {
      message += "<div><h2>" + doc.Tdnet.company_name + ":" + doc.Tdnet.title + "</h2>" + doc.Tdnet.document_url.split("?")[1] + "</div>";
    }

    if (message.length > 0) {
      notifyMsgToLine(message);
      message = "";
    }
  }
}
      
function notifyMsgToLine(msg) {
  var payload  = { 
    "value1" : msg
  };
  
  var options = {
    "method"      : "post"                 ,
    "contentType" : "application/json"     ,
    "payload"     : JSON.stringify(payload),
  };

  // Webhook URL
  var url = "https://maker.ifttt.com/trigger/" + event_name + "/with/key/" + key; 
  UrlFetchApp.fetch(url, options);
}

変数を書き換え終わったら、スクリプトエディタ上で実行してLINEに通知されるか確認します。


GAS起動トリガー

動作確認ができたら毎日決まった時間に実行されるように設定します。スクリプトエディタの以下のボタンからトリガーというスクリプトを起動してくれるモノを追加できます。



右下のトリガー追加ボタンを押します。


毎日夜に実行されるようにトリガーを設定します。私は次のように設定してます。


これで、毎日夜にLINEに通知が届くようになります。実行するデプロイやエラー通知が気になる人は適当に変えてください。

ここまで書いておいてなんですが、たいていの証券会社では適時開示を通知する仕組みが用意されていますし、証券口座と連携してスマホやメールに通知するサービス(ロボフォリオ等)もあるので、これで満足できる人はそちらを使えばOKです。わざわざこんな仕組みを作ったのは、次のようなことがやりたかったからです。
  • スマホやタブレットだけでなく、PCにも通知したい
  • 通知対象を独自にメンテナンスしたくない、証券会社の保有銘柄や管理用のポートフォリオをもとに通知させたい
  • 揮発性のメッセージはメールボックスでなく、メッセンジャーに通知したい
在宅勤務だとほぼスマホ触りませんし、デスクでPCを見ていることが多いんですよね。それに、メールボックスがリンクだけのゴミのような通知であふれるのは我慢ならなかったので。

※ notify to...は微妙英語だと知りましたが、めんどくさいのでなおしてません…

コメント

  1. はじめまして
    今回設定させていただきましたが、

    返信削除
  2. 使い方がわからず、途中になってしまいました。
    申し訳ありません。
    今回、まったく同じように設定させていただきましたが、
    LINEで「value1」としか送られてきません。
    IFTTTの設定かなと思っていますが、どこがおかしいのかもわからず、相談させていただきたいです。
    あと先ほどのメッセも消す方法があれば、教えていただきたいです。

    返信削除

コメントを投稿

このブログの人気の投稿

3大家計・資産管理サービス Money Forward、Moneytree、Zaimの機能比較とおすすめの使い方

Raspberry pi+Homebridge+IRKitで自宅をスマート化し、Google Home/Android/HomeKitから操作する

Moneytree Web版の 全資産、資産、負債の謎が明らかに