Last active
April 29, 2021 19:32
-
-
Save HaydenElza/f2535447e98f2786b5248079a52b7108 to your computer and use it in GitHub Desktop.
Tracks changes in UW Madison Hoofer Sailing Club lake conditions flag. Flag status is saved in a google sheets to display the history later. Visit site at: https://elza.me/hooferflag
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 fetchData() { | |
// Fetch data | |
//var url = 'http://testout.hoofersailing.org/feed.php' | |
//var url = 'https://ehs.wisc.edu/current-flag.php' | |
var url = 'https://endpoints.wams.doit.wisc.edu/ehs.wisc.edu/LakeConditions/Api/' | |
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true}); | |
// Process response to object | |
var json = response.getContentText().replace(/\(|\)|;/g, ''); | |
var data = JSON.parse(json); | |
// Return the flag color and date updated | |
return { | |
retrieved: data.Retrieved.substring(0,19).replace('T', ' '), | |
foundBuoy: data.FoundBuoy, | |
foundFlag: data.FoundFlag, | |
foundWeather: data.FoundWeather, | |
waterTemp: data.WaterTemp, | |
flag: data.Flag, | |
sunset: data.SunsetHour + "." + data.SunsetMinute, | |
windDir: data.WindDir, | |
windDegrees: data.WindDegrees, | |
windMph: data.WindMph, | |
//wind: data.WindMph + "mph " + data.WindDir + " (" + data.WindDegrees + "°)", | |
tempF: data.TempF, | |
tempC: data.TempC, | |
forecast: data.Forecast, | |
forecastIcon: data.ForecastIcon | |
//temp: data.TempF + "°F (" + data.TempC + "°C)" | |
}; | |
}; | |
function isNewFlag (flagHistorySpreadsheetId,data) { | |
// Get sheet | |
var ss = SpreadsheetApp.openById(flagHistorySpreadsheetId); | |
var sheet = ss.getSheets()[0] | |
// Get last recorded flag | |
var lastRow = sheet.getLastRow(); | |
var lastFlag = sheet.getRange(lastRow,2).getValue(); | |
// Return true if flag has change, false if not | |
return data.flag!=lastFlag ? true:false; | |
}; | |
function writeFlagToLog(flagHistorySpreadsheetId,data) { | |
// Get sheet | |
var ss = SpreadsheetApp.openById(flagHistorySpreadsheetId); | |
var sheet = ss.getSheets()[0] | |
// Add new data to sheet | |
// var t = new Date( parseInt(data.retrieved) ); | |
// var formatted = t.toISOString().replace(/T/g, ' ').slice(0,-5); | |
// sheet.appendRow([Date.now(), data.flag, formatted, data.foundBuoy, data.foundFlag, data.foundWeather, | |
// data.waterTemp, data.sunset, data.windDir, data.windDegrees, data.windMph, data.tempF, | |
// data.tempC, data.forecast, data.forecastIcon]); | |
sheet.appendRow([Date.now(), data.flag, data.retrieved, data.foundBuoy, data.foundFlag, data.foundWeather, | |
data.waterTemp, data.sunset, data.windDir, data.windDegrees, data.windMph, data.tempF, | |
data.tempC, data.forecast, data.forecastIcon]); | |
}; | |
function sendNotifications(subscriptionSpreadsheetId,data) { | |
// Get sheet | |
var ss = SpreadsheetApp.openById(subscriptionSpreadsheetId); | |
var sheet = ss.getSheets()[1] | |
// Get subscriptions | |
var subs = sheet.getDataRange().getValues().join(); | |
if (subs == '#N/A') {return} | |
// Prep message | |
var fro = 'Hoofer Flag Subs<[email protected]>'; | |
var msg = data.flag!='None' ? data.flag+' flag is now in effect':'Lifesaving Station is Closed'; | |
// Send email | |
GmailApp.sendEmail(fro, msg, '', { | |
bcc: subs, | |
name: 'Hoofer Flag Update' | |
}); | |
}; | |
function main() { | |
var flagHistorySpreadsheetId = '1gtrfO23I4Ph_byR8x0QiJi1QmyFofVsK5LuAE-6TF1A'; | |
var subscriptionSpreadsheetId = '1J7z9Ra7fKtiwzxxd1Rkj2u5E9tC2vkqyCJqo5auDKRo'; | |
var data = fetchData(); | |
if(isNewFlag(flagHistorySpreadsheetId,data)) { | |
writeFlagToLog(flagHistorySpreadsheetId,data); | |
sendNotifications(subscriptionSpreadsheetId,data); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment