-
-
Save timtheguy/5184e5de3576f35f57c0e94e5e684de6 to your computer and use it in GitHub Desktop.
Improved Roster Scraper for Campus Labs
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
var orgID = // Your Organization ID; | |
getOrganization(orgID, 1).then((initialOrg) => { | |
getOrganization(orgID, initialOrg.totalItems).then((fullOrg) => { | |
let promises = []; | |
fullOrg.items.forEach((item) => { | |
let memberID = item.account.id; | |
let p = getMember(memberID); | |
promises.push(p); | |
}); | |
Promise.all(promises.map(reflectPromise)).then((res) => { | |
console.log(res); | |
res.forEach((res) => { | |
if (res.success) { | |
let member = res.data; | |
if (member.name && member.emailAddress) { | |
let out = `${member.name},${member.emailAddress}<br>`; | |
document.write(out); | |
} | |
} | |
}); | |
}).catch(console.error); | |
}); | |
}).catch(console.error); | |
function getOrganization(orgID, take) { | |
return new Promise((resolve, reject) => { | |
let n = take || 1; | |
let orgURL = `https://connection.erau.edu/api/discovery/organization/${orgID}/member?take=${n}`; | |
getXHR(orgURL).then(resolve).catch(reject); | |
}); | |
} | |
function getMember(memberID) { | |
return new Promise((resolve, reject) => { | |
let memberURL = `https://connection.erau.edu/api/discovery/communitymember/${memberID}`; | |
getXHR(memberURL).then(resolve).catch(reject); | |
}); | |
} | |
function reflectPromise(promise) { | |
return new Promise((resolve, reject) => { | |
promise.then((data) => { | |
resolve({ | |
success: true, | |
data: data, | |
error: {} | |
}); | |
}).catch((error) => { | |
resolve({ | |
success: false, | |
data: {}, | |
error: error | |
}); | |
}); | |
}); | |
} | |
function getXHR(url) { | |
return new Promise((resolve, reject) => { | |
try { | |
let data = null; | |
let xhr = new XMLHttpRequest(); | |
xhr.withCredentials = true; | |
xhr.addEventListener("readystatechange", function () { | |
if (this.readyState === 4) { | |
let res = JSON.parse(this.responseText) | |
resolve(res); | |
} | |
}); | |
xhr.open("GET", url); | |
xhr.send(data); | |
} catch (err) { | |
reject(err); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment