Base functionality
This commit is contained in:
parent
ebb9b5e2a9
commit
c944fe3c61
4 changed files with 130 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,3 +1,6 @@
|
||||||
|
# Personal files used during development
|
||||||
|
right_student_schedule.jsp
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
# schoolsoft-schema-parser
|
# schoolsoft-schema-parser
|
||||||
Parses schoolsoft schemas from 'right_student_schema.jsp' file into readable json
|
Parses schoolsoft schedules from 'right_student_schedule.jsp' file into readable json
|
||||||
|
|
1
output.json
Normal file
1
output.json
Normal file
File diff suppressed because one or more lines are too long
125
parser.py
Normal file
125
parser.py
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
|
||||||
|
inputFile = ''
|
||||||
|
outputFile = ''
|
||||||
|
|
||||||
|
outputContent = {}
|
||||||
|
|
||||||
|
# Super janky script to parse right_student_schedule.jsp and save as readable json
|
||||||
|
|
||||||
|
def getInput():
|
||||||
|
|
||||||
|
global inputFile, outputFile
|
||||||
|
|
||||||
|
inputFile = input("Input file: ")
|
||||||
|
outputFile = input("Output file: ")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
|
||||||
|
global inputFile, outputFile
|
||||||
|
|
||||||
|
# Set input and output file if not specified
|
||||||
|
if inputFile == '': inputFile = 'right_student_schedule.jsp'
|
||||||
|
if outputFile == '': outputFile = 'output.json'
|
||||||
|
|
||||||
|
with open(inputFile,'r') as f:
|
||||||
|
|
||||||
|
line = 0 # Start at line 0
|
||||||
|
|
||||||
|
hitSchedules = False
|
||||||
|
|
||||||
|
# Go through all lines of file
|
||||||
|
for x in f.readlines():
|
||||||
|
|
||||||
|
line += 1 # Increment line counter
|
||||||
|
|
||||||
|
if 'class="tab' in x: # Skip all the unnecessary stuff
|
||||||
|
hitSchedules = True
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Skip other unnecessary stuff
|
||||||
|
if not hitSchedules or not 'href="right_student_schedule.jsp?lesson=' in x: continue
|
||||||
|
|
||||||
|
# Prepare entry to add to dict
|
||||||
|
entry = {}
|
||||||
|
|
||||||
|
# Extract weeks active
|
||||||
|
weeks = []
|
||||||
|
|
||||||
|
sectionStartIndex = x.find('Veckor') + 8 # Find start of week section
|
||||||
|
sectionEndIndex = x.find('<',sectionStartIndex) # Find end of week section
|
||||||
|
|
||||||
|
for y in x[sectionStartIndex:sectionEndIndex].split(', '): # Split string of extracted weeks
|
||||||
|
|
||||||
|
if '-' in y: # If processed week is a range, add all weeks in range
|
||||||
|
z = y.split('-')
|
||||||
|
for n in range(int(z[0]), int(z[1])+1):
|
||||||
|
weeks.append(n)
|
||||||
|
else: # If not a range, just add the week
|
||||||
|
weeks.append(int(y))
|
||||||
|
|
||||||
|
|
||||||
|
# Extract lesson ID
|
||||||
|
lesson_id = 0
|
||||||
|
|
||||||
|
sectionStartIndex = x.find('lesson=') + 7
|
||||||
|
sectionEndIndex = x.find('&',sectionStartIndex)
|
||||||
|
|
||||||
|
lesson_id = x[sectionStartIndex:sectionEndIndex]
|
||||||
|
|
||||||
|
|
||||||
|
# Extract class name
|
||||||
|
name = ''
|
||||||
|
|
||||||
|
sectionStartIndex = x.find('title="">') + 16
|
||||||
|
sectionEndIndex = x.find('<',sectionStartIndex)
|
||||||
|
|
||||||
|
name = x[sectionStartIndex:sectionEndIndex]
|
||||||
|
|
||||||
|
|
||||||
|
# Extract class times
|
||||||
|
classStart = '00:00'
|
||||||
|
classEnd = '00:00'
|
||||||
|
|
||||||
|
sectionStartIndex = x.find('>',sectionEndIndex) + 1
|
||||||
|
sectionEndIndex = x.find('<',sectionStartIndex)
|
||||||
|
|
||||||
|
y = x[sectionStartIndex:sectionEndIndex].split('-')
|
||||||
|
classStart = y[0]
|
||||||
|
classEnd = y[1]
|
||||||
|
|
||||||
|
# Extract room id
|
||||||
|
room = '0'
|
||||||
|
|
||||||
|
sectionStartIndex = x.find('>',sectionEndIndex) + 1
|
||||||
|
sectionEndIndex = len(x)
|
||||||
|
|
||||||
|
room = x[sectionStartIndex:sectionEndIndex].strip('\n')
|
||||||
|
|
||||||
|
|
||||||
|
# Add all extracted values to entry
|
||||||
|
entry['name'] = name
|
||||||
|
entry['room'] = room
|
||||||
|
entry['starts'] = classStart
|
||||||
|
entry['ends'] = classEnd
|
||||||
|
entry['weeks'] = weeks
|
||||||
|
|
||||||
|
outputContent[lesson_id] = entry
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
with open(outputFile, 'w') as file:
|
||||||
|
json.dump(outputContent, file)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
getInput()
|
||||||
|
else:
|
||||||
|
inputFile = sys.argv[0]
|
||||||
|
outputFile = sys.argv[1]
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in a new issue