Google Apps Scriptを使ってプロ野球の試合状況をメールで知らせる
以前、「Google Apps Scriptを使って運行状況をメールで知らせる」という記事を書きましたが、同じ仕組みを使って、今回はプロ野球の試合状況をメールで知らせる方法を紹介します。
使い方
- Googleドライブでスプレッドシートを新規に作成します。
- メニューの ツール - スクリプトエディタ で空のプロジェクトを作ります。
- 下のコードを貼り付けます。
- {メールアドレス}を自分のメールアドレスに変えます。
- {チーム}を取得したいチーム名に変えます。「巨人」「ヤクルト」「DeNA」「中日」「阪神」「広島」「日本ハム」「楽天」「西武」「ロッテ」「オリックス」「ソフトバンク」のいずれかです。
- メニューの リソース - 現在のプロジェクトのトリガー でトリガーを設定します。私は「15分ごと」にしています。
説明
- 実行すると13時から24時の間だけ処理されます。
- Yahoo!からプロ野球の得点状況を全試合分(最大6試合)、取得します。
- スプレッドシートに得点状況をセットします。
- 次に処理されるとき、前回の得点状況と今回の得点状況を比較します。
- 指定したチームの状況に変化があればセット(上書き)し、得点状況をメール送信します。
情報の取得が面倒、変化があるときだけメール送信、という理由からコードが長くなっています。
コード
function send_npb_mail() {
var my_team, url, mail, title, result, html, lines;
var gamenum, games, i, m, infos, info_new, sheet, info_old, this_info;
my_team = "{チーム}";
mail = "{メールアドレス}";
url = "http://baseball.yahoo.co.jp/npb/schedule/";
title = "プロ野球得点メール";
td=new Date();
this_hour=td.getHours();
Logger.log(this_hour);
if(this_hour<13){
return;
}
//情報を取得
result = UrlFetchApp.fetch(url);
html = result.getContentText();
lines = html.split(/\n/);
gamenum = -1;
games = [];
for(i = 0; i < lines.length; i++) {
if(lines[i].match(/<table.*class="teams">/)) {
gamenum++;
games[gamenum] = [];
games[gamenum].teams = [];
games[gamenum].runs = [];
}
if(gamenum > -1) {
m = lines[i].match(/<a.*\/npb\/teams\/.*>(.*)<\/a>/);
if(m) { //チーム名の取得
games[gamenum].teams.push(m[1]);
}
m = lines[i].match(/<td class="score_r">.*?([0-9\-]+).*?<\/td>/);
if(m) { //得点の取得
games[gamenum].runs.push(m[1]);
}
}
}
if(games.length<1){//試合がない場合は処理しない。
return;
}
infos = [];
for(i = 0; i < games.length; i++) {
infos.push(games[i].teams[0] + games[i].runs[0] + "-" + games[i].runs[1] + games[i].teams[1]);
}
info_new = infos.join(";");
//ログを取得
sheet = SpreadsheetApp.getActiveSheet();
info_old = sheet.getRange(1, 1).getValue();
if(info_new !== info_old) {
this_info = team_info(my_team, info_old, info_new);
if(this_info !== "") {
MailApp.sendEmail(mail, this_info, info_new.replace(/;/g, "\n"));
}
sheet.getRange(1, 1).setValue(info_new);
}
}
function team_info(my_team, info_old, info_new) {
//指定チームの試合状況に変更があれば新しい試合状況を返す。
//変更がなければ空文字を返す。
//第2,第3引数は「ヤクルト2-6DeNA;巨人0-1中日」という文字列。
var olds, news, old_one, new_one, i;
olds = info_old.split(/;/);
news = info_new.split(/;/);
old_one = "";
new_one = "";
for(i = 0; i < olds.length; i++) {
if(olds[i].match(my_team)) {
old_one = olds[i];
}
}
for(i = 0; i < news.length; i++) {
if(news[i].match(my_team)) {
new_one = news[i];
}
}
if(old_one != new_one) {
return new_one;
} else {
return "";
}
}
var my_team, url, mail, title, result, html, lines;
var gamenum, games, i, m, infos, info_new, sheet, info_old, this_info;
my_team = "{チーム}";
mail = "{メールアドレス}";
url = "http://baseball.yahoo.co.jp/npb/schedule/";
title = "プロ野球得点メール";
td=new Date();
this_hour=td.getHours();
Logger.log(this_hour);
if(this_hour<13){
return;
}
//情報を取得
result = UrlFetchApp.fetch(url);
html = result.getContentText();
lines = html.split(/\n/);
gamenum = -1;
games = [];
for(i = 0; i < lines.length; i++) {
if(lines[i].match(/<table.*class="teams">/)) {
gamenum++;
games[gamenum] = [];
games[gamenum].teams = [];
games[gamenum].runs = [];
}
if(gamenum > -1) {
m = lines[i].match(/<a.*\/npb\/teams\/.*>(.*)<\/a>/);
if(m) { //チーム名の取得
games[gamenum].teams.push(m[1]);
}
m = lines[i].match(/<td class="score_r">.*?([0-9\-]+).*?<\/td>/);
if(m) { //得点の取得
games[gamenum].runs.push(m[1]);
}
}
}
if(games.length<1){//試合がない場合は処理しない。
return;
}
infos = [];
for(i = 0; i < games.length; i++) {
infos.push(games[i].teams[0] + games[i].runs[0] + "-" + games[i].runs[1] + games[i].teams[1]);
}
info_new = infos.join(";");
//ログを取得
sheet = SpreadsheetApp.getActiveSheet();
info_old = sheet.getRange(1, 1).getValue();
if(info_new !== info_old) {
this_info = team_info(my_team, info_old, info_new);
if(this_info !== "") {
MailApp.sendEmail(mail, this_info, info_new.replace(/;/g, "\n"));
}
sheet.getRange(1, 1).setValue(info_new);
}
}
function team_info(my_team, info_old, info_new) {
//指定チームの試合状況に変更があれば新しい試合状況を返す。
//変更がなければ空文字を返す。
//第2,第3引数は「ヤクルト2-6DeNA;巨人0-1中日」という文字列。
var olds, news, old_one, new_one, i;
olds = info_old.split(/;/);
news = info_new.split(/;/);
old_one = "";
new_one = "";
for(i = 0; i < olds.length; i++) {
if(olds[i].match(my_team)) {
old_one = olds[i];
}
}
for(i = 0; i < news.length; i++) {
if(news[i].match(my_team)) {
new_one = news[i];
}
}
if(old_one != new_one) {
return new_one;
} else {
return "";
}
}
[ 2016年6月18日 | カテゴリー: デジタル | タグ: Google , Google Apps Script , プロ野球 ]
« Unicode9.0で追加される絵文字一覧 | exeファイルをpdfファイルに偽装する方法 »
コメントを残す