multiple added features including tokens
This commit is contained in:
81
nodelib/lib.js
Normal file
81
nodelib/lib.js
Normal file
@@ -0,0 +1,81 @@
|
||||
const fs = require("fs");
|
||||
const YAML = require("yaml");
|
||||
const child_process = require("child_process");
|
||||
const puppeteer = require('puppeteer');
|
||||
async function read_html(filename){
|
||||
return fs.readFileSync(filename,"utf8");
|
||||
}
|
||||
|
||||
|
||||
function parse_du_line(text) {
|
||||
res={}
|
||||
|
||||
r=text.split("\t")
|
||||
if (r.length <2) return [text]; // valid line mus have a column size and folder
|
||||
foldername=r[1]
|
||||
res["size"]=r[0]
|
||||
res["folderpath"]=foldername
|
||||
res["folder"]=foldername.split("/")[foldername.split("/").length-1]
|
||||
//console.log([foldername.split("/")[foldername.split("/").length-1], foldername.split("/"),foldername.split("/").length])
|
||||
r1=foldername.replace(/(\d{3})[\._]?([A\d]{3})/i,"$1.$2")
|
||||
r1=r1.match(/(\d{3})\.([A\d]{3})/i)
|
||||
if (!r1) return res;
|
||||
res["lvanr"] = r1[0]
|
||||
return res
|
||||
}
|
||||
|
||||
function du_unizeug(){
|
||||
buf = child_process.execSync("du /mnt/save/daten/Unizeug/ -d 1 -h",{"maxBuffer": 1024*1024*48}).toString()
|
||||
tab=[];
|
||||
|
||||
buf.split("\n").forEach(value => {
|
||||
text=parse_du_line(value)
|
||||
tab.push(text)
|
||||
})
|
||||
lookup=tab.reduce((acc,item,index)=>{
|
||||
if (item["lvanr"]) {
|
||||
if (acc[item["lvanr"]]) acc[item["lvanr"]].push(index);
|
||||
else acc[item["lvanr"]] =[index];
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
return {"folders": tab, "lookup": lookup}
|
||||
|
||||
}
|
||||
|
||||
|
||||
async function fetch_page(url, selector) {
|
||||
const browser = await puppeteer.launch({args: ['--no-sandbox']});
|
||||
const page = await browser.newPage();
|
||||
await page.goto(url, {
|
||||
waitUntil: 'networkidle2'
|
||||
});
|
||||
|
||||
//console.log("Waiting for selector: "+selector)
|
||||
await page.waitForSelector(selector,{ timeout: 7000 }).catch((err)=>{console.log(err); page.screenshot({path: 'exampleerr.png'}); await browser.close();})
|
||||
await page.screenshot({path: 'example.png'});
|
||||
let body = await page.evaluate((selector)=>{
|
||||
let b = $(selector)[0].innerHTML;
|
||||
return b
|
||||
},selector).catch((err)=>{console.log(err); await browser.close()});
|
||||
//console.log(await page.text());
|
||||
await browser.close();
|
||||
//console.log(body)
|
||||
return body
|
||||
}
|
||||
|
||||
|
||||
function merge_folders_courselist(courselist,folders) {
|
||||
Object.entries(courselist["tab2"]).forEach(([index0,value0])=> {
|
||||
value0["courses"].forEach((value)=> {
|
||||
i=folders["lookup"][value["lvanr"]] // lookup the LVAnr and get an Array with indexes
|
||||
if (i) value["folders"] = i.reduce((acc,item)=>{
|
||||
acc.push(folders["folders"][item]) // get one of the folders that are related to LVAnr
|
||||
return acc
|
||||
},[])
|
||||
},value0)
|
||||
})
|
||||
return courselist;
|
||||
|
||||
}
|
||||
module.exports = {read_html,du_unizeug, fetch_page,merge_folders_courselist}
|
||||
63
nodelib/tissparse.js
Normal file
63
nodelib/tissparse.js
Normal file
@@ -0,0 +1,63 @@
|
||||
const cheerio = require('cheerio');
|
||||
const slugify=require('slugify');
|
||||
|
||||
function courselist(html) {
|
||||
$ = cheerio.load(html);
|
||||
tab2={};
|
||||
tab=[];
|
||||
studium="";
|
||||
pruefungsfach="";
|
||||
lvaname="";
|
||||
$('table').find('tr').each((index,element)=>{
|
||||
let element_first=$(element).find('td.nodeTable-title > div.ui-widget');
|
||||
if (element_first.hasClass("nodeTable-level-0")) {
|
||||
studium=element_first.text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
}
|
||||
if (element_first.hasClass("nodeTable-level-1")) {
|
||||
pruefungsfach=element_first.text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
}
|
||||
if (element_first.hasClass("nodeTable-level-2")) {
|
||||
modul=element_first.text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
}
|
||||
if (element_first.hasClass("nodeTable-level-3")) {
|
||||
lvaname=element_first.text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
tab2[lvaname]={"courses": []};
|
||||
}
|
||||
if (element_first.hasClass("nodeTable-level-4")) {
|
||||
let course_key=element_first.find("div.courseKey").text();
|
||||
course_key=course_key.replace(/^[\s\n]+|[\s\n]+$/g, '');
|
||||
let ects=$(($(element).find("td.nodeTable-short")).toArray()[2]).text()
|
||||
let std=$(($(element).find("td.nodeTable-short")).toArray()[1]).text()
|
||||
tab2[lvaname]["studium"] = studium
|
||||
tab2[lvaname]["modul"] = modul
|
||||
tab2[lvaname]["prufungsfach"] = pruefungsfach
|
||||
tab2[lvaname]["lvaname"] = lvaname
|
||||
tab2[lvaname]["ects"]=ects
|
||||
tab2[lvaname]["std"]=std
|
||||
tab2[lvaname]["courses"].push({
|
||||
"href": element_first.find("a").attr("href"),
|
||||
"lvanr": course_key.split(" ")[0],
|
||||
"lvatyp": course_key.split(" ")[1],
|
||||
"lvasem": course_key.split(" ")[2],
|
||||
"courseKey": course_key,
|
||||
"courseTitle":element_first.find("div.courseTitle").text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
})
|
||||
tab.push({"href": element_first.find("a").attr("href"),
|
||||
"studium": studium,
|
||||
"pruefungsfach": pruefungsfach,
|
||||
"modul":modul,
|
||||
"ects":ects,
|
||||
"std":std,
|
||||
"courseKey": course_key,
|
||||
"lvaname": lvaname,
|
||||
"lvanr": course_key.split(" ")[0],
|
||||
"lvatyp": course_key.split(" ")[1],
|
||||
"lvasem": course_key.split(" ")[2],
|
||||
"courseTitle":element_first.find("div.courseTitle").text().replace(/^[\s\n]+|[\s\n]+$/g, '')
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
return {tab2};
|
||||
}
|
||||
module.exports = {courselist}
|
||||
Reference in New Issue
Block a user