Skip to content

Instantly share code, notes, and snippets.

@timtheguy
Forked from vingkan/hawklinkrosterscraper.js
Last active September 24, 2018 21:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timtheguy/5184e5de3576f35f57c0e94e5e684de6 to your computer and use it in GitHub Desktop.
Save timtheguy/5184e5de3576f35f57c0e94e5e684de6 to your computer and use it in GitHub Desktop.
Improved Roster Scraper for Campus Labs
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