add timeout except and add upload_answer function
This commit is contained in:
160
access.py
160
access.py
@ -12,77 +12,117 @@ class kuser_api:
|
|||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
# login kCOJ
|
# login kCOJ
|
||||||
def login_kcoj(self, username, password):
|
def login_kcoj(self, username, password):
|
||||||
payload = {'name': username,
|
try:
|
||||||
'passwd': password,
|
payload = {'name': username,
|
||||||
'rdoCourse': 1}
|
'passwd': password,
|
||||||
return self.session.post(config.URL + '/Login', data=payload)
|
'rdoCourse': 1}
|
||||||
|
return self.session.post(config.URL + '/Login', data=payload, timeout=0.1)
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return None
|
||||||
|
|
||||||
# check online status
|
# check online status
|
||||||
def check_online(self):
|
def check_online(self):
|
||||||
response = self.session.get(config.URL + '/TopMenu')
|
try:
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.get(config.URL + '/TopMenu', timeout=0.1)
|
||||||
return soup.find('a').get_text() == '線上考試'
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
|
return soup.find('a').get_text() == '線上考試'
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return True
|
||||||
|
|
||||||
# list all questions, deadline and hand-in status
|
# list all questions, deadline and hand-in status
|
||||||
def list_questions(self):
|
def list_questions(self):
|
||||||
questions = {}
|
try:
|
||||||
response = self.session.get(config.URL + '/HomeworkBoard')
|
questions = {}
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.get(config.URL + '/HomeworkBoard', timeout=0.1)
|
||||||
for tag in soup.find_all('tr'):
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
if tag.find('a') == None:
|
for tag in soup.find_all('tr'):
|
||||||
continue
|
if tag.find('a') == None:
|
||||||
else:
|
continue
|
||||||
number = tag.find('a').get_text()
|
else:
|
||||||
deadline = tag.find_all('td')[3].get_text()
|
number = tag.find('a').get_text()
|
||||||
submit = "期限已到" if tag.find_all('td')[4].get_text().strip() == "期限已過" else "期限未到"
|
deadline = tag.find_all('td')[3].get_text()
|
||||||
status = tag.find_all('td')[5].get_text().strip()
|
submit = "期限已到" if tag.find_all('td')[4].get_text().strip() == "期限已過" else "期限未到"
|
||||||
questions[number] = (deadline, submit, status)
|
status = tag.find_all('td')[5].get_text().strip()
|
||||||
return questions
|
questions[number] = (deadline, submit, status)
|
||||||
|
return questions
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return {'Timeout':('Timeout', 'Timeout', 'Timeout')}
|
||||||
|
|
||||||
# show the content of the question
|
# show the content of the question
|
||||||
def show_question(self, number):
|
def show_question(self, number):
|
||||||
response = self.session.get(config.URL + '/showHomework', params={'hwId': number})
|
try:
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.get(config.URL + '/showHomework', params={'hwId': number}, timeout=0.1)
|
||||||
content = str(soup.find('body'))
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
content = content.replace('<body alink="#FFCCFF" bgcolor="#000000" link="#00FFFF" text="#FFFFFF" vlink="#CCFF33">\n', '')
|
content = str(soup.find('body'))
|
||||||
content = content.replace('<!DOCTYPE html>\n\n', '').replace('<meta charset="utf-8"/>\n', '')
|
content = content.replace('<body alink="#FFCCFF" bgcolor="#000000" link="#00FFFF" text="#FFFFFF" vlink="#CCFF33">\n', '')
|
||||||
content = content.replace('<input onclick="history.go( -1 );return true;" type="button" value="上一頁"/>', '')
|
content = content.replace('<!DOCTYPE html>\n\n', '').replace('<meta charset="utf-8"/>\n', '')
|
||||||
content = content.replace('<a href="upLoadHw?hwId=' + number + '"> 繳交作業 </a>', '')
|
content = content.replace('<input onclick="history.go( -1 );return true;" type="button" value="上一頁"/>', '')
|
||||||
content = content.replace('</body>', '').replace('<br/> ', '\n').replace('<br/>', '\n').replace(' ', '')
|
content = content.replace('<a href="upLoadHw?hwId=' + number + '"> 繳交作業 </a>', '')
|
||||||
return content
|
content = content.replace('</body>', '').replace('<br/> ', '\n').replace('<br/>', '\n').replace(' ', '')
|
||||||
|
return content
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return 'Timeout'
|
||||||
|
|
||||||
# list passers of the question
|
# list passers of the question
|
||||||
def list_passers(self, number):
|
def list_passers(self, number):
|
||||||
passers = []
|
try:
|
||||||
response = self.session.get(config.URL + '/success.jsp', params={'HW_ID': number})
|
passers = []
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.get(config.URL + '/success.jsp', params={'HW_ID': number}, timeout=0.1)
|
||||||
for tr in soup.find_all('tr'):
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
passer = tr.get_text().replace('\n', '')
|
for tr in soup.find_all('tr'):
|
||||||
if passer != '學號':
|
passer = tr.get_text().replace('\n', '')
|
||||||
passers += [passer]
|
if passer != '學號':
|
||||||
return passers
|
passers += [passer]
|
||||||
def list_results(self, number):
|
return passers
|
||||||
results = []
|
except requests.exceptions.Timeout:
|
||||||
response = self.session.get(config.URL + '/CheckResult.jsp', params={'questionID': number, 'studentID': self.username})
|
return ['Timeout']
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
|
||||||
for tr in soup.find_all('tr'):
|
# list results of the question
|
||||||
td = tr.find('td')
|
def list_results(self, number, username):
|
||||||
if td.get_text() != '測試編號':
|
try:
|
||||||
results += [(td.get_text(), tr.find_all('td')[1].get_text())]
|
results = []
|
||||||
return results
|
response = self.session.get(config.URL + '/CheckResult.jsp', params={'questionID': number, 'studentID': username}, timeout=0.1)
|
||||||
|
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
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return ['Timeout', 'Timeout']
|
||||||
|
|
||||||
|
# change password
|
||||||
|
def change_password(self, password):
|
||||||
|
try:
|
||||||
|
payload = {'pass': password,
|
||||||
|
'submit': 'sumit'}
|
||||||
|
response = self.session.post(config.URL + '/changePasswd', data=payload, timeout=0.1)
|
||||||
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
|
return str(soup.find('body')).split()[-2] == 'Success'
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return False
|
||||||
|
|
||||||
# delete the answer of the question
|
# delete the answer of the question
|
||||||
def delete_answer(self, number):
|
def delete_answer(self, number):
|
||||||
response = self.session.get(config.URL + '/delHw', params={'title': number})
|
try:
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.get(config.URL + '/delHw', params={'title': number}, timeout=0.1)
|
||||||
return soup.find('body').get_text().replace('\n', '') == 'delete success'
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
# hand in a answer
|
return soup.find('body').get_text().replace('\n', '') == 'delete success'
|
||||||
def upload_answer(self, number):
|
except requests.exceptions.Timeout:
|
||||||
self.session.get(config.URL + '/upLoadHw', params={'hwId': number})
|
return False
|
||||||
response = self.session.post(config.URL + '/upLoadFile')
|
|
||||||
return response.text # unavailable
|
|
||||||
|
|
||||||
def change_password(self, password):
|
# hand in a answer
|
||||||
payload = {'pass': password,
|
def upload_answer(self, number, file_path):
|
||||||
'submit': 'sumit'}
|
try:
|
||||||
response = self.session.post(config.URL + '/changePasswd', data=payload)
|
self.session.get(config.URL + '/upLoadHw', params={'hwId': number}, timeout=0.1)
|
||||||
soup = BeautifulSoup(response.text, 'html.parser')
|
response = self.session.post(config.URL + '/upLoadFile',
|
||||||
return str(soup.find('body')).split()[-2] == 'Success'
|
data={'FileDesc': 'Send from kcoj_bot'},
|
||||||
|
files={'hwFile': open(file_path, 'rb')},
|
||||||
|
timeout=0.1)
|
||||||
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
|
return soup.find('body').get_text().strip() != '您沒有上傳檔案 請重新操作'
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
return False
|
||||||
|
|
||||||
# for debug
|
# for debug
|
||||||
def main():
|
def main():
|
||||||
|
Reference in New Issue
Block a user