unof-quizlet-api
Version:
An API that scrapes Quizlet Study Sets and returns Study Set terms and definitions. Great for high scale educational applications!
55 lines (45 loc) • 2.25 kB
JavaScript
const http = require('axios');
const { parse } = require('node-html-parser');
const q_set = async (url , callback) => {
try {
// Derived from Stack Overflow
const headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'max-age=0',
'cookie': 'yourcookie',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; CrOS x86_64 12239.92.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.136 Safari/537.36',
}
const raw_set = (await http.get(url, headers)).data;
const root = parse(raw_set);
const getText = selector => {
return root.querySelector(selector).childNodes[0]._rawText
}
const qArray = new Array();
const qRoot = root.querySelector('.SetPageTerms-termsList');
for (let i = 0; i < qRoot.parentNode.childNodes[1].childNodes.length; i++) {
qArray.push({
term: qRoot.parentNode.childNodes[1].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]._rawText,
definition: qRoot.parentNode.childNodes[1].childNodes[i].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[0]._rawText
})
}
if (callback) {
callback();
}
return {
title: `${getText('title')}`,
author: `${getText('.UserLink-username')}`,
cards: qArray
}
}
catch (e) {
console.log('Cannot Fetch the Quizlet Cards!');
console.error(e);
}
}
module.exports = q_set;