Spaces:
Sleeping
Sleeping
File size: 2,393 Bytes
1406b5a |
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
const cheerio = require('cheerio');
const cleanText = (text) => text.replace(/\s+/g, ' ').trim();
module.exports.parseStudentData = (html, regNo) => {
const $ = cheerio.load(html);
const getText = selector => cleanText($(selector).text()) || 'N/A';
// Base information
const data = {
university: "Bihar Engineering University, Patna",
registration_no: regNo,
exam_name: getText('#ContentPlaceHolder1_DataList4_Exam_Name_0'),
semester: getText('#ContentPlaceHolder1_DataList2_Exam_Name_0'),
exam_date: getText('#ContentPlaceHolder1_DataList2 td:nth-of-type(2)').split(':').pop(),
student_name: getText('#ContentPlaceHolder1_DataList1_StudentNameLabel_0'),
college_name: getText('#ContentPlaceHolder1_DataList1_CollegeNameLabel_0'),
course_name: getText('#ContentPlaceHolder1_DataList1_CourseLabel_0'),
sgpa: getText('#ContentPlaceHolder1_DataList5_GROSSTHEORYTOTALLabel_0'),
publish_date: getText('#ContentPlaceHolder1_DataList3 tr:nth-of-type(2) td').split(':').pop()
};
// Subject parser
const parseSubjects = (selector) => {
return $(`${selector} tr`).slice(1).map((i, row) => {
const cells = $(row).find('td');
return cells.length >= 7 ? {
subject_code: cleanText(cells.eq(0).text()),
subject_name: cleanText(cells.eq(1).text()),
ese: cleanText(cells.eq(2).text()),
ia: cleanText(cells.eq(3).text()),
total: cleanText(cells.eq(4).text()),
grade: cleanText(cells.eq(5).text()),
credit: cleanText(cells.eq(6).text())
} : null;
}).get().filter(Boolean);
};
// Subjects and grades
data.theory_subjects = parseSubjects('#ContentPlaceHolder1_GridView1');
data.practical_subjects = parseSubjects('#ContentPlaceHolder1_GridView2');
// Semester grades
data.semester_grades = $('#ContentPlaceHolder1_GridView3 tr:nth-child(2) td')
.map((i, cell) => ({
semester: ["sgpa", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "Cur. CGPA"][i],
sgpa: cleanText($(cell).text())
})).get();
// Failed subjects
const failedSubjects = [
...data.theory_subjects.filter(s => s.grade === 'F').map(s => s.subject_name),
...data.practical_subjects.filter(s => s.grade === 'F').map(s => `${s.subject_name} (Practical)`)
];
data.remarks = failedSubjects.length ? `FAIL: ${failedSubjects.join(', ')}` : 'Pass';
return data;
}; |