#! /usr/bin/env python3
# necessary modules
import requests
from bs4 import BeautifulSoup
# configurations
import config
class kuser:
def __init__(self, un='', pw=''):
self.username = un
self.password = pw
self.session = requests.Session()
# login kCOJ
def login(self):
payload = {'name': self.username,
'passwd': self.password,
'rdoCourse': 1}
return self.session.post(config.URL + '/Login', data=payload)
# check online status
def check_online(self):
response = self.session.get(config.URL + '/TopMenu')
soup = BeautifulSoup(response.text, 'html.parser')
return soup.find('a').get_text() == '線上考試'
# list all questions, deadline and hand-in status
def list_questions(self):
questions = {}
response = self.session.get(config.URL + '/HomeworkBoard')
soup = BeautifulSoup(response.text, 'html.parser')
for tag in soup.find_all('tr'):
if tag.find('a') == None:
continue
else:
number = tag.find('a').get_text()
deadline = tag.find_all('td')[3].get_text()
status = tag.find_all('td')[5].get_text()
questions[number] = (deadline, status)
return questions
# show the content of the question
def show_question(self, number):
response = self.session.get(config.URL + '/showHomework', params={'hwId': number})
soup = BeautifulSoup(response.text, 'html.parser')
content = str(soup.find('body'))
content = content.replace('
\n', '')
content = content.replace('\n\n', '').replace('\n', '')
content = content.replace('', '')
content = content.replace('', '').replace('
', '\n').replace('
', '\n').replace(' ', '')
return content
# list passers of the question
def list_passers(self, number):
passers = []
response = self.session.get(config.URL + '/success.jsp', params={'HW_ID': number})
soup = BeautifulSoup(response.text, 'html.parser')
for tr in soup.find_all('tr'):
passer = tr.get_text().replace('\n', '')
if passer != '學號':
passers += [passer]
return passers
def list_results(self, number):
results = []
response = self.session.get(config.URL + '/CheckResult.jsp', params={'questionID': number, 'studentID': self.username})
soup = BeautifulSoup(response.text, 'html.parser')
for tr in soup.find_all('tr'):
td = tr.find('td')
if td.get_text() != '測試編號':
results += [(td.get_text(), tr.find_all('td')[1].get_text())]
return results
# delete the answer of the question
def delete_answer(self, number):
response = self.session.get(config.URL + '/delHw', params={'title': number})
soup = BeautifulSoup(response.text, 'html.parser')
return soup.find('body').get_text().replace('\n', '') == 'delete success'
# hand in a answer
def upload_answer(self, number):
response = self.session.get(config.URL + '/upLoadHw', params={'hwId': number})
response = self.session.post(config.URL + '/upLoadFile')
return response.text # unavailable
# for debug
def main():
users = {}
users[config.DEBUG_ID] = kuser(config.DEBUG_USER, config.DEBUG_PSWD)
me = users[config.DEBUG_ID]
me.login()
print(me.upload_answer('012'))
if __name__ == '__main__':
main()