Skip to content

Instantly share code, notes, and snippets.

@tkbremnes
Last active October 12, 2017 06:00
Show Gist options
  • Save tkbremnes/4f90755ce520fec02a8a67e6d3da1306 to your computer and use it in GitHub Desktop.
Save tkbremnes/4f90755ce520fec02a8a67e6d3da1306 to your computer and use it in GitHub Desktop.
Simple scraper for the grain list found on beersmith.com
// http://beersmith.com/Grains/Grains/GrainList.htm
var table = document.querySelector("#table2");
var rows = table.querySelectorAll("tr");
var result = [];
rows.forEach((row, index) => {
if (index === 0) {
return;
}
var cells = row.querySelectorAll("td");
function formatSpecificGravity(_g) {
return parseFloat(_g);
}
function parseColor(color) {
const srm = parseInt(color);
const ebc = Math.floor(srm * 1.97);
const lovibond = Math.floor((srm + 0.76) / 1.3546)
return srm;
return {
srm,
ebc,
lovibond
}
}
function formatMaxInBatch(_p) {
return parseInt(_p) / 100;
}
function parseType(textType) {
switch(textType) {
case "Grain": return "GRAIN";
case "Sugar": return "SUGAR";
case "Adjunct": return "ADJUNCT";
case "Dry Extract": return "DRY_EXTRACT";
case "Extract": return "EXTRACT";
}
}
function parseOrigin(origin) {
switch(origin) {
case "Belgium": return "BE";
case "Germany": return "DE";
case "US": return "US";
case "United Kingdom": return "UK";
}
}
function getPotentialYield(gravity) {
const ppg = parseInt(gravity.substring(3))
const PPG_SUGAR = 46;
return ppg/PPG_SUGAR;
}
var cellRes = {};
cells.forEach((cell, index) => {
switch(index) {
case 0:
// Name
cellRes["name"] = cell.textContent;
break;
case 1:
// Origin
cellRes["origin"] = parseOrigin(cell.textContent);
break;
case 2:
// Type
cellRes["type"] = parseType(cell.textContent);
break;
case 3:
// Color
cellRes["color"] = parseColor(cell.textContent);
break;
case 4:
// Must Mash
cellRes["must_mash"] = cell.textContent = "Yes" ? true : false;
break;
case 5:
// Potential SG
cellRes["potential_yield"] = getPotentialYield(cell.textContent);
break;
case 6:
// Max in batch
cellRes["max_in_batch"] = formatMaxInBatch(cell.textContent);
break;
}
});
result.push(cellRes);
})
copy(result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment