GOOGLEFINANCE関数を利用して、現在の為替レートをSlackに通知してくれるGoogle Apps Scriptです。張り付くほどじゃないけどレートが気になるときにどうぞ。
特にありません。GASの実行環境としてスプレッドシートを利用します。
Slackと連携するために、「Incoming Webhook」を使用します。
GASからSlackに投稿するための「入り口」を作ります。
詳しい手順はこちらをご確認ください。
https://myfunc.jp/items/00066/index.html
Webhook URLが発行されたら、「slack_webhook_url」にセットしてください。
スプレッドシートのURL、計算用シートの名前、通知してほしい通貨ペアなども入力します。
準備が終わったら関数「onOpen」を一度実行しておいてください。
事前設定が終わったら、動作確認のために手動で実行してみます。
スプレッドシートに戻って、上のメニューにある「スクリプト実行」から「現在の為替レートをSlackに通知する」を実行します。
Slackに通知が来れば成功です。
手動実行で問題なければ、トリガーをセットして自動的に通知されるようにしましょう。
毎分通知されるようにセットした例です。
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);
}
GASからSlackに投稿する時に使用する「Incoming Webhook」の設定方法について解説します。コピペで使える投稿用のサンプルコードもあります。
トリガーで実行されたスクリプトが失敗したときに送信されるエラー通知メールを、Slackに転送するGoogle Apps Scriptです。メールはトリガーの設定者にしか飛ばないため、他のメンバーに共有したいときにどうぞ。
Slackに投稿したメッセージをほぼリアルタイムにGoogle スプレッドシートにバックアップするGoogle Apps Scriptです。無償版Slackはデータの保存期間が90日に短縮されるので作ってみました。
Gmailに届いたメールから特定の件名のものをSlackに通知するGoogle Apps Scriptです。Slackが浸透するほどメールをあまり見なくなり、大事なメールを見逃すことが増えてきたので作りました。