quizlet-terms-api
Version:
Most of the Quizlet Packages on NPM don't really work. But this one 100% does so be sure to download this one! 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;