読者です 読者をやめる 読者になる 読者になる

Monthly Hacker's Blog

毎月のテーマに沿ったプログラミング記事を中心に書きます。

IFTTTとZapierとmyThingsを用いてslackに天気予報botを作成した

bot

はじめに

どうもこんにちは。研究室のしがないB4生です。
7月のMonthly Hackのテーマは「Bot」。ということで、アプリケーション連携サービスを使用して、slackに天気予報を流してくれるbotを作成することにしました。

使用するサービスは以下の3つです。

IFTTT
ifttt.com


Zapier
zapier.com

myThings
mythings.yahoo.co.jp


この記事では、それぞれのサービスにおいてslackの天気予報botを作成します。

なお、それぞれのサービスを使用するにあたり、以下のサイトを参考にさせて頂きました。
【Slack】IFTTT vs Zapier vs myThings - 0239

どのような天気予報botを作成するか

今回作成する天気予報botは、「毎朝一回、今日の東京の天気予報を、slackのとあるチャンネル内で流すbot」とします。

IFTTT

IFTTT(イフト)は、アプリケーション連結のツールとして最も有名なサービスです。すべてのコンテンツが無料で利用でき、Private ChannelやDirect Messageにもbotを入れることができます

早速IFTTTのアカウントを作成しましょう。こちらからメールアドレスとパスワードを打ち込むことで、すぐに登録ができます。
登録後は、「My Recipes」から「Create a Recipe」をクリックしましょう。「レシピ」とは、IFTTTにおける連携サービスの事です。
すると、まず下のような画面が表示されます。

ここで、Trigger Channel(botを作動させるための引き金となるアプリケーション)を指定します。今回は天気予報「Weather」というチャンネルを選択します。ここで、「Weather」との連携を要求されます。その際に、どこの地点の天気予報を取得したいのかを指定します。
続いて、Triggerを選択するよう促されるので、「Today's weather report」を選択します。これで、今日の天気を流すように指定されました。さらに、botが予報を流す時間をお好みで指定します。

すると、下のような画面になります。

ここではAction Channel(botを起動させるアプリケーション)を指定しますので、slackを選択してください。slackの認証を要求されるので、チームを指定し、認証をします。
続いて、Action(何をするか)を指定するので、「Post to channel」を選択します。すると、以下の画面になります。

ここで、「Which channel」の項は、自分が天気予報を投下したいchannelまたはDirect Messageを選んでください。Private channelも、自身が入っているものに限り選択できます
他の項は図のように指定すればよいでしょう。デフォルトの表記が華氏温度なので、摂氏温度に変えるようにしてください。
最後にレシピのタイトルを指定して、終了です。
出力結果は以下のようになります。

天気のアイコンがついているので、わかりやすいですね。日本語表記が存在しないのは、海外のサービスなので仕方ないといったところ。
また、このIFTTTの天気予報、アメリカのThe Weather Channelの情報を用いています。そのため、日本における精度はあまり良くないのが難点です。

Zapier

Zapier(ザピエル)は、IFTTTと並んで有名なアプリケーション連結ツールです。基本的な機能はIFTTTと同様です。料金体系はFree Planを含む五種類のPLANがあります。Free Planでは、アクティブにできる連携サービス(Zapierにおいては「zap」という)の数が5個までなどの制限があります。しかし、アカウント登録後2週間は、「zap」の数が無制限で利用できます。こちらのサービスでも、Private ChannelやDirect Messageにbotを入れることができます。

早速アカウントを作成してみましょう。こちらから、名前、メールアドレス及びパスワードを打ち込むことで、登録することができます。
登録後は、画面上部の「MAKE A ZAP!」をクリックしましょう。
すると、下のような画面が表示されます。

先ほどと同様、Trigger App(botを作動させるための引き金となるアプリケーション)を指定します。ここでは、「Weather by Zapier」というAppを選択します。
続いて、Triggerを選択するよう促されるので、「Today's Forecast」を選択します。すると、以下の画面が表示されます。

上から「緯度」「経度」「気温の単位」*1です。緯度と経度は、「here」のリンクから、自分の好みの地点を知ることができます。「気温の単位」は、「Celsius」を選びましょう。

すると、下のような画面になります。

ここではAction App(botを起動させるアプリケーション)を指定しますので、slackを選択してください。slackの認証を要求されるので、チームを指定し、認証をします。
続いて、Action(何をするか)を指定するので、

・通常のChannelに投稿したい場合:「Send Channel Message」
・Direct Messageに投稿したい場合:「Send Direct Message」
・Private Channelに投稿したい場合:「Send Private Channel Message」

を選択します。slackの認証を求められるので、認証します。
以下の画面に移ります(Private Channelの例)。

ここで、最も上の項目は、自分が天気予報を投下したいchannelまたはDirect Messageを指定します。

・通常のChannel:プルダウンから選択
・Direct Message:相手のユーザーネームから選択
・Private Channel:チャンネルの名前を打ち込む(「#」をつけてはいけません

「Message Text」は図のように指定すればよいでしょう。
最後にレシピのタイトルを指定して、終了です。
出力結果は以下のようになります。

Zapierも英語表記のメッセージです。IFTTTと比較した場合、アイコンがないのが欠点ですね。
最も不自由な点として、「Weather by Zapier」は、botの動く時間が午前7:00に限定されています。また、あらかじめ、アカウントの「Settings」の「Set your timezone」で、場所を東京に指定する必要があります。これを怠った場合、午後4:00に天気予報が投稿されることになります。

myThings

myThingsは、Yahoo!の提供するスマートフォン専用の無料アプリケーションです。Private ChannelやDirect Messageには対応していません。日本語であるがゆえに、連携の設定も前述した2つのサービスより容易でした。

早速アプリをダウンロードしましょう。連携を作成するにはにはYahoo!JAPAN IDが必要です。
最初の画面は図のようになります(使用デバイス:iPhone6)。

右上の+ボタンを押すと、連携(myThingsでは「組み合わせ」と呼ぶ)の作成が始まります。まずはトリガーを指定します。

チャンネル選択画面で

チャンネル「天気」を選択します。myThingsならではの、Yahoo!天気の情報です。
「トリガーの選択」では、「今日の天気予報」を選択します。
また、地域ですが、市単位まで指定できます。東京などは区まで指定できます。今回は東京都港区を指定しました。

続いて、アクションを指定します。

チャンネルはslackを選択します。このとき、認証が必要となります。
「アクションの選択」では、「特定のチャンネルに投稿する」を選択します。
その後の「チャットチャンネル」では、投稿したいChannelと、メッセージを入力します。下図のように入力すればよいでしょう。


最後に、実行の時間と、組み合わせの名前を決めて完了です。

出力結果は以下のようになります。


日本語の出力結果でわかりやすいですね。また、リンク先から3時間ごとの天気を見ることができます。
しかし(隠しているのでわかりにくいですが)、自分のユーザーアカウントからbotが投稿される仕様になってしまっています。このような事態を避けたいならば、あらかじめbot用のアカウントを作る必要があります。

まとめ

3種類のサービスを用いたところ、Yahoo!天気の信頼性と、日本語のわかりやすさを買って、現在はmyThingsによる連携のみをアクティブにしています。Zapierはトリガーの条件を細かく指定したり、コンテンツの量が多かったりと、良い点が多かったのですが、天気予報botにおいてはそれほど有効に働かせにくかったですね。IFTTTはアイコンがわかりやすいという大きなメリットがありましたが、なによりも天気予報の精度が低いのがネックでした。

おまけ(twitterとslackの連携)

Zapierを用いて、twitterの公式アカウント「Yahoo!天気・災害」(@Yahoo_weather)が毎朝つぶやく、「#東京の天気」というハッシュタグがついたツイートを取得してSlackに流してみました。過程は割愛しますが、「twitterアカウント」「ハッシュタグ」の二つの条件を満たしたツイートをslackに自動投稿するという内容です。
出力は以下のようになりました。

詳しい数値はリンクをたどらないと見えません。そのうえ、このアカウントが「#東京の天気」というハッシュタグをつけ忘れることが往々にして起こり、当然その場合はslackに自動投稿されませんでした。

*1:最近、Zapierにおいても摂氏/華氏の指定ができるようになりました。