天気予報を取得してLINEに通知を送る
はじめに
学校でちょっとかじった程度のプログラム初心者です。
このご時世プログラムくらい書けるようになっておくべきだろう、という軽い動機で勉強してみることにしました。
まずはじめに、指南ページに載っていた題材に手を出してみました。
使用言語はGoogleAppsScriptです。
よく調べずに選びましたが、開発環境を整えなくてもすぐ作業に取りかかれるところ、
自動実行の設定が簡単なところなどが決め手になりました。
構成
livedoor天気のWeb API(json形式)を取得
http://weather.livedoor.com/weather_hacks/webservice
↓
必要なお天気情報を取り出しテキストを整形
今日明日の天気と最高/最低気温
↓
LINE Notifyにテキストを送る
コード
main
//LineNotifyにメッセージを送信
function sendHttpPost(message){
var token = "--LineNotify token--";
var options =
{
"method" : "post",
"payload" : "message=" + message,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
//メインルーチン
function whetherMailDay() {
//livedoor天気からjson形式のWEBAPIをリクエスト
var response = UrlFetchApp.fetch("--json URL--");
var json=JSON.parse(response.getContentText());
//jsonから日時を取り出してdateに格納
//日時の表示形式をYYYY-MM-DDからMM/DDに変換
var date = new Array(2);
for (var x = 0; x < 2; x++){
date[x] = json["forecasts"][x]["date"];
date[x] = date[x].slice(5);
date[x] = date[x].replace( /-/g , "/" ) ;
}
//気温がnullの場合--に変換
var maxMin = ["max","min"];
var Temp = new Array(2);
for(var i = 0; i < 2; i++){
Temp[i] = new Array(2)
for(var j = 0; j < 2; j++){
if(json["forecasts"][i]["temperature"][maxMin[j]] == null){
Temp[i][j] = "--";
}else{
Temp[i][j] = json["forecasts"][i]["temperature"][maxMin[j]]["celsius"];
}
}
}
//送信用文字列の作成
var strBody = "天気予報";
for(var i = 0;i < 2;i++){
strBody = strBody + "\n" + date[i] + " : " + json["forecasts"][i]["telop"]
+ "\n" + "最低気温 : " + Temp[i][1] + "℃ 最高気温 : " + Temp[i][0] + "℃";
};
sendHttpPost(strBody);
}
//LineNotifyにメッセージを送信
function sendHttpPost(message){
var token = "--LineNotify token--";
var options =
{
"method" : "post",
"payload" : "message=" + message,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
//メインルーチン
function whetherMailDay() {
//livedoor天気からjson形式のWEBAPIをリクエスト
var response = UrlFetchApp.fetch("--json URL--");
var json=JSON.parse(response.getContentText());
//jsonから日時を取り出してdateに格納
//日時の表示形式をYYYY-MM-DDからMM/DDに変換
var date = new Array(2);
for (var x = 0; x < 2; x++){
date[x] = json["forecasts"][x]["date"];
date[x] = date[x].slice(5);
date[x] = date[x].replace( /-/g , "/" ) ;
}
//気温がnullの場合--に変換
var maxMin = ["max","min"];
var Temp = new Array(2);
for(var i = 0; i < 2; i++){
Temp[i] = new Array(2)
for(var j = 0; j < 2; j++){
if(json["forecasts"][i]["temperature"][maxMin[j]] == null){
Temp[i][j] = "--";
}else{
Temp[i][j] = json["forecasts"][i]["temperature"][maxMin[j]]["celsius"];
}
}
}
//送信用文字列の作成
var strBody = "天気予報";
for(var i = 0;i < 2;i++){
strBody = strBody + "\n" + date[i] + " : " + json["forecasts"][i]["telop"]
+ "\n" + "最低気温 : " + Temp[i][1] + "℃ 最高気温 : " + Temp[i][0] + "℃";
};
sendHttpPost(strBody);
}
実行結果
天気予報
mm/dd : 雨
最低気温 : --℃ 最高気温 : XX℃
mm/dd : 晴
最低気温 : XX℃ 最高気温 : XX℃
わかったこと
- JSON形式の読み込み方
- LineNotifyへのテキストデータの送り方
課題
- 別の天気予報APIから降水確率を取得
- 可能ならXML形式の読み込みに挑戦したい
- livedoor天気のAPI内にある天気アイコンをLINEに表示させる
- LineNotifyを通して画像を表示させるには
おわりに
- 別の天気予報APIから降水確率を取得
- 可能ならXML形式の読み込みに挑戦したい
- livedoor天気のAPI内にある天気アイコンをLINEに表示させる
- LineNotifyを通して画像を表示させるには
おわりに
コード的にはほとんどコピペで済むようなものでしたが、APIの中身を理解するのに時間を費やしてしまいました。
天気予報APIを取得する時刻によって、気温にnullが入っている場合があることがわかり、そりゃないだろという感じでした。
参考サイト様
Author And Source
この問題について(天気予報を取得してLINEに通知を送る), 我々は、より多くの情報をここで見つけました https://qiita.com/taisatol/items/df399b47321bcb1e8d2a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .