現在の株価をスクレイピングしてSlackへ投稿してみました。
ちなみに「Yahooファイナンス」等の株価のサービスはスクレイピング禁止されています。
今回は仮想の株価サイト(example.com)を想定してスクレイピングしています。
目次
SlackのWebhookのURLを取得
Slackへ投稿するために事前に取得しておきましょう。
ttps://hooks.slack.com/services/****
SlackのWebhook URL取得手順 – Qiita
SlackのWebhook URLを取得するまでの手順を示す。最終的にやりたいことChatにWebサービスの結果を通知するChatOps的なことをしたい。通知先のChatツールとしてSlack…
GASの作成
Google Apps Scriptを開きます。
Parserライブラリの追加
リソース>ライブラリから下記のコードを追加して、スクレイピング用のライブラリを追加しておきます。
M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV
スクレイピング用のコードを作成
下記のコードを挿入します。
今回は仮想の株価サイト(example.com)のURLを使用しています。
function doGet() {
var Num1 = "7974"
var Num2 = "6758"
var stockName1 = stockName(Num1);
var stockName2 = stockName(Num2);
var stockPrice1 = stockPrice(Num1);
var stockPrice2 = stockPrice(Num2);
var payload = {
"text": "現在の株価です。\n"
+ stockName1 +" "+ stockPrice1 + "\n"
+ stockName2 +" "+ stockPrice2,
"channel": "#analytics",
"username": "Uncle Stock",
"icon_emoji": ":neckbeard:"
}
var options = {
"method": "POST",
"payload": JSON.stringify(payload)
}
var url = "https://hooks.slack.com/services/**********************************";//SlackのWebhook URL
var response = UrlFetchApp.fetch(url, options);
var content = response.getContentText("UTF-8");
}
//社名
function stockName(code) {
var url = 'https://example.com/stock/?code=' + code;
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
var data = Parser.data(html).from('<h1 id="kobetsu">').to(' 基本情報</h1>').build();
return data;
}
//株価
function stockPrice(code) {
var url = 'https://example.com/stock/?code=' + code;
var response = UrlFetchApp.fetch(url);
var html = response.getContentText('UTF-8');
var data = Parser.data(html).from('<span class="kabuka">').to('</span>').build();
return data;
}
サンプルとして2社の銘柄コードとSlackのWebhook URLを記入しています。
以上です!
[補足]スクレイピングのやり方
- サイトにアクセスしたら、ソースコードを開きます。
- 取得したい値の前後のタグ控えて、下記のように記述すれば値が取得できます。
Parser.data(html).from('<h1 id="kobetsu">').to(' 基本情報</h1>').build();
[おまけ]トリガーの設定
あとは下記の関数をトリガーに入れておくと決まった時間にSlackにポストされるようになります。
function SetTrigger1() {
var triggerDay = new Date();
triggerDay.setHours(9);
triggerDay.setMinutes(00);
ScriptApp.newTrigger("doGet").timeBased().at(triggerDay).create();
}
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "doGet") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
まとめ
ライブラリ使うとスクレイピング簡単ですし、投稿もSlackを使うとこれまた簡単なので、スクレイピング覚えておくと情報あつめやすくて便利です。
ちなみに前回は天気を取得してみています。
Slack│今日の天気と気温を投稿する方法│GAS
Slackへ情報の一元化を取り組み中。今回は天気と気温。 【引用先】 【GAS】気象庁のサイトから今日の天気を取得してSlackへ流す 【注意点】 夜に作業すると今日の気温が…