2022/06/03に更新

【GASで自動化】現在の為替レートをSlackに通知する

SlackAPIスプレッドシート

GOOGLEFINANCE関数を利用して、現在の為替レートをSlackに通知してくれるGoogle Apps Scriptです。張り付くほどじゃないけどレートが気になるときにどうぞ。

こんな悩みを解決します


  • 為替レートが気になって仕方がない・・・けど会社のパソコンで見ていると怒られてしまう・・・自然な感じで見たい・・・
  • 毎日決まった時間に為替レートを知りたい

用意するもの


特にありません。GASの実行環境としてスプレッドシートを利用します。

このスクリプトで出来ること


  • GOOGLEFINANCE関数を利用して、現在の為替レートをSlackに通知することができます。
  • 対象の通貨は自由に指定できます。

使い方


1.事前準備

Slackと連携するために、「Incoming Webhook」を使用します。
GASからSlackに投稿するための「入り口」を作ります。
詳しい手順はこちらをご確認ください。

https://myfunc.jp/items/00066/index.html

Webhook URLが発行されたら、「slack_webhook_url」にセットしてください。

スプレッドシートのURL、計算用シートの名前、通知してほしい通貨ペアなども入力します。
準備が終わったら関数「onOpen」を一度実行しておいてください。

2.スクリプトの実行

事前設定が終わったら、動作確認のために手動で実行してみます。
スプレッドシートに戻って、上のメニューにある「スクリプト実行」から「現在の為替レートをSlackに通知する」を実行します。

3.結果の確認

Slackに通知が来れば成功です。

4.トリガーの設定

手動実行で問題なければ、トリガーをセットして自動的に通知されるようにしましょう。
毎分通知されるようにセットした例です。

  • 実行する関数: send_exchange_rate_to_slack
  • 実行するデプロイ: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 分ベースのタイマー
  • 時間の間隔: 1分おき

5.注意点

GOOGLEFINANCE関数の仕様として、20分(最大)の遅延があるようです。
無料サービスにありがちなディレイですが、ご注意ください。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00099/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('現在の為替レートをSlackに通知する', 'send_exchange_rate_to_slack');

  // メニューを画面に追加する
  menu.addToUi();
}

function send_exchange_rate_to_slack() {

  // ######### 事前設定ここから ########

  // SlackのWebhook URLを入力してください
  const slack_webhook_url = 'https://hooks.slack.com/services/******************';

  // このスクリプトを登録したスプレッドシートのURLを入力してください
  const ss_url = 'https://docs.google.com/spreadsheets/d/*******************';

  const sheet_name = '為替レート取得用';

  // 通貨の組み合わせ及びその名称を指定する配列
  const ticker = [];

  // 通知してほしいものを配列に追加します
  ticker.push(['USDJPY', 'ドル円']);
  ticker.push(['EURJPY', 'ユーロ円']);
  ticker.push(['GBPJPY', 'ポンド円']);
  ticker.push(['CNYJPY', '人民元円']);

  // ######### 事前設定ここまで ########


  // 為替レートを取得するため、スプレッドシートでGOOGLEFINANCE関数を実行する

  // セルにセットする関数を格納する配列
  const formulas = [];

  // 事前設定した通貨の組み合わせ1個ずつ処理していく
  for (let i = 0; i < ticker.length; i++) {

    // セルにセットする関数の組み立て
    let formula = '=GOOGLEFINANCE("' + ticker[i][0] + '")';

    // 関数を配列に追加
    formulas.push(formula);

  }

  // スプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.openByUrl(ss_url);

  // 事前に設定した名前のシートオブジェクトを取得
  const sheet = ss.getSheetByName(sheet_name);

  // セルにセットする関数の数だけ、範囲オブジェクトを取得する
  const range = sheet.getRange(1, 1, 1, formulas.length);

  // セル範囲に関数をセットする
  range.setFormulas([formulas]);

  // セルにセットしたGOOGLEFINANCE関数により為替レートが表示されているので、これを取得する
  const result = range.getValues();

  // Slackに送信するメッセージを格納する変数
  let message = [];

  // 取得した為替レートと表示名を連結し、1件ずつメッセージに追加していく
  for (let i = 0; i < result[0].length; i++) {
    message.push(ticker[i][1] + ' : ' + result[0][i]);
  }

  // メッセージを改行で連結し、Slack投稿用テキストとする
  const text = message.join('\n');

  // SlackのWebhook URLに投稿するデータをまとめる
  const json =
  {
    'username': '現在の為替レートをお知らせします',
    'icon_emoji': ':moneybag:',
    'text': text
  };

  // SlackのWebhook URLに送信するデータをJSONに変換する
  const payload = JSON.stringify(json);

  // UrlFetchAppで使用するメソッドやコンテントタイプを指定
  const options =
  {
    'method': 'post',
    'contentType': 'application/json',
    'payload': payload
  };

  // Slackに送信
  UrlFetchApp.fetch(slack_webhook_url, options);

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp