123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- """
- 功能:导出主观题结构
- 作者: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()
|