この記事はAteam Brides Inc. Advent Calendar 2021 24日目の記事です。本日はエイチームブライズでエンジニアをしていた @kakakaori830 が記事を書きます。
はじめに
約1年前に職種が変わって?エンジニアではなくなった私ですが、アドベントカレンダーの季節になるとやはり何かものづくりをしたくなるものです。
何を作ろうかな〜と考えたわけですが、弊社にはしいたけ占いの信者が多数在籍しています。そんな彼らのために毎週月曜に占いの結果をSlackにお届けるすbotを作ることにしました。仕事でも使っているSlackに、占いの結果が届いたら便利ですよね!
作り方
GoogleAppScriptでライブラリを読み込む
今回はSlackとの接続部分と、スクレイピング部分でライブラリを利用します。自前で作らなくてもいいので便利便利!
ライブラリはここから追加します。
Slackとの連携に使うのは「SlackApp」というライブラリ。スクリプトIDの欄に
1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq
と入力して「検索」をクリック。IDのところが「SlackApp」になっていることを確認して「追加」を押したらライブラリの追加が完了。同じようにしてスクレイピングに使う「Parser」を追加していきます。スクリプトIDは
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw
これら二つのライブラリを追加したら準備完了。
Slack側でアプリ登録
Slackのアプリ作成ページを開いてアプリを作っていきます。まず「Create an App」をクリック。
「アプリ名(App Name)」と「利用するSlackワークスペース名(Pick a workspace to develop your app in:)」を入力し、「Create App」をクリックします。
これでアプリの作成は完了!簡単だー。
パーミッションの設定
さっき作ったアプリの権限を変えていきます。
左のメニューにある「OAuth & Permissons」を選択して、「Add an OAuth Scope」をクリック。
Slack botに必要な権限を追加していきます。botに最小限必要な権限はチャットへの書き込み権限「chat:write」です。「chat:write.public」はパブリックチャンネルに対して許可なく書き込める権限なので、これにしておくと作成したSlackAppをパブリックチャンネルに追加しなくても書き込みができるようになるので便利です。
botユーザーの追加
左のメニューから「App Home」を選択して、「App Display Name」で「Edit」をクリック。
「botの名前(Display Name)」と、「デフォルトのユーザー名(Default username)」を入力し、「Save」をクリックします。
botのインストール
左のメニューから「Install App」を選択して、「Install to Workspace」をクリックし、Slack botをワークスペースにインストールしていきます。
権限のリクエストが表示されるので、内容を確認して、「許可する」をクリックします。
画面が切り替わると「Bot User OAuth Token」が表示されるので、この文字列をコピーしておきます。これをGAS上に入力します。
GASにコードを記述していく
今回はライブラリを使うので実際に書くコードはかなり少ないです。これだけでしいたけ占いの結果を持ってきてSlackに投げられる。すごいですねー。
function myFunction() {
const constellations = [
"aries",
"taurus",
"gemini",
"cancer",
"leo",
"virgo",
"libra",
"scorpio",
"sagittarius",
"capricorn",
"aquarius",
"pisces"
];
const constellationsKana = [
"【おひつじ座】",
"【おうし座】",
"【ふたご座】",
"【かに座】",
"【しし座】",
"【おとめ座】",
"【てんびん座】",
"【さそり座】",
"【いて座】",
"【やぎ座】",
"【みずがめ座】",
"【うお座】"
];
const urlBase = "https://voguegirl.jp/horoscope/shiitake/";
const currentDate = new Date();
const today = currentDate.getFullYear() + toDoubleDigits(currentDate.getMonth() + 1) + toDoubleDigits(currentDate.getDate());
const token = "xoxb-hogehogehoge"; // ここにコピーしておいたトークンを記入
const slackApp = SlackApp.create(token);
const channelId = "#general";
// 星座ごとにデータを取得
constellations.forEach(function(constellation, key) {
var url = urlBase + constellation + "/" + today + "/";
var content = UrlFetchApp.fetch(url).getContentText("UTF8");
var resultText = Parser.data(content).from('<div class="a-text">').to('</div>').build();
var titleInfo = Parser.data(content).from('<div class="o-shiitake-detail__title-area">').to('<div class="a-illust-caption">').build();
var resultImage = Parser.data(titleInfo).from('data-src="').to('" alt').build();
let message = constellationsKana[key] + "のあなたは…\n\n" + resultText.trim()
slackApp.postMessage(channelId, message);
}) ;
}
/*
* 1桁の数字を2桁にする
*/
var toDoubleDigits = function(num) {
num += "";
if (num.length === 1) {
num = "0" + num;
}
return num;
};
定期実行の登録
ここまできたらあとはGASのスケジュールを登録して毎週月曜の好きな時間に動くようにすれば完了!
やってみた
はい、実行!
ジャーン!
無事にSlackの#generalにしいたけ占いの結果が送られてきました。
これで弊社のしいたけ占い好き社員も安心して働くことができるようになりそうです。
最後に
いかがでしたか?
GoogleAppScriptもSlackも色々な機能が用意されているので非常に簡単にさまざまなbotが作れそうです。本当に簡単にが実装できましたね。私自身、これを作るのは30分かからずできちゃいました!
皆さんもぜひ自分好みのbotを作ってみてくださいねー!!
Ateam Brides Inc. Advent Calendar 2021の最後は @kamatari1377 がなにか色々面白いことをしてくれるそうです。お楽しみに!