【LINE BOT】Messaging APIで天気予報通知を作ろう

API

はじめに

こんにちは、イエノカドです。

今回は以下の3つのアプリケーションを利用して

簡易的な天気予報通知アプリを作りたいと思います。

・LINE – Messaging API
https://developers.line.me/ja/services/messaging-api/

・Google Apps Script(GAS)
https://developers.google.com/apps-script/

・OpenWeatherMap – Weather API
https://openweathermap.org

LINE BOT(Messaging API)とは

オフィシャルの開発ドキュメントを読みます。
https://developers.line.biz/ja/docs/messaging-api/overview/#what-you-can-do

LINE BOTの開発工程

【STEP1】LINE Developers アカウントを作ろう

LINE Business ID

上記から個人のLINEアカウントでログインし、

ログインできたら「LINE公式アカウントの作成する」ボタンをクリックで

指示にそって登録する。

LINE公式アカウントの作成が完了すると、以下のような画面がでて、

【STEP2】Messaging APIのチャネルを作ろう

作成したLINE公式アカウントが個人のLINEアカウントに友達追加されると思います。

上記の「LINE Official Account Managerへ」ボタンをクリックします。

上記画面から「チャット」タブをクリックします。

「応答モード設定に移動」をクリックします。

「Messaging APIを利用するには、こちらから設定できます。」と記載されているリンクをクリックします。

「Messaging APIを利用する」ボタンをクリックします。

上記画像のようなウィンドウが表示されますので、

「名前」「メールアドレス」を入力して、「同意する」ボタンをクリックします。

「プロバイダー名」を適当に入力して、「同意する」ボタンをクリックします。

「プライバシーポリシー」「利用規約」の項目は任意のため、未入力で、

「OK」ボタンをクリックします。

その後、確認画面を経て作成を完了させてください。

完了したら、「Channel ID」「Channel secret」の項目が表示されます。

今回はこれを利用しないですが、使う場面もあります。

どこかに公開等するのはよくないと思います。

【STEP3】LINE Developersアカウントで必要情報を確認する

LINE Developers

こちらから先ほど作成したチャンネルを選択します。

チャンネル選択したら、まず表示言語が
「English」になっている場合は、「日本語」にします。
(英語がわかる方はそのままで良いと思います。)

そして「チャンネル基本設定」タブを選択します。

少し下に「あなたのユーザーID」という項目があります。(後で利用します。)

次は、「Messaging API設定」タブをクリックします。

一番下に上記画像のように「チャネルアクセストークン」があると思います。
(こちらも後で利用します。)

確認は以上になります。

後ほど、実行するスクリプト作成で利用します。

【STEP4】OpenWeatherMapで天気情報取得APIを利用できるようにする

無料天気予報APIのOpenWeatherMapを使ってみる - Qiita
はじめに プログラムから天気予報をとるために、無料で開発者用APIを提供しているOpenWeatherMapを使ってみました。 概要 OpenWeatherMapはAPIだけのサービスというわけではなくGUIでも天気を取得...

こちらを参考にアカウントの作成して、API KEYの確認を行います。

実行するAPI(天気情報取得API)は以下になります。

https://api.openweathermap.org/data/2.5/weather?q={city name},{state code},{country code}&appid={ apikey }

【STEP5】Google Apps Script でAPIを作ろう

Apps Script – Google Apps Script

こちらから新しいスクリプトを作成していきます。

以下のコードをGoogle Apps Script内のエディタにコピペしてください。

{ LINE_ACCESS_TOKEN } の部分は LINEの「チャネルアクセストークン」に変換します。
{ LINE_USER_ID } の部分はLINEの「あなたのユーザーID」に変換します。
{ WEATHER_APP_ID }の部分はOpenWeatherMapで取得した「API KEY」に変換します。

天気予報の情報を知りたい地域を変える場合、
LATに緯度、LONに経度の数値を入れてください。

// LINE Message API チャネルアクセストークン
const LINE_ACCESS_TOKEN = { LINE_ACCESS_TOKEN };
//ユーザーIDを指定
const LINE_USER_ID = { LINE_USER_ID };
// 通知用のLINE API
const PUSH_API = "https://api.line.me/v2/bot/message/push";

const WEATHER_APP_ID = { WEATHER_APP_ID };
const LAT = 0;
const LON = 0;
// 天気予報情報取得API;
const WEWATHER_API = `https://api.openweathermap.org/data/2.5/onecall?lat=${LAT}&lon=${LON}&units=metric&lang=ja&appid=${WEATHER_APP_ID}`

/** 
 * push
 * botからメッセージを送る
 */
function doPost() {

  const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');

  // リクエストヘッダ
  const headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    "Authorization" : "Bearer " + LINE_ACCESS_TOKEN
  };
  // メッセージ
  let weatherInfo = getWeather();
  const postData = {
    "to" : LINE_USER_ID, 
    "messages" : [
      {
        "type" : "text",
        "text" : `時刻: ${ weatherInfo.datetime }, 天気: ${ weatherInfo.weather }, 気温: ${ weatherInfo.temp }, 湿度: ${ weatherInfo.humidity }`
      }
    ]
  };

  // POSTオプション作成
  const options = {
    "method" : "POST",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };
  return UrlFetchApp.fetch(PUSH_API, options);
}


function unixtimeToDatetime(unixtime) {
  const date = new Date(unixtime * 1000);
  return Utilities.formatDate(date, 'Asia/Tokyo', 'YY/MM/dd HH:mm');
}

function getWeather() {
  // @ts-ignore
  let res = JSON.parse(UrlFetchApp.fetch(WEWATHER_API));
  let current = res.current;

  let unixtime = unixtimeToDatetime(Number(current.dt));

  weatherInfo = {
    "datetime": unixtime,
    "weather": current.weather[0].description,
    "icon": current.weather[0].icon,
    "temp": Math.round(current.temp),
    "humidity": current.humidity
  };
  return weatherInfo;
}

上記スクリプトをGoogle Apps Scriptに入力してデプロイしてください。

あとは時計アイコンメニューのGoogle Apps Scriptを実行するトリガーを設定します。

トリガーを追加する際に、1日単位であれば、以下のように設定します。

トリガーは時間単位など色々設定できるのでお好みで設定になります。

実行結果はこうなります。

うまくいきました。

以上で完成になります。

メッセージの内容をもっとリッチな感じにしたい場合は工夫が必要そうですね。

メッセージを送信する
LINE Developersサイトは開発者向けのポータルサイトです。LINEのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

参考

https://developers.line.biz/
LINE Developersサイトは開発者向けのポータルサイトです。LINEのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。
GAS(Google Apps Script)× LINE Bot(Messaging API)で、何かの値を定期的にLINEに送ってみる - Qiita
1.はじめに 前回は、「GAS(Google Apps Script)で定期的に値を記録」のプログラムを作ってみましたが、今回は取得した値を定期的にLINEで配信するというBotを作ってみます。 前回の2章「2.Googleス...
GAS(Google Apps Script)× LINE Bot(Messaging API)で、何かの値を定期的にLINEに送ってみる - Qiita
1.はじめに 前回は、「GAS(Google Apps Script)で定期的に値を記録」のプログラムを作ってみましたが、今回は取得した値を定期的にLINEで配信するというBotを作ってみます。 前回の2章「2.Googleス...
spider-man-tm/line-bot-weather-forecast
定期的に天気予報を知らせてくれるLINE Bot. Contribute to spider-man-tm/line-bot-weather-forecast development by creating an account on GitHub.

LINE BOTを作ろう! Messaging APIを使ったチャットボットの基礎と利用例

最後に

結構手間はかかりますが、

身近に存在するものでプログラミングができちゃうので

感動は大きいかと思います。

こういうポートフォリオもインパクトがあって面白いので、

ぜひチャレンジしてみてもいいかもしれません。

では、またお会いしましょう。

合わせて読みたい

コメント

タイトルとURLをコピーしました