メニュー
\ 最大15%ポイントアップ! /

Slack│株価をスクレイピングして投稿する方法 │Google Apps Script

現在の株価をスクレイピングしてSlackへ投稿してみました。

ちなみに「Yahooファイナンス」等の株価のサービスはスクレイピング禁止されています。

今回は仮想の株価サイト(example.com)を想定してスクレイピングしています。

目次

SlackのWebhookのURLを取得

Slackへ投稿するために事前に取得しておきましょう。

ttps://hooks.slack.com/services/****

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を記入しています。

以上です!

[補足]スクレイピングのやり方

  1. サイトにアクセスしたら、ソースコードを開きます。
  2. 取得したい値の前後のタグ控えて、下記のように記述すれば値が取得できます。

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を使うとこれまた簡単なので、スクレイピング覚えておくと情報あつめやすくて便利です。

ちなみに前回は天気を取得してみています。

  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

すいみんのアバター すいみん CGデザイナー・テクニカルアーティスト

技術的なことが好きなフリーランスのデザイナー。
ブログが好きで月間20万PVの技術ブログを運営。
書籍のお仕事もしています。
・「Unity デザイナーズ・バイブル」
・「Unityゲーム プログラミング・バイブル 2nd Generation」
ご依頼はこちらから!

この記事も読まれてます

目次