Created
September 13, 2017 06:00
-
-
Save seya128/b3073b7e88f6550af406d8ccfbbc51c7 to your computer and use it in GitHub Desktop.
今日の3時間ごと天気、気温などをSlack、ChatworkにポストするGAS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function myFunction() { | |
var msg = ""; | |
//名古屋市の天気 | |
var result = getWeatherInfo("https://tenki.jp/lite/forecast/5/26/5110/23100/3hours.html"); | |
msg += makeMessage(result); | |
//品川区の天気 | |
var result = getWeatherInfo("https://tenki.jp/lite/forecast/3/16/4410/13109/3hours.html"); | |
msg += makeMessage(result); | |
Logger.log(msg); | |
if (msg != "") { | |
var payload = { | |
"text" : msg, | |
"channel" : "#CHANNEL", | |
"username" : "秘書美", | |
"icon_emoji" : ":information_desk_person:" | |
} | |
postSlack(payload); | |
postChatwork(ChatworkのルームID, msg); | |
} | |
} | |
function makeMessage(dt) { | |
var msg; | |
msg = "■" + dt.title + "\n"; | |
for (var i in dt.data) { | |
msg += " "; | |
msg += dt.data[i].hour + " "; | |
msg += dt.data[i].temperature + "℃ "; | |
msg += "湿度" + dt.data[i].humidity + "% "; | |
msg += dt.data[i].wind_direction + dt.data[i].wind_speed + "m "; | |
msg += dt.data[i].weather + " "; | |
msg += "\n"; | |
} | |
msg += "\n"; | |
return msg; | |
} | |
function getWeatherInfo(url) { | |
var response = UrlFetchApp.fetch(url); | |
var result = {}; | |
result.error = false; | |
// タイトル | |
var regexp = /<h2>.+?<\/h2>/gi; | |
var elements = response.getContentText().match(regexp); | |
result.title = elements[0].replace(/<h2>(.*?)<.*/,"$1"); | |
// 最初の日にちのデータ | |
var regexp = /<table id=\"forecast-point-3h-today\"[\s\S]+?<\/table>/gi; | |
var elements = response.getContentText().match(regexp); | |
var today_element = elements[0]; | |
// 日にち | |
var regexp = /<th class=\"date\".+?<\/th>/gi; | |
var elements = today_element.match(regexp); | |
result.date = elements[0].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,''); //tag削除 | |
// 時間ごとのデータ | |
var regexp = /<tr class=\"(past-entry|entry)\"[\s\S]+?<\/tr>/gi; | |
var elements = today_element.match(regexp); | |
var data = []; | |
for (var i in elements) { | |
data.push({ | |
hour: elements[i].replace(/[\s\S]*<td class=\"hour\">(.*?)<[\s\S]*/,"$1"), | |
weather: elements[i].replace(/[\s\S]*<p class=\"weather-image\"><img.*alt=\"(.*?)\"[\s\S]*/,"$1"), | |
temperature: elements[i].replace(/[\s\S]*<td class=\"temperature\">(.*?)<[\s\S]*/,"$1"), | |
humidity: elements[i].replace(/[\s\S]*<td class=\"humidity\">(.*?)<[\s\S]*/,"$1"), | |
wind_speed: elements[i].replace(/[\s\S]*<td class=\"wind-speed\".*>(.+?)<[\s\S]*/,"$1"), | |
wind_direction: elements[i].replace(/[\s\S]*<td class=\"wind-direction\"><img.*alt=\"(.*?)\"[\s\S]*/,"$1"), | |
}); | |
} | |
result.data = data; | |
return result; | |
} | |
//slackへポスト | |
function postSlack(payload) | |
{ | |
// POSTオプション | |
var options = { | |
"method" : "POST", | |
"payload" : JSON.stringify(payload) | |
} | |
// アクセス先 | |
var url = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX"; | |
// POSTリクエスト | |
var response = UrlFetchApp.fetch(url, options); | |
// HTML結果を取得(引数のcharsetは設定したほうが良い) | |
var content = response.getContentText("UTF-8"); | |
} | |
//chatworkへポスト | |
function postChatwork(room_id, msg) | |
{ | |
// POSTオプション | |
var options = { | |
"method" : "POST", | |
"headers" : {"X-ChatWorkToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}, | |
"payload" : "body="+msg | |
} | |
// アクセス先 | |
var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages"; | |
var response = UrlFetchApp.fetch(url, options); | |
// HTML結果を取得(引数のcharsetは設定したほうが良い) | |
var content = response.getContentText("UTF-8"); | |
} | |
//メール送信 | |
function sendMail(to, title, message) | |
{ | |
MailApp.sendEmail(to, title, message); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment