-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnol_app.py
executable file
·54 lines (48 loc) · 1.66 KB
/
nol_app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python3
# vim: set ts=4 sts=4 sw=4 et:
from nol_lib import NolCrawler
from pprint import pprint
from json import dumps
from sys import argv, stderr
def update_progress(now, total):
percent = now / total * 100
hashes = int(percent / 2)
blanks = 50 - hashes
print('\r({:5d}/{:5d}) [{}{}] {:6.2f}%'.format(
now, total, '#' * hashes, ' ' * blanks, percent), end='', file=stderr)
stderr.flush()
if __name__ == '__main__':
try:
argv.index('--help')
print('Usage: {} semester start_index'.format(argv[0]))
exit(0)
except ValueError:
pass
semester = argv[1] if len(argv) >= 2 else NolCrawler.get_default_semester()
start_index = int(argv[2]) if len(argv) >= 3 else 0
pretty = True if len(argv) >= 4 else False
crawler = NolCrawler(semester)
count = NolCrawler.get_course_count(semester)
if count == 0:
print('No such semester', file=stderr)
exit(1)
for index in range(start_index, count):
if index % NolCrawler.items_per_page == 0:
update_progress(index, count)
first_error = True
while True:
try:
course = crawler.get_course(index)
break
except Exception as e:
if first_error:
print('', file=stderr)
first_error = False
print('Error at {}: {}'.format(index, str(e)), file=stderr)
course.update({'.__index__.': index})
if pretty:
pprint(course)
else:
print(dumps(course, ensure_ascii=False, sort_keys=True))
update_progress(count, count)
print('', file=stderr)