diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-02 09:15:09 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-02 09:15:09 +0200 |
| commit | 5cb003e51b7388a6acc50b8fd9acb0c69c119eb4 (patch) | |
| tree | da07bfcdcf8bd1baf29cdf4d6d080614692b7385 | |
| parent | 567a0f7a2f248cd25b8a5e0e357f9b10c16a9036 (diff) | |
| download | splus-5cb003e51b7388a6acc50b8fd9acb0c69c119eb4.tar.gz splus-5cb003e51b7388a6acc50b8fd9acb0c69c119eb4.zip | |
rm ISource & FileSource, combine request & parsing, split filter from parser
| -rw-r--r-- | docs/informatik1.ics | 12 | ||||
| -rw-r--r-- | src/config.ts | 6 | ||||
| -rw-r--r-- | src/core/SplusApi.ts | 26 | ||||
| -rw-r--r-- | src/core/SplusParser.ts | 8 | ||||
| -rw-r--r-- | src/index.ts | 14 | ||||
| -rw-r--r-- | src/sources/FileSource.ts | 26 | ||||
| -rw-r--r-- | src/sources/HttpSource.ts | 23 | ||||
| -rw-r--r-- | src/sources/ISource.ts | 3 |
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>; -} |
