""" 功能:导出主观题结构 作者:pengchen 时间:2020/3/12 """ import time import hashlib import requests import config import json import os import csv questionlist=[] solvelist=[] output = config.outputpath + "/" + str(config.examId) if not os.path.exists(output): os.makedirs(output) savepath = output + "/" + "question.csv" def main(): queryExamMarkingInfo() with open(savepath, 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) writer.writerow(['科目代码','科目名称','大题名称','main_number','sub_number','分值']) for row in questionlist: print(row) writer.writerow(row) def getCourse(courseId): url=config.basedomain+"api/core/basic/course/getCoursesByIdList" headers =createRpcheader("1","B") data={ "courseIdList":[courseId] } result = requests.post( url, headers=headers,json=data) if result.status_code==200: return result.json()["courseList"][0] def createRpcheader(appid,appcode): secretkey = "123456" t = time.time() secretstr = ''.join([appid, appcode, str(int(round(t * 1000))), secretkey]) accssToken = hashlib.sha256(secretstr.encode("utf-8")).hexdigest() headers = { "App-Id": appid, "App-Code": appcode, "Trace-Id": "1222222", "Access-Token": accssToken, "timestamp": str(int(round(t * 1000))) } return headers def queryPaperStruct(courseCode,groupCode,paperId,courseName): url = config.questiondomain + "api/core/questions/extract_config/getPaper" data={ "examId":config.examId, "courseCode":courseCode, "groupCode":groupCode, "paperId":paperId } headers = createRpcheader("3", "Q") result=requests.post(url,headers=headers,json=data) if result.status_code==200: questionGroupList=result.json()["defaultPaper"]["questionGroupList"] main_number=1 order=1 for questionGroup in questionGroupList: questionWrapperList=questionGroup["questionWrapperList"] for questionWrapper in questionWrapperList: questionUnitWrapperList=questionWrapper["questionUnitWrapperList"] for questionUnitWrapper in questionUnitWrapperList: questionbean = [] if questionUnitWrapper["questionType"]=="ESSAY" or questionUnitWrapper["questionType"]=="FILL_UP": questionbean.append(courseCode) questionbean.append(courseName) questionbean.append("第%d大题"%(main_number)) questionbean.append(main_number) questionbean.append(order) questionScore=questionUnitWrapper["questionScore"] questionbean.append(questionScore) questionlist.append(questionbean) order=order+1 main_number=main_number+1 else: solvelist.remove(courseCode) def queryExamMarkingInfo(): """ 获取阅卷信息 """ url=config.oedomain+"api/core/oe/admin/examRecordForMarking/findExamRecordForMarkingInfo" data = { "examId": config.examId, "courseId": "", "batchNum": "" } headers=createRpcheader("4","OE") result = requests.post( url, headers=headers, json=data) if result.status_code==200: examRecordForMarkingBeanList=result.json()['examRecordForMarkingBeanList'] for examRecordForMarkingBean in examRecordForMarkingBeanList: queryExamValidRecordData(examRecordForMarkingBean["courseId"],1) else: print("查询阅卷信息失败") def getQuestion(questionId,courseCode,paperType,courseName): url = config.questiondomain + "api/core/questions/extract_config/getQuestion" headers = createRpcheader("3", "Q") data = { "examId": config.examId, "courseCode": courseCode, "groupCode": paperType, "questionId": questionId } result = requests.post( url, headers=headers, json=data) if result.status_code==200: return result.json() def queryExamValidRecordData(courseId,pageNo): """ 获取全部考生的阅卷信息 """ url=config.oedomain+"api/core/oe/admin/examRecordForMarking/queryValidExamRecordInfoPage" data = { "examId": config.examId, "courseId": courseId, "start": pageNo, "size":200 } headers = createRpcheader("4","OE") result = requests.post( url, headers=headers, json=data) if result.status_code==200: examRecordForMarkingBeanList=result.json()['examRecordForMarkingBeanList'] if len(examRecordForMarkingBeanList) > 0: for examRecordForMarkingBean in examRecordForMarkingBeanList: # 取试卷题目 course = getCourse(courseId) if course["code"] in solvelist: break print("开始处理"+str(course["code"])) solvelist.append(course["code"]) queryPaperStruct(course["code"],examRecordForMarkingBean["paperType"],examRecordForMarkingBean["basePaperId"],course["name"]) #存储到本地 next = result.json()["next"] queryExamValidRecordData(courseId,next) else: print("没有剩余课程") if __name__=="__main__": main()