Skip to content

Instantly share code, notes, and snippets.

@seya128
Created September 13, 2017 06:00
Show Gist options
  • Save seya128/b3073b7e88f6550af406d8ccfbbc51c7 to your computer and use it in GitHub Desktop.
Save seya128/b3073b7e88f6550af406d8ccfbbc51c7 to your computer and use it in GitHub Desktop.
今日の3時間ごと天気、気温などをSlack、ChatworkにポストするGAS
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