-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetUserIDsFromInstitution.js
42 lines (37 loc) · 1.52 KB
/
getUserIDsFromInstitution.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import makeRequest from './makeRequest.js';
import { randDelay } from './delay.js';
import { institutionURL, smallDelay } from './globals.js';
export default async function getUserIDsFromInstitution(institutionURL) {
try {
// console.log('Waiting for first page...');
let document = await makeRequest(institutionURL);
let userIDs = [];
let nextPageButton = { disabled: false };
while (!nextPageButton.disabled) {
let usersInPage = document.querySelectorAll('h3 > a[href*="user"]');
usersInPage.forEach(user => {
userIDs.push(user.href.match(/user=([^&]*)/)[1]);
});
let pageButtons = document.querySelectorAll('button[type="button"]');
nextPageButton = pageButtons[pageButtons.length - 1];
if (!nextPageButton.disabled) {
// console.log('Waiting for next page...');
await randDelay(...smallDelay);
document = await makeRequest(getNextPageURL(nextPageButton));
} else {
// console.log('No more pages.');
}
}
// console.log("Number of IDs found: ", userIDs.length);
return Promise.resolve(userIDs);
} catch (error) {
console.log('Error at getUserIDsFromInstitution.');
return Promise.reject(error);
}
}
function getNextPageURL(button) {
let afterAuthor = button.outerHTML.match(/after_author\\x3d(.*?)\\/)[1];
let astart = button.outerHTML.match(/astart\\x3d(.*?)'/)[1];
let nextURL = `${institutionURL}&after_author=${afterAuthor}&astart=${astart}`;
return nextURL;
}