フレイヤの日記

とあるIT企業で働く新人エンジニアの技術&書評ブログです。

GASでLINEのお天気botを作った話

GASでLINEのお天気botを作ったので作り方を共有します。

LINEbotというと難しそうと思われるかもしれませんが、GoogleアカウントとLINEDevelopersアカウントとある程度のプログラミング知識があれば簡単に作れます💪

では行ってみましょう!

 

手順1:LINE Developerコンソールのアカウント作成

このリンク↓から登録します

LINE Developers

はじめてログインした時には開発者登録を求められるので必要事項を入力してください。

アカウント・プロバイダー・チャンネルの作成方法は以下↓のリンクを参考にしてください。

qiita.com

手順2:GASの使い方

Googleスプレッドシートを開き、ツール→<> スプレッドエディタ  の順に選択。

f:id:hureiya278:20210222012111p:plain

 

スクリプトエディタが開けたらソースコードを書いていきます

 

var ACCESS_TOKEN = '';
//LINE developersのアクセストーク
 
function doPost(e) {
// WebHookで受信した応答用Token
var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
// ユーザーのメッセージを取得
var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
 
//メッセージをgetWetherに渡して天気の情報を取得
var replyMessage = getMessage(userMessage);
 
// 応答メッセージ用のAPI URL

UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': replyMessage,
}],
}),
});
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'}))
.setMimeType(ContentService.MimeType.JSON);
}


function getMessage(userMessage) {

var cityid = '';
 
if(userMessage=='道北'){
cityid='011000';
}
else if(userMessage=='道東'){
cityid='013010';
}
else if(userMessage=='道南'){
cityid='015010';
}
else if(userMessage=='道央'){
cityid='016010';
}
else if(userMessage=='青森'){
cityid='020010';
}
else if(userMessage=='岩手'){
cityid='030010';
}
else if(userMessage=='宮城'){
cityid='040010';
}
else if(userMessage=='秋田'){
cityid='050010';
}
else if(userMessage=='山形'){
cityid='060010';
}
else if(userMessage=='福島'){
cityid='070010';
}
else if(userMessage=='茨城'){
cityid='080010';
}
else if(userMessage=='栃木'){
cityid='090010';
}
else if(userMessage=='群馬'){
cityid='100010';
}
else if(userMessage=='埼玉'){
cityid='110010';
}
else if(userMessage=='千葉'){
cityid='120010';
}
else if(userMessage=='東京'){
cityid='130010';
}
else if(userMessage=='神奈川'){
cityid='140010';
}
else if(userMessage=='新潟'){
cityid='150010';
}
else if(userMessage=='富山'){
cityid='160010';
}
else if(userMessage=='石川'){
cityid='170010';
}
else if(userMessage=='福井'){
cityid='180010';
}
else if(userMessage=='山梨'){
cityid='190010';
}
else if(userMessage=='長野'){
cityid='200010';
}
else if(userMessage=='岐阜'){
cityid='210010';
}
else if(userMessage=='静岡'){
cityid='220010';
}
else if(userMessage=='愛知'){
cityid='230010';
}
else if(userMessage=='滋賀'){
cityid='240010';
}
else if(userMessage=='三重'){
cityid='250010';
}
else if(userMessage=='京都'){
cityid='260010';
}
else if(userMessage=='大阪'){
cityid='270000';
}
else if(userMessage=='兵庫'){
cityid='280010';
}
else if(userMessage=='奈良'){
cityid='290010';
}
else if(userMessage=='和歌山'){
cityid='300010';
}
else if(userMessage=='鳥取'){
cityid='310010';
}
else if(userMessage=='島根'){
cityid='320010';
}
else if(userMessage=='岡山'){
cityid='330010';
}
else if(userMessage=='広島'){
cityid='340010';
}
else if(userMessage=='山口'){
cityid='350010';
}
else if(userMessage=='徳島'){
cityid='360010';
}
else if(userMessage=='香川'){
cityid='370000';
}
else if(userMessage=='愛媛'){
cityid='380010';
}
else if(userMessage=='高知'){
cityid='390010';
}
else if(userMessage=='福岡'){
cityid='400010';
}
else if(userMessage=='佐賀'){
cityid='410010';
}
else if(userMessage=='長崎'){
cityid='420010';
}
else if(userMessage=='熊本'){
cityid='430010';
}
else if(userMessage=='大分'){
cityid='440010';
}
else if(userMessage=='宮崎'){
cityid='450010';
}
else if(userMessage=='鹿児島'){
cityid='460010';
}
else if(userMessage=='沖縄'){
cityid='471010';
}
else{
return '47都道府県を入力してください。ex:東京 北海道は道北・道東・道南・道央で入力してください';
}
 
return weatherForecast(cityid);
}


function weatherForecast(id) {
 
var response = UrlFetchApp.fetch("https://weather.tsukumijima.net/api/forecast?city="+id);
//URL+cityID
 
var json=JSON.parse(response.getContentText()); //受け取ったJSONデータを解析して配列jsonに格納
 
/* チャットワークに送る文字列のヘッダー */
var strBody = json["location"]["prefecture"] + "の天気 ";
strBody = strBody + "今日の天気: " + json["forecasts"][0]["telop"] + " ";
strBody = strBody + "明日の天気: " + json["forecasts"][1]["telop"] + " ";
strBody = strBody + "天気概況文 "+json["description"]["text"]+" ";
strBody = strBody + "予報発表時間:" + json["publicTime"];
strBody = strBody + "";
 
return strBody
}
 

 

今回天気の情報取得にはこちらのサイトのAPIを利用しました。

以前はLivedoor天気のAPIを使用していたのですが、サービス終了してたんですね…

weather.tsukumijima.net

 

完成したら、公開→ウェブアプリケーションとして導入で公開します。

公開するとアプリケーションのURLが発行されるので、発行されたURLをLINE DevelopersでWebhook URLに貼り付けたら完成です!


f:id:hureiya278:20210222015540j:image

友達に見せたら、文章が長すぎるとダメ出しされましたorz

改善します…(一行消せばいいだけ)