Spaces:
Sleeping
Sleeping
| 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; | |
| }; |