かずきち。の日記

サーバサイドエンジニアのつぶやき

【ソースあり】為替続伸・続落通知をLINEで自動アラートしてしまおう!【GAS×LINE】

前回までの続き

kazukichi0914.hatenablog.com
引用:
https://kazukichi0914.hatenablog.com/entry/2021/05/28/200000

GASを使ってドル円の為替を自動でスプレッドシートに自動更新するところまではできました。
シートに自動で書き込まれるのでチャートの自動生成などをしてくれて便利です。
ただ問題は、スプレッドシートの更新を「人間がずっと見ているのか?」という疑問です。
人間がずっと

f:id:kazukichi_0914:20210529182402j:plain

こんなチャートを見るのははっきり言って死にます。
そんな暇じゃないので、条件を満たしたときにLINE Notifyで自動通知してくれたらいいですよね。

LINE Notify「為替のチャートに変動がありますよ」

と自動で通知をしてくれれば非常に楽です。

なので、今回はトリガーを設置して自分のLINEに為替の速報を自動で飛ばしましょう

まず下準備としてGASからLINEを操作するためのトークンを取得します。

notify-bot.line.me

f:id:kazukichi_0914:20210529184921g:plain

ここにアクセスするとアクセストークンと呼ばれるプログラム上からLINEを叩くためのキーを発行してもらえます。
人間がLINEを送るのはできるけれど、プログラム上からLINEのメッセージを送るのにはトークン・APIキー・アクセスキー・アクセスキーシークレットのように秘密の合言葉が必要なのです。

f:id:kazukichi_0914:20210529185257g:plain

モザイクがかかっていますが、プログラムからLINEを司るための魔法の合言葉をいただきます。
後で使うのでメモをしておいてください。

トークンが発行できたら、コードを書いてしまいましょう。

script.google.com
引用:
https://script.google.com/

function getUSDJPY() {
//1. Webページのソースを取得する。
var response = UrlFetchApp.fetch("https://info.finance.yahoo.co.jp/fx/detail/?code=USDJPY=FX");
var html = response.getContentText();
//2.

タグの位置を探す。
var tag = 'USDJPY_detail_bid">';
var index = html.indexOf(tag);
usdjpy = '';
if (index !== -1) {
//3. ソースの文字列の先頭〜2のタグ位置までを削除。
var html = html.substring(index + tag.length);
var index = html.indexOf('
');
if (index !== -1) {
//4. タグの位置を探す。
html = html.substring(0, index);
//6. を削除
html = html.replace('','')
//7.
を削除
usdjpy = html.replace('
','')
}
}

Logger.log(usdjpy);

//スプレッドシートに書き込む
var id = "1nk5S5bGdbohvN-tNqI1_nhFgTE1G-Q0GqdgmXnaH5_o"
var ss = SpreadsheetApp.openById(id)
var sheet = ss.getSheetByName("為替")

const FValues = sheet.getRange('A:A').getValues();  //A列の値を全て取得
var lastrow = FValues.filter(String).length;  //空白の要素を除いた長さを取得
Logger.log(lastrow);

var lastrow2 =lastrow+1;
Logger.log(lastrow2);

sheet.getRange("B"+lastrow2).setValue(usdjpy)

//現在時刻習得
var date = new Date();
// 今日の日付を表示
Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss'));
var realtime = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss');
sheet.getRange("A"+lastrow2).setValue(realtime);

//指定するセルの範囲(Bの最終行)を取得
var range2 = sheet.getRange("B"+lastrow);
//値を取得する
var value2 = range2.getValue();

//ログに出力
Logger.log(value2);

//傾き入力
sheet.getRange("C"+lastrow2).setValue(usdjpy-value2);

//何連騰かを入力
if(sheet.getRange("C"+lastrow).getValue() > 0){
if(sheet.getRange("C"+(lastrow2)).getValue() > 0){
sheet.getRange("D"+lastrow2).setValue("続騰");
var continuous = range2.getValue();
//連投記入
sheet.getRange("E"+lastrow2).setValue(sheet.getRange("E"+lastrow).getValue() + 1);
//連騰削除
sheet.getRange("E"+lastrow).setValue("");
}
}

//何連落かを入力
if(sheet.getRange("C"+lastrow).getValue() < 0){
if(sheet.getRange("C"+(lastrow2)).getValue() < 0){
sheet.getRange("D"+lastrow2).setValue("続落");
//連落記入
sheet.getRange("E"+lastrow2).setValue(sheet.getRange("E"+lastrow).getValue() - 1);
//連落削除
sheet.getRange("E"+lastrow).setValue("");
}
}

Logger.log(sheet.getRange("C"+lastrow).getValue() );

let messageText = `【為替速報中】予測値\nhttps://docs.google.com/spreadsheets/d/1nk5S5bGdbohvN-tNqI1_nhFgTE1G-Q0GqdgmXnaH5_o/edit#gid=0\nを確認してください`

// LINEから取得したトーク
let token = "ここにさっき取得したアクセストークンを書く"
let options = {
"method" : "post",
"headers" : {
"Authorization" : "Bearer "+ token
},
"payload" : {
"message" : messageText
}
}

let url = "https://notify-api.line.me/api/notify"
if(sheet.getRange("C"+lastrow).getValue() !== ""){
UrlFetchApp.fetch(url, options)
}
}

をしたら完成です。
今回は「何」続伸・「何」続落かをLINEに通知するプログラムを書いてみました。

f:id:kazukichi_0914:20210529185926p:plain

f:id:kazukichi_0914:20210529213858j:plain

f:id:kazukichi_0914:20210601142100j:plain

為替のチャートに変動などがある場合や、売買チャンスのときに自動でLINEに通知をしてくれるわけですね。
これでもチャートを常に眺めるなんてことはしなくて済むわけです。
チャートが何続伸・続落情報も通知するようにしてみました。

最後にトリガー設定

f:id:kazukichi_0914:20210529190223g:plain

最初は1分おきに設定していたんですが、続伸続落中の時は継続通知するのでスパムなんじゃないか?というくらい通知がくるので
10~30分に1回の通知にしました。
これで値動きが激しい時はLINE notifyに自動通知する仕組みを作ってみました。

詰みポイントはGASからのLINE送信

ただでさえプログラムベースでLINEを送るのは詰みますが、今回はGASからLINEを送信するところをメインに解説しました。
応用法としては洗剤の替え冷蔵庫の牛乳が不足したら、家族のグループLINEに自動通知するなんてものが作れます。
私はただただ為替の続騰・続落率をチェックしたかったのでさくっと作ってみました。

GASから自動でLINE notifyに通知します 定型業務を自動化してLINEへの通知の自動を行います。

GASからLINE Notifyに通知を行ってみたいという方向けに上記にてサポートも行っています。
アラートメッセージをGASでLINE notifyに自動投稿するプログラムを作成します。
雨が降りそうだったら、LINEに通知。 為替のチャートが特定の条件を満たしたら通知などのプログラムを作ります。