前回までの続き
kazukichi0914.hatenablog.com
引用:
https://kazukichi0914.hatenablog.com/entry/2021/05/28/200000
GASを使ってドル円の為替を自動でスプレッドシートに自動更新するところまではできました。
シートに自動で書き込まれるのでチャートの自動生成などをしてくれて便利です。
ただ問題は、スプレッドシートの更新を「人間がずっと見ているのか?」という疑問です。
人間がずっと
こんなチャートを見るのははっきり言って死にます。
そんな暇じゃないので、条件を満たしたときにLINE Notifyで自動通知してくれたらいいですよね。
LINE Notify「為替のチャートに変動がありますよ」
と自動で通知をしてくれれば非常に楽です。
なので、今回はトリガーを設置して自分のLINEに為替の速報を自動で飛ばしましょう
まず下準備としてGASからLINEを操作するためのトークンを取得します。
ここにアクセスするとアクセストークンと呼ばれるプログラム上からLINEを叩くためのキーを発行してもらえます。
人間がLINEを送るのはできるけれど、プログラム上からLINEのメッセージを送るのにはトークン・APIキー・アクセスキー・アクセスキーシークレットのように秘密の合言葉が必要なのです。
モザイクがかかっていますが、プログラムから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に通知するプログラムを書いてみました。
為替のチャートに変動などがある場合や、売買チャンスのときに自動でLINEに通知をしてくれるわけですね。
これでもチャートを常に眺めるなんてことはしなくて済むわけです。
チャートが何続伸・続落情報も通知するようにしてみました。
最後にトリガー設定
最初は1分おきに設定していたんですが、続伸続落中の時は継続通知するのでスパムなんじゃないか?というくらい通知がくるので
10~30分に1回の通知にしました。
これで値動きが激しい時はLINE notifyに自動通知する仕組みを作ってみました。
詰みポイントはGASからのLINE送信
ただでさえプログラムベースでLINEを送るのは詰みますが、今回はGASからLINEを送信するところをメインに解説しました。
応用法としては洗剤の替え冷蔵庫の牛乳が不足したら、家族のグループLINEに自動通知するなんてものが作れます。
私はただただ為替の続騰・続落率をチェックしたかったのでさくっと作ってみました。
GASから自動でLINE notifyに通知します 定型業務を自動化してLINEへの通知の自動を行います。
GASからLINE Notifyに通知を行ってみたいという方向けに上記にてサポートも行っています。
アラートメッセージをGASでLINE notifyに自動投稿するプログラムを作成します。
雨が降りそうだったら、LINEに通知。 為替のチャートが特定の条件を満たしたら通知などのプログラムを作ります。