本記事で実現できること
問題意識:
投資家が日経平均をはじめとした金融情報を得るためには
ニュースサイト・証券会社・ホームページなどを能動的に見に行く必要があり、めんどくさい。
解決すること:
プログラムで市場からマーケット情報を自動的にスクレイピングし、Googleチャットに自動的に送信することによって投資家の手助けをするチャットを作成する。
本ツールはYahoo!ファイナンスおよびGoogleAppsScriptを使用して実現しています。
そのため、当該システムを利用して生じた不利益は一切責任を負いません。
下準備
マーケット情報(今回の場合は日経平均)を取得するためのスプレッドシートを作成する。
このようなスプレッドシートを作成するためにGoogleFinance関数を利用する。
引用:https://support.google.com/docs/answer/3093281?hl=ja
Googleスプレッドシートには現在や過去の証券情報を取得できる関数が整っていますので、上記関数を利用して下記のようなスプレッドシートを作成します。
A2~A5セルに記入してある関数を紹介しときます。
A2:
=GOOGLEFINANCE("NI225","closeyest")
A3:
=GOOGLEFINANCE("NI225")
A4:
=A3-A2
A5:
=GOOGLEFINANCE("NI225","priceopen")
A6:
=IMPORTXML("https://finance.yahoo.co.jp/","//*[@id=""headline""]/div/ul/li[1]/article/a/h2")
と記入してみましょう。
するとマーケット情報を抽出することができます。
ここで少しA6セルについて解説しておきます。
Xpathとは?
Xpathとはクローラーを作成するためにプログラム上からウェブサイトのパーツを指定する技術です。
なぜXpathが必要なのか?というと、
本記事では日経平均を自動通知するハングアウトの作成を目的としますが…
日経平均は毎日変動するので35,000円の日もあれば34,999円の日もあります。
しかしウェブサイト上で日経平均を記載してある場所・位置は変わりません。
A8セルではマーケット情報のコメントを抽出できています。
ここからハングアウトに投稿する仕組みを構築する
この背景としては業務時間内に業務と無関係なサイトを見ていると怒られてしまうので、あくまで文字情報として株価情報をハングアウトで名は仕込む。
function FinishMarket() {
// スプレッドシートのIDを設定
var spreadsheetId = '1QSzE4fJ1uKwcZTc47XD-YUX7mlJyUcWkv3YbNAXUvrI';
// スプレッドシートを開く
var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
// 最初のシートを取得
var sheet = spreadsheet.getSheets()[0];
//更新
SpreadsheetApp.flush();
var a2Value = sheet.getRange('A2').getDisplayValue();
// 本日終値を取得
var a3Value = sheet.getRange('A3').getDisplayValue();
// 前日比を取得
var a4Value = sheet.getRange('A4').getDisplayValue();
// 本日のハイライト
var a8Value = sheet.getRange('A8').getDisplayValue();
// 本日のまとめ
var a9Value = sheet.getRange('A9').getDisplayValue();
//結果登録
var result = "https://script.google.com/a/macros/mori.co.jp/s/AKfycbz74MuOgE1I5ZZIvWDKWvu5uxA8F3hf0JXfsm9CXO9-KEkYwW5t0GjJ-W8Is3gEUaIU/exec";
// 取得した値をログに出力
Logger.log('A2セルの値: ' + a2Value);
Logger.log('A3セルの値: ' + a3Value);
Logger.log('前日比: ' + a4Value);
//日経平均終値
var url = 'https://chat.googleapis.com/v1/spaces/AAQACsNebD0/messages?key=キー取得方法はあとで解説します';
var botMessage = { 'text' : '終値:'+a3Value+'\n前日終値:'+a2Value+'\n前日比:'+a4Value+'\n<'+a9Value+'|本日のハイライト>\n<'+result+'|いい日だったらクリック>'}
var options = {
'method': 'POST',
'headers' : {
'Content-Type': 'application/json; charset=UTF-8'
},
'payload':JSON.stringify(botMessage)
};
var result = UrlFetchApp.fetch(url, options);
Logger.log(result);
}
このコードで最初に記載したような自動投稿が可能である。
定期的に投稿したい
株価は当然市場が開いている毎日通知してほしいので…
左カラムの「時計マーク」を押してトリガー作成をしましょう。
これで平日・午後16時から17時の間に毎日ハングアウトを送信してくれます。
時間を設定したのに、時間がずれ込んでしまう人は?
上の画像では「午後4時から5時の間に送信」の設定をしていますが、
序期の時間帯以外にプログラムが起動してしまうことがあります。
プログラムのタイムゾーンを設定することが大事
作成したプログラムが日本時間で動作することを明示するには…
サイドバー歯車マークからこのプログラムは日本標準時で動かしていることを明示してあげてください。
でないと15:00にプログラムの自動起動設定をしてもアメリカ標準時が基準で設定されていたりします。
Googleは日本の会社ではなくアメリカの会社なので、初期設定はアメリカ時間です。
ハングアウトに送信するWEBHOOKの取得方法
この手順でWEBHOOKのURLを取得しましょう。
WEBHOOKがわからない人は下記記事を参考にしてみましょう。