スクレイピング
GoogleAppsScript
Slack

Slackから,GAS経由でスクレイピングして,株価を取得

Slackから,Yahoo!ファイナンスをスクレイピングするGASを呼び出し,最新株価を取得する方法をメモ

Slack

OutgoingWebhookを設定.
たとえば自分は,stockをトリガーワードにして,「stock 銘柄コード」と入力すると,その銘柄の名前・最新株価・前日比を取得する機能を実装した.

GAS

doPostでOutgoingWebhookのHTTP POSTを受け取って,
株価スクレイピングをするfunction stockPrice(code)を実行する.
Slackとの連携には以下記事のライブラリを利用した
https://qiita.com/soundTricker/items/43267609a870fc9c7453

function doPost(e)

//=======================================================
// doPost: Slack-GASのGateway
//=======================================================
function doPost(e) {
  var verify_token ="TOKEN"; //outgoing-webhooks
  var contents=e.postData.contents;

  var channelID = "#"+e.parameter.channel_name;
  var word = e.parameter.trigger_word;
  var message = "";
  // Token確認
  if (verify_token != e.parameter.token || e.parameter.user_name=="slackbot") {
    throw new Error("invalid token.");
  }

  // <<< stock >>>
  if (word == "stock") {
    var text = e.parameter.text.substr(6); //[stock ][text]
    if (text == "info") {
      stockInfo();
      message = "I sent you a list of stock."
                            + "\n"
    } else {
      stockPrice(text);
      message = addChannelToMessage(e,message,"#asset_management");
    }
  } 

  // post Message
  if (e.parameter.channel_name=="test_outbound") {
    var message = "Hi, @" + e.parameter.user_name + " -san"
                + "\n"
                + message
    return postMessage(channelID, message)
  }
}

function stockPrice(code)

//=======================================================
// 株価スクレイピング:
//=======================================================
function stockPrice (code) {
  var url = 'https://stocks.finance.yahoo.co.jp/stocks/detail/?code=' + code;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');

  // stock name
  var sTag = 'h1>';
  var eTag = '</h1>';
  stock_name = scraping(sTag,eTag,html);

  // stock price
  var sTag = 'td class="stoksPrice">';
  var eTag = '</td>';
  stock_price = scraping(sTag,eTag,html);

  // Change from yesterday
  var sTag = 'span class="icoDownRed yjMSt">';
  var eTag = '</span>';
  change = scraping(sTag,eTag,html);
  if (change) {
    change = change;
  } else {
    sTag = 'span class="icoUpGreen yjMSt">';
    change = scraping(sTag,eTag,html);
  }
  // PostMessage
  postMessage("#asset_management",stock_name+"["+code+"]: "+stock_price+"\nChange from yesterday: "+change);
}

最後に

GASからスクレイピングしてSlackで情報取得が出来ると,情報取得にはかなり便利.
ほかにも色々と応用していきたい