rtu-nodarbibas-api
Version:
NPM package for scraping RTU schedule data from nodarbibas.rtu.lv
265 lines (242 loc) • 7.36 kB
TypeScript
export declare const apiClient: RTUApiClient;
export declare interface BreadcrumbItem {
text: string;
href: string | null;
isActive: boolean;
}
export declare interface Course {
id: number;
name: string;
code: string;
semester: number;
programId: number;
}
export declare interface CoursesByProgramParams {
semesterId: number;
programId: number;
}
export declare interface Faculty {
facultyName: string;
facultyCode: string;
programs: Program[];
}
export declare interface FacultyInfo {
name: string;
code: string;
programCount: number;
}
export declare interface Group {
id: number;
name: string;
studentCount: number;
courseId: number;
}
export declare interface GroupsByCourseParams {
courseId: number;
semesterId: number;
programId: number;
}
export declare const htmlParser: RTUHtmlParser;
export declare interface PageMetadata {
title: string;
description: string;
keywords: string;
charset: string;
}
export declare interface Pagination {
currentPage: number;
totalPages: number;
hasNext: boolean;
hasPrevious: boolean;
nextUrl: string | null;
previousUrl: string | null;
}
export declare interface Program {
id: number;
name: string;
code: string;
tokens: string;
}
/**
* RTU API Client for making POST requests to backend endpoints
* All methods in this class fetch live data from the RTU scheduling system
*/
export declare class RTUApiClient {
private client;
private cache;
private readonly cacheTimeout;
constructor(config?: RTUApiConfig);
/**
* Fetch semester program events for a specific month and year
* @param params Parameters including semesterProgramId, year, and month
* @returns Array of semester events
*/
fetchSemesterProgramEvents(params: SemesterProgramEventsParams): Promise<SemesterEvent[]>;
/**
* Fetch subjects for a semester program
* @param semesterProgramId The ID of the semester program
* @returns Array of subjects
*/
fetchSemesterProgramSubjects(semesterProgramId: number): Promise<Subject[]>;
/**
* Check if a semester program schedule is published
* @param semesterProgramId The ID of the semester program
* @returns Boolean indicating if the program is published
*/
checkSemesterProgramPublished(semesterProgramId: number): Promise<boolean>;
/**
* Find groups associated with a specific course
* @param params Parameters including courseId, semesterId, and programId
* @returns Array of groups
*/
findGroupsByCourse(params: GroupsByCourseParams): Promise<Group[]>;
/**
* Find courses available in a specific program
* @param params Parameters including semesterId and programId
* @returns Array of courses
*/
findCoursesByProgram(params: CoursesByProgramParams): Promise<Course[]>;
/**
* Clear all cached data
*/
clearCache(): void;
/**
* Clear expired cache entries
*/
clearExpiredCache(): void;
private validateSemesterProgramEventsParams;
private validateGroupsByCourseParams;
private validateCoursesByProgramParams;
private getFromCache;
private setCache;
}
export declare interface RTUApiConfig {
baseUrl?: string;
timeout?: number;
userAgent?: string;
cacheTimeout?: number;
}
/**
* RTU HTML Parser for extracting structured data from hardcoded HTML
* All methods in this class parse static HTML content from the RTU website
*/
export declare class RTUHtmlParser {
/**
* Parse semester options from HTML select element
* @param html HTML content containing semester select
* @returns Array of parsed semesters
*/
parseHtmlSemesters(html: string | null | undefined): Semester[];
/**
* Parse hidden semester metadata from HTML inputs
* @param html HTML content containing semester metadata
* @returns Semester metadata object
*/
parseHtmlSemesterMetadata(html: string): SemesterMetadata;
/**
* Parse program options grouped by faculty from HTML select
* @param html HTML content containing program select
* @returns Array of faculties with their programs
*/
parseHtmlPrograms(html: string): Faculty[];
/**
* Parse schedule table data from HTML table
* @param html HTML content containing schedule table
* @returns Array of schedule events
*/
parseHtmlScheduleTable(html: string): ScheduleEvent[];
/**
* Parse faculty information from HTML
* @param html HTML content containing faculty list
* @returns Array of faculty information
*/
parseHtmlFaculties(html: string): FacultyInfo[];
/**
* Parse breadcrumb navigation from HTML
* @param html HTML content containing breadcrumb navigation
* @returns Array of breadcrumb items
*/
parseHtmlBreadcrumb(html: string): BreadcrumbItem[];
/**
* Parse pagination information from HTML
* @param html HTML content containing pagination
* @returns Pagination object
*/
parseHtmlPagination(html: string): Pagination;
/**
* Parse page metadata from HTML head
* @param html HTML content containing page metadata
* @returns Page metadata object
*/
parseHtmlMetadata(html: string): PageMetadata;
/**
* Parse time slot information from time range string
* @param timeRange Time range string (e.g., "09:00 - 10:30")
* @returns Time slot object with start, end, and duration
*/
parseTimeSlot(timeRange: string): TimeSlot;
private parseValidTimeSlot;
/**
* Clean and normalize text content
* @param text Raw text content
* @returns Normalized text
*/
normalizeText(text: string): string;
/**
* Extract numeric value from text
* @param text Text containing numbers
* @returns Extracted number or 0 if not found
*/
extractNumber(text: string): number;
private extractFacultyCode;
private extractProgramCode;
private timeToMinutes;
}
export declare interface ScheduleEvent {
time: string;
subject: string;
lecturer: string;
location: string;
type: string;
group: string;
}
export declare interface Semester {
id: number;
name: string;
isSelected: boolean;
}
export declare interface SemesterEvent {
id: number;
title: string;
start: string;
end: string;
location: string;
lecturer: string;
type: string;
group: string;
course: string;
}
export declare interface SemesterMetadata {
startDate: string;
endDate: string;
language: string;
}
export declare interface SemesterProgramEventsParams {
semesterProgramId: number;
year: number;
month: number;
}
export declare interface Subject {
id: number;
name: string;
code: string;
credits: number;
semester: number;
type: string;
}
export declare interface TimeSlot {
start: string;
end: string;
duration: number;
}
export { }