116 lines
No EOL
3.2 KiB
Python
116 lines
No EOL
3.2 KiB
Python
import sys
|
|
import json
|
|
|
|
# Super janky script to parse right_student_schedule.jsp and save as readable json
|
|
|
|
def main():
|
|
|
|
outputContent = {}
|
|
|
|
try:
|
|
inputFile = sys.argv[0]
|
|
outputFile = sys.argv[1]
|
|
except:
|
|
inputFile = 'right_student_schedule.jsp'
|
|
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))
|
|
|
|
weeks.sort()
|
|
|
|
|
|
# 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')
|
|
|
|
if name == 'Lunch': room = '' # Prevent weird extraction of non-existent lunch room
|
|
|
|
|
|
# Add all extracted values to entry
|
|
entry['name'] = name
|
|
entry['room'] = room
|
|
entry['day'] = "" # No idea how to do this
|
|
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, indent=4)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main() |