2021 Jan. 23.
googleドライブのスプレッドシート -> ツール -> スクリプト・エディタ に下記のスクリプトを記述し、トリガーにセットする。
(メール送信スクリプト)
function sendMimamori(){
// 2017 Jan. 04.
// 2016 Dec. 25.
// Ryuichi Hashimoto.
// 現在時刻を取得
var now = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd hh:mm");
// 電子メール送信する
var toAddress = "TO@ADDRESS,TO2@ADDRESS2";
var ccAddress = "CC@ADDRESS,CC2@ADDRESS2";
var cityID = "330010"; // 地域ID
// cityID List: https://weather.tsukumijima.net/primary_area.xml
var mailTitle = 'お元気ですか?';
var mailText = "元気ですか?\n何も書かなくてよいので[すべてへ返信]をして下さい。\n";
mailText = mailText + now + "\n\n" + weatherForecast(cityID) + "\n" + wikipediaWhatIsToday(5);
MailApp.sendEmail(toAddress,mailTitle,mailText, {cc:ccAddress});
}
(天気予報取得スクリプト)
function weatherForecast(cityID) { // cityID: 地域ID
// 2021 Jan. 23.
// 2016 Dec. 29.
// Ryuichi Hashimoto.
// cityID List: https://weather.tsukumijima.net/primary_area.xml
// api url: https://weather.tsukumijima.net/api/forecast
var response = UrlFetchApp.fetch("http://weather.tsukumijima.net/api/forecast/city/"+cityID); //ApiUrl+/city/+cityID
var json=JSON.parse(response.getContentText());
var forecastText = "";
if (json["publicTime"]) {
if (json["title"]) {
forecastText = "(ご参考)\n"+json["title"]+"の天気 "+json["publicTime"].substring(0,16).replace("T"," ")+"発表\n"
if (json["forecasts"][0]) {
if (json["forecasts"][0]["telop"]) forecastText=forecastText+"今日の天気は "+json["forecasts"][0]["telop"]+"\n";
if (json["forecasts"][0]["temperature"]["max"] ) forecastText=forecastText+"最高気温:"+json["forecasts"][0]["temperature"]["max"]["celsius"]+"度\n";
if (json["forecasts"][0]["temperature"]["min"] ) forecastText=forecastText+"最低気温:"+json["forecasts"][0]["temperature"]["min"]["celsius"]+"度\n";
forecastText=forecastText+"\n";
}
if (json["forecasts"][1]) {
if (json["forecasts"][1]["telop"]) forecastText=forecastText+"明日の天気は "+json["forecasts"][1]["telop"]+"\n";
if (json["forecasts"][1]["temperature"]["max"] ) forecastText=forecastText+"最高気温:"+json["forecasts"][1]["temperature"]["max"]["celsius"]+"度\n";
if (json["forecasts"][1]["temperature"]["min"] ) forecastText=forecastText+"最低気温:"+json["forecasts"][1]["temperature"]["min"]["celsius"]+"度\n\n";
}
if (json["description"]["text"]) forecastText=forecastText+json["description"]["text"]+"\n";
}
}
return forecastText;
}
(wikipediaから今日の月日の過去の出来事を取得するスクリプト)
function wikipediaWhatIsToday(countArticle) { // countArticle: 取得する記事数
// 2016 Jan. 04.
// Ryuichi Hashimoto.
var now = new Date();
var month = now.getMonth()+1;
var day = now.getDate();
var monthDay = month+"月"+day+"日 ";
var url = 'https://ja.wikipedia.org/w/api.php?format=json&utf8&action=query&prop=revisions&rvprop=content&titles=';
url = url + monthDay;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
// get the page IDs
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
// 記事本文を取得
var content = data.query.pages[ pageid[0] ].revisions[0]["*"];
// 次の区切り・順番で記事が並んでいる
// == できごと ==
// == 誕生日 ==
// == 忌日 ==
// == 記念日・年中行事 ==
// == フィクションのできごと ==
// == 誕生日(フィクション) ===
// == 出典 ==
// == 関連項目 ==
// 「できごと」を取り出す
var dekigoto = content.match(/== できごと ==[\s\S]*== 誕生日 ==/);
// アスタリスクで始まり改行文字で終わる文字列を取り出す
article = dekigoto[0].match(/\*.+\n/g);
// countArticleの個数の記事を取り出す
var numberArticle = [];
while (true) {
var rand = Math.floor( Math.random() * article.length) ;
numberArticle.push(rand);
numberArticle = numberArticle.filter(function (x, i, self) {
return self.indexOf(x) === i;
})
if (numberArticle.length == countArticle ) {
break;
}
}
var outputText = monthDay + "のできごと\n";
numberArticle.forEach(function(numLine) {
outputText = outputText + article[numLine] + "\n";
});
return outputText;
}