-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathapp.py
More file actions
150 lines (128 loc) · 4.15 KB
/
app.py
File metadata and controls
150 lines (128 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from gevent import monkey
monkey.patch_all()
from flask import Flask, jsonify, render_template, request
import requests
import base64
import re
import zipfile
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open
import json
import os
def readPDF(pdfFile):
pdfFile = open(pdfFile, "rb")
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
process_pdf(rsrcmgr, device, pdfFile)
device.close()
content = retstr.getvalue()
retstr.close()
pdfFile.close()
return content
def getcode(text):
code = re.findall(r"准考证号:(\d+)", text)
name = re.findall(r"姓名:(.+)\n", text)
if code:
code = code[0]
else:
code = None
if name:
name = name[0]
else:
name = None
if code is not None:
return {"code": code, "name": name}
else:
return None
def un_zip(file_name):
"""unzip zip file"""
zip_file = zipfile.ZipFile(file_name)
for names in zip_file.namelist():
file = (zip_file.extract(names, "./data/"))
zip_file.close()
os.remove(file_name) # 删除文件,本地不进行保存
return file
def down(sid):
r = requests.get("http://cet-bm.neea.edu.cn/Home/DownTestTicket?SID=" + sid)
data = r.content
with open("data/" + sid + ".zip", "wb") as f:
f.write(data)
return "data/" + sid + ".zip"
def _query(province, code, name, number, cookie):
jar = requests.cookies.RequestsCookieJar()
cookie = cookie.split("分")
jar.set('ASP.NET_SessionId', cookie[0], domain='cet-bm.neea.edu.cn', path='/')
jar.set('BIGipServercet_pool', cookie[1], domain='cet-bm.neea.edu.cn', path='/')
param = dict(provinceCode=province, IDTypeCode=1, IDNumber=number, Name=name, verificationCode=code)
r = requests.post("http://cet-bm.neea.edu.cn/Home/ToQuickPrintTestTicket", param, cookies=jar)
text = r.text
data = None
try:
jsonld = json.loads(text)
if jsonld.get("ExceuteResultType") == 1:
sid = re.findall('SID":"(.+)","SubjectName"', jsonld.get("Message"))
if sid:
file = down(sid[0])
file = un_zip(file)
text = readPDF(file)
os.remove(file) # 删除文件,不进行留存
code = getcode(text)
if code.get("code"):
data = code
ExceuteResultType = 1
Message = "查询成功"
else:
Message = "查询失败"
ExceuteResultType = -1
else:
return jsonld
except Exception as e:
print(e)
ExceuteResultType = -1
Message = "系统错误"
return dict(ExceuteResultType=ExceuteResultType, Message=Message, data=data)
app = Flask(__name__)
@app.route("/code")
def code():
"""
获取验证码,返回cookie,和 验证码的b64
:return:
"""
r = requests.get("http://cet-bm.neea.edu.cn/Home/VerifyCodeImg")
print((r.cookies))
cookies = r.cookies['ASP.NET_SessionId'] + "分" + r.cookies['BIGipServercet_pool']
content = r.content
img = 'data:image/jpeg;base64,' + base64.b64encode(content).decode()
return jsonify({"data": img, "cookie": cookies})
@app.route('/')
def hello_world():
"""
获取页面
:return:
"""
return render_template("index.html")
@app.route('/query', methods=['POST', 'GET'])
def query():
"""
province: province,
number: number,
code: code,
name: name,
:return:
"""
province = request.form.get("province")
number = request.form.get("number")
code = request.form.get("code")
name = request.form.get("name")
cookie = request.form.get("cookie")
if province and number and code and name and cookie:
return jsonify(_query(province, code, name, number, cookie))
else:
return jsonify({"ExceuteResultType": '-1', "Message": "信息不全"})
if __name__ == '__main__':
app.run(debug=True)