exportpaperStruct.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. """
  2. 功能:导出主观题结构
  3. 作者:pengchen
  4. 时间:2020/3/12
  5. """
  6. import time
  7. import hashlib
  8. import requests
  9. import config
  10. import json
  11. import os
  12. import csv
  13. questionlist=[]
  14. solvelist=[]
  15. output = config.outputpath + "/" + str(config.examId)
  16. if not os.path.exists(output):
  17. os.makedirs(output)
  18. savepath = output + "/" + "question.csv"
  19. def main():
  20. queryExamMarkingInfo()
  21. with open(savepath, 'w', encoding='utf-8', newline='') as f:
  22. writer = csv.writer(f)
  23. writer.writerow(['科目代码','科目名称','大题名称','main_number','sub_number','分值'])
  24. for row in questionlist:
  25. print(row)
  26. writer.writerow(row)
  27. def getCourse(courseId):
  28. url=config.basedomain+"api/core/basic/course/getCoursesByIdList"
  29. headers =createRpcheader("1","B")
  30. data={
  31. "courseIdList":[courseId]
  32. }
  33. result = requests.post(
  34. url, headers=headers,json=data)
  35. if result.status_code==200:
  36. return result.json()["courseList"][0]
  37. def createRpcheader(appid,appcode):
  38. secretkey = "123456"
  39. t = time.time()
  40. secretstr = ''.join([appid, appcode, str(int(round(t * 1000))), secretkey])
  41. accssToken = hashlib.sha256(secretstr.encode("utf-8")).hexdigest()
  42. headers = {
  43. "App-Id": appid,
  44. "App-Code": appcode,
  45. "Trace-Id": "1222222",
  46. "Access-Token": accssToken,
  47. "timestamp": str(int(round(t * 1000)))
  48. }
  49. return headers
  50. def queryPaperStruct(courseCode,groupCode,paperId,courseName):
  51. url = config.questiondomain + "api/core/questions/extract_config/getPaper"
  52. data={
  53. "examId":config.examId,
  54. "courseCode":courseCode,
  55. "groupCode":groupCode,
  56. "paperId":paperId
  57. }
  58. headers = createRpcheader("3", "Q")
  59. result=requests.post(url,headers=headers,json=data)
  60. if result.status_code==200:
  61. questionGroupList=result.json()["defaultPaper"]["questionGroupList"]
  62. main_number=1
  63. order=1
  64. for questionGroup in questionGroupList:
  65. questionWrapperList=questionGroup["questionWrapperList"]
  66. for questionWrapper in questionWrapperList:
  67. questionUnitWrapperList=questionWrapper["questionUnitWrapperList"]
  68. for questionUnitWrapper in questionUnitWrapperList:
  69. questionbean = []
  70. if questionUnitWrapper["questionType"]=="ESSAY" or questionUnitWrapper["questionType"]=="FILL_UP":
  71. questionbean.append(courseCode)
  72. questionbean.append(courseName)
  73. questionbean.append("第%d大题"%(main_number))
  74. questionbean.append(main_number)
  75. questionbean.append(order)
  76. questionScore=questionUnitWrapper["questionScore"]
  77. questionbean.append(questionScore)
  78. questionlist.append(questionbean)
  79. order=order+1
  80. main_number=main_number+1
  81. else:
  82. solvelist.remove(courseCode)
  83. def queryExamMarkingInfo():
  84. """
  85. 获取阅卷信息
  86. """
  87. url=config.oedomain+"api/core/oe/admin/examRecordForMarking/findExamRecordForMarkingInfo"
  88. data = {
  89. "examId": config.examId,
  90. "courseId": "",
  91. "batchNum": ""
  92. }
  93. headers=createRpcheader("4","OE")
  94. result = requests.post(
  95. url, headers=headers,
  96. json=data)
  97. if result.status_code==200:
  98. examRecordForMarkingBeanList=result.json()['examRecordForMarkingBeanList']
  99. for examRecordForMarkingBean in examRecordForMarkingBeanList:
  100. queryExamValidRecordData(examRecordForMarkingBean["courseId"],1)
  101. else:
  102. print("查询阅卷信息失败")
  103. def getQuestion(questionId,courseCode,paperType,courseName):
  104. url = config.questiondomain + "api/core/questions/extract_config/getQuestion"
  105. headers = createRpcheader("3", "Q")
  106. data = {
  107. "examId": config.examId,
  108. "courseCode": courseCode,
  109. "groupCode": paperType,
  110. "questionId": questionId
  111. }
  112. result = requests.post(
  113. url, headers=headers,
  114. json=data)
  115. if result.status_code==200:
  116. return result.json()
  117. def queryExamValidRecordData(courseId,pageNo):
  118. """
  119. 获取全部考生的阅卷信息
  120. """
  121. url=config.oedomain+"api/core/oe/admin/examRecordForMarking/queryValidExamRecordInfoPage"
  122. data = {
  123. "examId": config.examId,
  124. "courseId": courseId,
  125. "start": pageNo,
  126. "size":200
  127. }
  128. headers = createRpcheader("4","OE")
  129. result = requests.post(
  130. url, headers=headers,
  131. json=data)
  132. if result.status_code==200:
  133. examRecordForMarkingBeanList=result.json()['examRecordForMarkingBeanList']
  134. if len(examRecordForMarkingBeanList) > 0:
  135. for examRecordForMarkingBean in examRecordForMarkingBeanList:
  136. # 取试卷题目
  137. course = getCourse(courseId)
  138. if course["code"] in solvelist:
  139. break
  140. print("开始处理"+str(course["code"]))
  141. solvelist.append(course["code"])
  142. queryPaperStruct(course["code"],examRecordForMarkingBean["paperType"],examRecordForMarkingBean["basePaperId"],course["name"])
  143. #存储到本地
  144. next = result.json()["next"]
  145. queryExamValidRecordData(courseId,next)
  146. else:
  147. print("没有剩余课程")
  148. if __name__=="__main__":
  149. main()