understanding commited on
Commit
1406b5a
·
verified ·
1 Parent(s): b932588

Create contentModel.js

Browse files
Files changed (1) hide show
  1. contentModel.js +58 -0
contentModel.js ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const cheerio = require('cheerio');
2
+
3
+ const cleanText = (text) => text.replace(/\s+/g, ' ').trim();
4
+
5
+ module.exports.parseStudentData = (html, regNo) => {
6
+ const $ = cheerio.load(html);
7
+ const getText = selector => cleanText($(selector).text()) || 'N/A';
8
+
9
+ // Base information
10
+ const data = {
11
+ university: "Bihar Engineering University, Patna",
12
+ registration_no: regNo,
13
+ exam_name: getText('#ContentPlaceHolder1_DataList4_Exam_Name_0'),
14
+ semester: getText('#ContentPlaceHolder1_DataList2_Exam_Name_0'),
15
+ exam_date: getText('#ContentPlaceHolder1_DataList2 td:nth-of-type(2)').split(':').pop(),
16
+ student_name: getText('#ContentPlaceHolder1_DataList1_StudentNameLabel_0'),
17
+ college_name: getText('#ContentPlaceHolder1_DataList1_CollegeNameLabel_0'),
18
+ course_name: getText('#ContentPlaceHolder1_DataList1_CourseLabel_0'),
19
+ sgpa: getText('#ContentPlaceHolder1_DataList5_GROSSTHEORYTOTALLabel_0'),
20
+ publish_date: getText('#ContentPlaceHolder1_DataList3 tr:nth-of-type(2) td').split(':').pop()
21
+ };
22
+
23
+ // Subject parser
24
+ const parseSubjects = (selector) => {
25
+ return $(`${selector} tr`).slice(1).map((i, row) => {
26
+ const cells = $(row).find('td');
27
+ return cells.length >= 7 ? {
28
+ subject_code: cleanText(cells.eq(0).text()),
29
+ subject_name: cleanText(cells.eq(1).text()),
30
+ ese: cleanText(cells.eq(2).text()),
31
+ ia: cleanText(cells.eq(3).text()),
32
+ total: cleanText(cells.eq(4).text()),
33
+ grade: cleanText(cells.eq(5).text()),
34
+ credit: cleanText(cells.eq(6).text())
35
+ } : null;
36
+ }).get().filter(Boolean);
37
+ };
38
+
39
+ // Subjects and grades
40
+ data.theory_subjects = parseSubjects('#ContentPlaceHolder1_GridView1');
41
+ data.practical_subjects = parseSubjects('#ContentPlaceHolder1_GridView2');
42
+
43
+ // Semester grades
44
+ data.semester_grades = $('#ContentPlaceHolder1_GridView3 tr:nth-child(2) td')
45
+ .map((i, cell) => ({
46
+ semester: ["sgpa", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "Cur. CGPA"][i],
47
+ sgpa: cleanText($(cell).text())
48
+ })).get();
49
+
50
+ // Failed subjects
51
+ const failedSubjects = [
52
+ ...data.theory_subjects.filter(s => s.grade === 'F').map(s => s.subject_name),
53
+ ...data.practical_subjects.filter(s => s.grade === 'F').map(s => `${s.subject_name} (Practical)`)
54
+ ];
55
+ data.remarks = failedSubjects.length ? `FAIL: ${failedSubjects.join(', ')}` : 'Pass';
56
+
57
+ return data;
58
+ };