Skip to content

Instantly share code, notes, and snippets.

@interdigitize
interdigitize / createTrigger.js
Last active October 17, 2023 05:29
Scrape and save data to Google Sheets with Apps Script - create trigger
function createTrigger() {
// Trigger once a day
ScriptApp.newTrigger('getCovidDataAndUpdateSpreadSheet')
.timeBased()
.atHour(8)
.everyDays(1) // Frequency is required if you are using atHour() or nearMinute()
.create();
}
function getCovidDataAndUpdateSpreadSheet() {
@interdigitize
interdigitize / addDataToSpreadsheet.js
Last active April 4, 2020 06:42
Scrape and save data to Google Sheets with Apps Script - add data to the spreadsheet
function getCovidDataAndUpdateSpreadSheet() {
var url = "http://publichealth.lacounty.gov/media/Coronavirus/locations.htm"
//fetch site content
var websiteContent = UrlFetchApp.fetch(url).getContentText();
var fetchTime = Utilities.formatDate(new Date(), 'Etc/GMT', "yyyy-MM-dd HH:mm:ssZ"); // "yyyy-MM-dd'T'HH:mm:ss'Z'"
//extract data
var laCasesRegExp = new RegExp(/(Laboratory Confirmed Cases \(LCC\))([tdh<>\/]+)([0-9]+)/m);
var laDeathsRegExp = new RegExp(/(Deaths)([tdh<>\/]+)([0-9]+)/m);
@interdigitize
interdigitize / fetchSiteContent.js
Last active March 30, 2020 07:33
Scrape and save data to Google Sheets with Apps Script - fetch site content
var url = "http://publichealth.lacounty.gov/media/Coronavirus/locations.htm"
//fetch site content
var websiteContent = UrlFetchApp.fetch(url).getContentText();
var fetchTime = Utilities.formatDate(new Date(), 'Etc/GMT', "yyyy-MM-dd HH:mm:ssZ"); // "yyyy-MM-dd'T'HH:mm:ss'Z'"
Logger.log('website content: ' + websiteContent);
Logger.log('fetch time: ' + fetchTime);
@interdigitize
interdigitize / extractData.js
Last active April 4, 2020 06:40
Scrape and save data to Google Sheets with Apps Script - extract data
//extract data
var laCasesRegExp = new RegExp(/(Laboratory Confirmed Cases \(LCC\))([tdh<>\/]+)([0-9]+)/m);
var laDeathsRegExp = new RegExp(/(Deaths)([tdh<>\/]+)([0-9]+)/m);
var laCasesMatchText = laCasesRegExp.exec(websiteContent);
Logger.log('LA cases: ' + laCasesMatchText[3]);
var laDeathsMatchText = laDeathsRegExp.exec(websiteContent);
Logger.log('LA deaths: ' + laDeathsMatchText[3]);
@interdigitize
interdigitize / notes.md
Last active February 21, 2020 03:38
Differences between JavaScript and Python

Data Types

Python JavaScript
String immutable String immutable
Integer whole numbers
Float decimals
Number
- includes NaN and Infinity
Bigint
- for integer values larger than 2^53 or less than -2^53
- in Jan 2020, not fully supported by all browsers
Boolean - True and False are c
//Given a string, sort it in decreasing order based on the frequency of characters.
var frequencySort = function(s) {
var charFreq = {};
for (var i = 0; i < s.length; i++) {
if(charFreq[s[i]]) {
charFreq[s[i]] = charFreq[s[i]] + 1;
} else {
charFreq[s[i]] = 1;
@interdigitize
interdigitize / floating-point imprecision
Created June 15, 2017 16:59
Prompt: tackling floating-point imprecision with the CashAmount class
//https://gist.github.com/tim-hr/c9fb047b96d9d36944cec901b7413201
//GOAL: make a class called CashAmount
//input: accepts double values (e.g., 14.72)
// Note: you can do this by converting to pennies for all denominations so you are always working with integers, then converting back to a two-decimal float as needed.
//How to convert: multipy money by 100 REMEMBER to convert back!
@interdigitize
interdigitize / sortCharFreq.js
Last active March 6, 2017 15:38
Sort Characters By Frequency— refactored
//Given a string, sort it in decreasing order based on the frequency of characters.
var test = "Aabb";
var frequencySort = function(s) {
var counter = {};
var sortedArr = [];
var theStr = "";
for(var i = 0; i < s.length; i++){
@interdigitize
interdigitize / while-loop-prompt.js
Created April 23, 2016 05:57
A while loop that continues to prompt until an input is entered that is greater than 0 or until the cancel button is clicked.
var input;
while(true){
input = prompt('Enter an integer greater than 0');
if (input > 0){
break;
} else if (input === null) {
break;
}
}