summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-05-02 09:15:09 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-05-02 09:15:09 +0200
commit5cb003e51b7388a6acc50b8fd9acb0c69c119eb4 (patch)
treeda07bfcdcf8bd1baf29cdf4d6d080614692b7385
parent567a0f7a2f248cd25b8a5e0e357f9b10c16a9036 (diff)
downloadsplus-5cb003e51b7388a6acc50b8fd9acb0c69c119eb4.tar.gz
splus-5cb003e51b7388a6acc50b8fd9acb0c69c119eb4.zip
rm ISource & FileSource, combine request & parsing, split filter from parser
-rw-r--r--docs/informatik1.ics12
-rw-r--r--src/config.ts6
-rw-r--r--src/core/SplusApi.ts26
-rw-r--r--src/core/SplusParser.ts8
-rw-r--r--src/index.ts14
-rw-r--r--src/sources/FileSource.ts26
-rw-r--r--src/sources/HttpSource.ts23
-rw-r--r--src/sources/ISource.ts3
8 files changed, 45 insertions, 73 deletions
diff --git a/docs/informatik1.ics b/docs/informatik1.ics
index b570fea..e628b6e 100644
--- a/docs/informatik1.ics
+++ b/docs/informatik1.ics
@@ -4,7 +4,7 @@ PRODID:-//sebbo.net//ical-generator//EN
BEGIN:VEVENT
UID:4d3974642875c102@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180502T080000Z
DTEND:20180502T093000Z
SUMMARY:Diskrete Strukturen
@@ -13,7 +13,7 @@ END:VEVENT
BEGIN:VEVENT
UID:5382f59c285e14e1@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180503T080000Z
DTEND:20180503T093000Z
SUMMARY:Diskrete Strukturen
@@ -22,7 +22,7 @@ END:VEVENT
BEGIN:VEVENT
UID:c055fa0e8f639679@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180430T121500Z
DTEND:20180430T134500Z
SUMMARY:Technische Grundlagen der Informatik - VL
@@ -31,7 +31,7 @@ END:VEVENT
BEGIN:VEVENT
UID:c4323de907a5dca9@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180502T121500Z
DTEND:20180502T134500Z
SUMMARY:Technische Grundlagen der Informatik - VL
@@ -41,7 +41,7 @@ END:VEVENT
BEGIN:VEVENT
UID:416dc6826b4fc8df@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180430T140000Z
DTEND:20180430T153000Z
SUMMARY:Einführung in die Informatik
@@ -50,7 +50,7 @@ END:VEVENT
BEGIN:VEVENT
UID:c646de413f83e964@localhost
SEQUENCE:0
-DTSTAMP:20180501T183705Z
+DTSTAMP:20180502T071218Z
DTSTART:20180430T154500Z
DTEND:20180430T171500Z
SUMMARY:Einführung in die Informatik
diff --git a/src/config.ts b/src/config.ts
index b6ed360..77ab16e 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -1,19 +1,17 @@
-import {ISource} from './sources/ISource';
import {ISink} from './sinks/ISink';
import {ILectureFilter} from './core/ILecture';
-import {HttpSource} from './sources/HttpSource';
import {IcalSink} from './sinks/IcalSink';
export interface SplusConfig {
- source: ISource;
+ course: string;
sink: ISink;
lectureFilter?: ILectureFilter;
}
export const config: SplusConfig = {
- source: new HttpSource('#SPLUS7A3292'),
+ course: '#SPLUS7A3292',
sink: new IcalSink('docs/informatik1.ics'),
lectureFilter: lecture => {
diff --git a/src/core/SplusApi.ts b/src/core/SplusApi.ts
new file mode 100644
index 0000000..47b5a70
--- /dev/null
+++ b/src/core/SplusApi.ts
@@ -0,0 +1,26 @@
+import * as request from 'request-promise-native';
+import {SplusParser} from './SplusParser';
+import {ILecture} from './ILecture';
+
+export class SplusApi {
+ private static _base_uri = 'http://splus.ostfalia.de/semesterplan123.php';
+
+ private static splusRequest(course: string, weekOfYear: number): PromiseLike<string> {
+ return request({
+ method: 'POST',
+ uri: this._base_uri,
+ qs: {
+ identifier: course,
+ },
+ formData: {
+ weeks: weekOfYear.toString(),
+ },
+ });
+ }
+
+ static async getData(course: string, weekOfYear: number): Promise<ILecture[]> {
+ const data = await this.splusRequest(course, weekOfYear);
+ const lectures = new SplusParser(data).getLectures();
+ return lectures;
+ }
+}
diff --git a/src/core/SplusParser.ts b/src/core/SplusParser.ts
index ae634b1..82a514e 100644
--- a/src/core/SplusParser.ts
+++ b/src/core/SplusParser.ts
@@ -1,5 +1,5 @@
import {load} from 'cheerio';
-import {ILecture, ILectureFilter} from './ILecture';
+import {ILecture} from './ILecture';
interface IBlock {
title: string;
@@ -32,7 +32,7 @@ export class SplusParser {
this.parseTable();
}
- getLectures(filter?: ILectureFilter): ILecture[] {
+ getLectures(): ILecture[] {
let lectures: ILecture[] = [];
for (let i = 0; i < this.blocks.length; i++) {
@@ -54,9 +54,7 @@ export class SplusParser {
lecturer: block.lecturer
};
- if(!filter || filter(lecture)) {
- lectures.push(lecture);
- }
+ lectures.push(lecture);
}
}
}
diff --git a/src/index.ts b/src/index.ts
index 47bc00c..4fa7c20 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,13 +1,13 @@
import * as moment from 'moment';
-import {SplusParser} from './core/SplusParser';
import {config} from './config';
+import {SplusApi} from './core/SplusApi';
import {IEvent} from './core/IEvent';
-const baseDate = moment().startOf('week');
-
-config.source.getData(baseDate.weeks()).then(async data => {
- const lectures = new SplusParser(data.toString()).getLectures(config.lectureFilter);
+async function main() {
+ const baseDate = moment().startOf('week');
+ const unfilteredLectures = await SplusApi.getData(config.course, baseDate.weeks());
+ const lectures = unfilteredLectures.filter(config.lectureFilter);
for (let i = 0; i < lectures.length; i++) {
const lec = lectures[i];
@@ -38,4 +38,6 @@ config.source.getData(baseDate.weeks()).then(async data => {
}
await config.sink.commit();
-});
+}
+
+main();
diff --git a/src/sources/FileSource.ts b/src/sources/FileSource.ts
deleted file mode 100644
index 57e51ae..0000000
--- a/src/sources/FileSource.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import {readFile} from 'fs';
-
-import {ISource} from './ISource';
-
-export class FileSource implements ISource {
- private _path: string;
- private _data: string = null;
-
- constructor(course: string) {
- }
-
- getData(weekOfYear: number): Promise<string> {
- if (this._data) {
- return Promise.resolve(this._data);
- }
-
- return new Promise<string>((resolve, reject) => {
- readFile(this._path, (err, data) => {
- if (err) return reject(err);
-
- this._data = data.toString();
- resolve(this._data);
- });
- });
- }
-}
diff --git a/src/sources/HttpSource.ts b/src/sources/HttpSource.ts
deleted file mode 100644
index f9391aa..0000000
--- a/src/sources/HttpSource.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import * as request from 'request-promise-native';
-
-import {ISource} from './ISource';
-
-export class HttpSource implements ISource {
- private _base_uri = 'http://splus.ostfalia.de/semesterplan123.php';
-
- constructor(private _course: string) {
- }
-
- getData(weekOfYear: number): PromiseLike<string> {
- return request({
- method: 'POST',
- uri: this._base_uri,
- qs: {
- identifier: this._course,
- },
- formData: {
- weeks: weekOfYear.toString(),
- },
- });
- }
-}
diff --git a/src/sources/ISource.ts b/src/sources/ISource.ts
deleted file mode 100644
index 3605260..0000000
--- a/src/sources/ISource.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface ISource {
- getData(weekOfYear: number): PromiseLike<string>;
-}