Skip to content

Instantly share code, notes, and snippets.

@jittat
Created July 21, 2014 19:50
Show Gist options
  • Save jittat/771b03e2716aec0afad2 to your computer and use it in GitHub Desktop.
Save jittat/771b03e2716aec0afad2 to your computer and use it in GitHub Desktop.
Load student lists from all sections from regis.ku.ac.th
import sys
import getpass
import requests
import codecs
from bs4 import BeautifulSoup
CAMPUS = 'B'
def login(username, password):
logindata = { 'UserName': username,
'Password': password,
'Campus': CAMPUS }
loginresult = requests.post('https://regis.ku.ac.th/login.php',
verify=False,
data=logindata)
if 'PHPSESSID' in loginresult.cookies:
return loginresult.cookies['PHPSESSID']
else:
return None
def load_sections(course_number,
year, semester,
cookies):
data = { 'qCs_Code': course_number,
'qYr': year,
'qSm': semester }
rquery = requests.post('https://regis.ku.ac.th/query_cscode.php',
verify=False,data=data, cookies=cookies)
sections = []
doc = BeautifulSoup(rquery.text)
table = doc.find_all('table')[2]
rows = table.find_all('tr')[1:]
for r in rows:
tds = r.find_all('td')
lect = tds[3].text
lab = tds[4].text
sections.append((lect,lab))
return sections
def save_csv(course_number, year, semester,
lect, lab, filename_prefix,
cookies):
filename = '%s%s_%s%s_%s-%s.csv' % (filename_prefix,
course_number,
year, semester,
lect,lab)
fp = codecs.open(filename,'w',encoding='utf8')
class_url = 'https://regis.ku.ac.th/class_cscode.php?Sm=%s&Yr=%s&TCs_Code=%s&TLec=%s&TLab=%s' % (semester,
year,
course_number,
lect,
lab)
classresult = requests.get(class_url,
verify=False,
cookies=cookies,
headers={'Referer':'https://regis.ku.ac.th/query_cscode.php'})
csv_url = 'https://regis.ku.ac.th/grade/download_file/class_%s_%s%s.txt' % (course_number, year, semester)
csv = requests.get(csv_url,
verify=False,
cookies=cookies)
csv.encoding = 'tis-620'
fp.write(csv.text)
fp.close()
def main():
if len(sys.argv) < 5:
print 'Usage: classlist.py [username] [course_number] [year] [semester] <file-prefix>'
quit()
username = sys.argv[1]
password = getpass.getpass('Password: ')
course_number = sys.argv[2]
year = sys.argv[3]
semester = sys.argv[4]
if len(sys.argv) > 5:
filename_prefix = sys.argv[5]
else:
filename_prefix = ''
session_id = login(username, password)
if not session_id:
print 'Login error'
quit()
cookies = { 'PHPSESSID': session_id,
'Check': 'Y' }
sections = load_sections(course_number,
year, semester,
cookies)
for lect,lab in sections:
print 'Loading',lect,lab
save_csv(course_number, year, semester, lect, lab, filename_prefix, cookies)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment