Created
September 14, 2017 19:58
-
-
Save vingkan/e74614429158b4364b1323d2a51e1a64 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://hawklink.iit.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://hawklink.iit.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