@@ -231,7 +231,8 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
231
231
const courseLinks : CourseLink [ ] = await tableHandle . evaluate ( async ( table ) => {
232
232
const tbody = table ?. querySelector ( "tbody" ) ;
233
233
234
- if ( tbody ?. tagName !== "TBODY" ) throw new Error ( "No courses found" ) ;
234
+ // No courses found
235
+ if ( tbody ?. tagName !== "TBODY" ) return [ ] ;
235
236
236
237
const rows = tbody ?. children ;
237
238
@@ -262,12 +263,14 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
262
263
263
264
try {
264
265
// Get groups
265
- const groups : Group [ ] = await puppetPage . evaluate ( ( ) => {
266
+ const { groups, errors } = await puppetPage . evaluate ( ( ) => {
266
267
const trimHTML = ( el ?: Element | null ) => ( el ? el . innerHTML . trim ( ) : "" ) ;
267
268
const activityH3 = document . querySelector ( "span[id$=w-titulo] h3" ) ;
268
269
const activity = trimHTML ( activityH3 ) || "Desconocida" ;
269
-
270
- return Array . from ( document . querySelectorAll ( "span[id$=pgl14]" ) ) . map ( ( root ) => {
270
+ const errors : Error [ ] = [ ] ;
271
+ // Map group
272
+ const groupElements = document . querySelectorAll ( "span[id$=pgl14]" ) ;
273
+ const parsedGroups : Group [ ] = Array . from ( groupElements ) . map ( ( root ) => {
271
274
const teacherSpan = root . querySelector ( "span[id$=ot8]" ) ;
272
275
const spotsSpan = root . querySelector ( "span[id$=ot24]" ) ;
273
276
const spots : number = Number ( trimHTML ( spotsSpan ) ) || 0 ;
@@ -277,6 +280,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
277
280
const schedule : tWeeklySchedule = [ "" , "" , "" , "" , "" , "" , "" ] ;
278
281
let classrooms : string [ ] = [ ] ;
279
282
283
+ // Map schedule & classrooms
280
284
Array . from ( root . querySelectorAll ( "span[id$=pgl10]" ) ) . forEach (
281
285
( scheduledSpace ) => {
282
286
const classroomSpan = scheduledSpace . lastElementChild ?. children [ 1 ] ;
@@ -286,7 +290,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
286
290
. split ( " de " ) ;
287
291
288
292
if ( ! day || ! unparsedSpan ) {
289
- throw new Error ( "Non supported schedule format" ) ;
293
+ return errors . push ( new Error ( "Non supported schedule format" ) ) ;
290
294
}
291
295
292
296
const span = unparsedSpan . replaceAll ( "." , "" ) . split ( " a " ) . join ( "|" ) ;
@@ -338,8 +342,20 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
338
342
teachers : [ teacher || "No Informado" ] ,
339
343
} ;
340
344
} ) ;
345
+
346
+ return { groups : parsedGroups , errors } ;
341
347
} ) ;
342
348
349
+ // Prevent indexing if invalid data
350
+ if ( errors . length ) {
351
+ return {
352
+ code,
353
+ name : courseLink . name ,
354
+ description : courseLink . description ,
355
+ errors,
356
+ } ;
357
+ }
358
+
343
359
debugFirebaseServer (
344
360
event ,
345
361
"api:groups:scrape:getResponse:end" ,
@@ -493,13 +509,13 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
493
509
throw reject ( { statusCode : 400 , statusMessage : "No faculties matched" } ) ;
494
510
}
495
511
496
- const errors : any [ ] = [ ] ;
497
512
let response : ScrapedCourse = {
498
513
groups : [ ] ,
499
514
code : "" , // Valid response would replace this
500
515
name : "" ,
501
516
description : "" ,
502
517
lastScrapedWith : [ level , place ] ,
518
+ errors : [ ] ,
503
519
} ;
504
520
505
521
for ( const facultyValue of facultyValues ) {
@@ -549,8 +565,9 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
549
565
550
566
// Attempt to get groups from this program
551
567
if ( ! typologies . length ) {
552
- const partialResponse = await getResponse ( ) ;
568
+ const { errors = [ ] , ... partialResponse } = await getResponse ( ) ;
553
569
570
+ response . errors ?. push ( ...errors ) ;
554
571
response = {
555
572
...partialResponse ,
556
573
lastScrapedWith : [
@@ -559,6 +576,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
559
576
< uSIAFaculty > facultyValue . alias ,
560
577
< uSIAProgram > programValue . alias ,
561
578
] ,
579
+ errors,
562
580
} ;
563
581
564
582
continue ;
@@ -644,10 +662,11 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
644
662
await puppetPage . waitForNetworkIdle ( ) ;
645
663
646
664
// Attempt to get groups from this typology
647
- const partialResponse = await getResponse ( ) ;
665
+ const { errors = [ ] , ... partial } = await getResponse ( ) ;
648
666
667
+ response . errors ?. push ( ...errors ) ;
649
668
response = {
650
- ...partialResponse ,
669
+ ...partial ,
651
670
lastScrapedWith : [
652
671
level ,
653
672
place ,
@@ -657,7 +676,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
657
676
] ,
658
677
} ;
659
678
} catch ( err ) {
660
- errors . push ( err ) ; // save typologies errors
679
+ response . errors ? .push ( err ) ; // save typologies errors
661
680
662
681
debugFirebaseServer (
663
682
event ,
@@ -668,7 +687,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
668
687
}
669
688
}
670
689
} catch ( err ) {
671
- errors . push ( err ) ; // save programs errors
690
+ response . errors ? .push ( err ) ; // save programs errors
672
691
673
692
debugFirebaseServer (
674
693
event ,
@@ -679,7 +698,7 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
679
698
}
680
699
}
681
700
} catch ( err ) {
682
- errors . push ( err ) ; // save faculties errors
701
+ response . errors ? .push ( err ) ; // save faculties errors
683
702
684
703
debugFirebaseServer (
685
704
event ,
@@ -691,7 +710,9 @@ export default defineConditionallyCachedEventHandler(async (event, instance, aut
691
710
}
692
711
693
712
// If no groups found, throw errors if any
694
- if ( ! response . groups ?. length && errors . length ) throw reject ( errors . pop ( ) ) ;
713
+ if ( ! response . groups ?. length && response . errors ?. length ) {
714
+ throw reject ( response . errors . pop ( ) ) ;
715
+ }
695
716
696
717
resolve ( response ) ;
697
718
} ,
0 commit comments