Skip to content

Instantly share code, notes, and snippets.

@evjeny
Created July 19, 2020 06:11
Show Gist options
  • Save evjeny/da003a70e9a712a12d465585d4119cf8 to your computer and use it in GitHub Desktop.
Save evjeny/da003a70e9a712a12d465585d4119cf8 to your computer and use it in GitHub Desktop.
modified parser for check.ege
import http.client, time, sys, os
from time import sleep
from datetime import datetime
import requests
import json
cookie = "81A52AAAFB6A0D0E5194F6BCCD249D645807B982A7B5A9D9A4A43787D5E2DB02BD6218931141E1291F6E50569A69C3BE56FAABAA34D804B4D517A7A059838102717E464AD7B1244B09EF74099D6B74B0B21CC39BCFDA6364DA7238F461F76C101C0BF9D7"
known = {}
subj2id = {}
stop = False
def request_to_api(method):
global cookie
h = {
"Accept": "*/*",
"Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"Cookie":"Participant="+cookie,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
"Referer": "http://check.ege.edu.ru/exams",
"X-Requested-With": "XMLHttpRequest"
}
response = requests.get("http://check.ege.edu.ru/api/"+method, headers=h)
data = json.loads(response.text)
return data
def get_exam_table(exam_id):
exam_method = "exam/{}".format(exam_id)
try:
data = request_to_api(exam_method)
answers_dict = dict()
for answer_data in data["Answers"]["Answers"]:
type_id = answer_data["Type"]
number = answer_data["Number"]
answer = answer_data["Answer"]
mark = answer_data["Mark"]
if type_id not in answers_dict:
answers_dict[type_id] = dict()
answers_dict[type_id][number] = [answer, mark, -1]
for answer_data in data["ExamInfo"]["PartB"]:
type_id = answer_data["Type"]
number = answer_data["Number"]
max_mark = answer_data["MaxValue"]
if type_id not in answers_dict:
answers_dict[type_id] = dict()
if number not in answers_dict[type_id]:
answers_dict[type_id][number] = [-1, -1, -1]
answers_dict[type_id][number][2] = max_mark
answers_list = []
for type_id, numbers_info in answers_dict.items():
for number, (answer, mark, max_mark) in numbers_info.items():
answers_list.append([type_id, number, answer, mark, max_mark])
answers_list = sorted(answers_list)
blanks_list = []
for blank_info in data["Answers"]["Blanks"]:
title = blank_info["Title"]
url = "https://blanks.rcokio.ru/blanks/" + blank_info["Url"]
blanks_list.append([title, url])
blanks_list = sorted(blanks_list)
except:
answers_list = []
blanks_list = []
return answers_list, blanks_list
def check():
global known, stop
print("prod:\tcheck at %s\n" % (datetime.now().strftime("%H:%M:%S")),end="")
try:
data = request_to_api("exam")["Result"]["Exams"]
except:
print("prod:\tcouldn\"t load data\n",end="")
return
if data == None:
print("prod:\tcouldn\"t load data\n",end="")
return
for i in data:
if i["Subject"] not in known or known[i["Subject"]] != i["TestMark"]:
stop = True
known[i["Subject"]] = i["TestMark"]
subj2id[i["Subject"]] = i["ExamId"]
if stop:
os.system("msg * something new!")
print()
for subject_title, subject_mark in known.items():
print(subject_title, subject_mark)
answers_list, blanks_list = get_exam_table(subj2id[subject_title])
if answers_list == [] or blanks_list == []:
answers_list, blanks_list = get_exam_table(subj2id[subject_title])
print("Номер\tОтвет\tБалл\tМаксимальный балл")
for type_id, number, answer, mark, max_mark in answers_list:
print("{}{}\t{}\t{}\t{}".format(type_id, number, answer, mark, max_mark))
print()
print("Название бланка\tСсылка")
for title, url in blanks_list:
print("{}\t{}".format(title, url))
print("\n\n")
print()
input("press enter to continue\n")
return
def main():
global stop
if sys.platform == "win32":
os.system("chcp 1251 1>nul 2>&1")
try:
while True:
sleep(0.5)
stop = False
try:
check()
except Exception as e:
if stop:
break
#print(e)
print("prod:\tomg, error occured\n",end="")
except KeyboardInterrupt:
pass
print("prod:\tgood bye\n", end="")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment