ocr_script.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. # -*- coding: utf-8 -*-
  2. import base64
  3. from PIL import Image
  4. import ddddocr
  5. import json
  6. from http.server import BaseHTTPRequestHandler, HTTPServer
  7. import requests
  8. import ssl
  9. from urllib.parse import urlencode
  10. ssl._create_default_https_context = ssl._create_unverified_context
  11. class MyRequestHandler(BaseHTTPRequestHandler):
  12. def do_GET(self):
  13. self.send_response(200)
  14. self.send_header('Content-type', 'text/html')
  15. self.end_headers()
  16. self.wfile.write(b"Hello, this is a GET response!")
  17. def do_POST(self):
  18. content_length = int(self.headers['Content-Length'])
  19. post_data = self.rfile.read(content_length)
  20. try:
  21. data = json.loads(post_data.decode('utf-8'))
  22. print(data)
  23. cmd = data.get('cmd')
  24. print(cmd)
  25. if cmd == "ocr":
  26. base64_image_data = data.get('base64_image_data') # 确保键名与发送的数据匹配
  27. if not base64_image_data:
  28. raise ValueError("Missing 'base64_image_data' in JSON payload")
  29. print("This is OCR command.")
  30. ocr(base64_image_data,self)
  31. elif cmd == "create_link":
  32. name = data.get('name')
  33. bookId = data.get('bookId')
  34. topUpTemplateId = data.get('topUpTemplateId')
  35. passBackTemplateId = data.get('passBackTemplateId')
  36. paidPoint = data.get('paidPoint')
  37. token = data.get('token')
  38. create_link(name,bookId,topUpTemplateId,passBackTemplateId,paidPoint,token,self)
  39. print("Command is empty.")
  40. elif cmd == "chapterSpread":
  41. if not all(k in data for k in ['cbid', 'OPENSESSID']):
  42. raise ValueError("Missing required parameters for chapterSpread")
  43. response = chapterSpread(data)
  44. elif cmd == "get_fq_book":
  45. key = data.get('key')
  46. response = {
  47. "message": "Data received successfully",
  48. "received_data": getFqBook(key,None),
  49. }
  50. response_str = json.dumps(response)
  51. self.send_response(200)
  52. self.send_header('Content-type', 'application/json')
  53. self.end_headers()
  54. self.wfile.write(response_str.encode('utf-8'))
  55. else:
  56. self.send_response(200)
  57. self.send_header('Content-type', 'application/json')
  58. self.end_headers()
  59. self.wfile.write("not func")
  60. print("Unknown command.")
  61. except json.JSONDecodeError:
  62. self.send_error(400, "Invalid JSON data")
  63. except (ValueError, base64.binascii.Error, IOError) as e:
  64. self.send_error(400, f"Invalid base64 image data: {str(e)}")
  65. except Exception as e:
  66. self.send_error(500, f"Internal server error: {str(e)}")
  67. def ocr(base64_image_data,server):
  68. image_data = base64.b64decode(base64_image_data)
  69. image = Image.open(io.BytesIO(image_data)) # 直接在内存中处理图像
  70. ocr = ddddocr.DdddOcr()
  71. result = ocr.classification(image)
  72. response = {
  73. "message": "Data received successfully",
  74. "received_data": result,
  75. }
  76. response_str = json.dumps(response)
  77. server.send_response(200)
  78. server.send_header('Content-type', 'application/json')
  79. server.end_headers()
  80. server.wfile.write(response_str.encode('utf-8'))
  81. def create_link(name,bookId,topUpTemplateId,passBackTemplateId,paidPoint,token,server):
  82. url = "https://ms.zhangwenpindu.cn/manage/distribution/createLink"
  83. data = {
  84. "name": name,
  85. "bookId": bookId,
  86. "passBackTemplateId": passBackTemplateId,#"5", 回传规则
  87. "adPassbackTemplateId": "",
  88. "topUpTemplateId": topUpTemplateId, #充值
  89. "mediaChannel": "1", #媒体渠道
  90. "group": "35", #合作站点
  91. "paidPoint": paidPoint,#"", #卡点收费
  92. "site": "5" #推广平台
  93. }
  94. headers['Authorization']=f'Bearer {token}'
  95. res = requests.post(url, headers=headers, data=data).json()
  96. # f'{"=" * 40}\n'
  97. # f'原始ID:{res.get("data").get("originalId")}\n'
  98. # f'小程序ID:{res.get("data").get("appId")}\n'
  99. # f'小程序启动页面:{res.get("data").get("launchPath")}\n'
  100. # f'小程序启动参数:{res.get("data").get("launchParam")}\n'
  101. # f'跳转路径参数:{res.get("data").get("fullPath")}\n'
  102. # f'微信站外链接:{res.get("data").get("wxMountLink")}\n'
  103. # f'{"=" * 40}\n',
  104. response = {
  105. "message": "create_link successfully",
  106. "received_data":{"originalId":res.get("data").get("originalId"),
  107. "appId":res.get("data").get("appId"),
  108. "launchPath":res.get("data").get("launchPath"),
  109. "fullPath":res.get("data").get("fullPath"),
  110. "wxMountLink":res.get("data").get("wxMountLink")}
  111. }
  112. response_str = json.dumps(response)
  113. server.send_response(200)
  114. server.send_header('Content-type', 'application/json')
  115. server.end_headers()
  116. server.wfile.write(response_str.encode('utf-8'))
  117. # print(res)
  118. print(data)
  119. def run(server_class=HTTPServer, handler_class=MyRequestHandler, port=8080):
  120. server_address = ('', port)
  121. httpd = server_class(server_address, handler_class)
  122. print(f"Serving on port {port}")
  123. httpd.serve_forever()
  124. headers_str = '''
  125. Accept: application/json, text/plain, */*
  126. Accept-Language: zh-CN,zh;q=0.9
  127. Cache-Control: no-cache
  128. Connection: keep-alive
  129. Content-Type: application/x-www-form-urlencoded
  130. Origin: https://manage.zhangwenpindu.cn
  131. Pragma: no-cache
  132. Referer: https://manage.zhangwenpindu.cn/
  133. Sec-Fetch-Dest: empty
  134. Sec-Fetch-Mode: cors
  135. Sec-Fetch-Site: same-site
  136. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
  137. sec-ch-ua: "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"
  138. sec-ch-ua-mobile: ?0
  139. sec-ch-ua-platform: "Windows"
  140. '''
  141. headers = dict(
  142. [[y.strip() for y in x.strip().split(':', 1)] for x in headers_str.strip().split('\n') if x.strip()])
  143. def getFqBook( key,post_data=None):
  144. return {
  145. 'header': '',
  146. 'body': '',
  147. 'http_code': 0
  148. }
  149. def chapterSpread( data):
  150. cookies = {
  151. 'Hm_lvt_990f9ab9737a266517417cc2949bb3f4': '1736394515',
  152. 'csrfToken': 'vN8OkvTZZfzerTHhodh7rc81',
  153. 'OPENSESSID': 'ada39ae2c1286d1be3bd32e300951fff',
  154. 'yw_open_token': '6785d8c2ec046',
  155. 'is_read_notice': '6785d8c2ec046',
  156. 'sidebarStatus': '0',
  157. }
  158. headers = {
  159. 'authority': 'open.yuewen.com',
  160. 'accept': 'application/json, text/plain, */*',
  161. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
  162. }
  163. url = 'https://open.yuewen.com/api/wechatspread/chapterSpread'
  164. params = {'cbid': data['cbid']}
  165. response = requests.get(url, params=params, cookies=cookies, headers=headers)
  166. print(cookies)
  167. print(data['cbid'])
  168. print(response.json())
  169. return response.json()
  170. if __name__ == "__main__":
  171. import io # 确保导入了 io 模块以处理内存中的图像
  172. run(port=8080)