ocr_script.py 9.3 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. cmd = data.get('cmd')
  23. if cmd == "ocr":
  24. base64_image_data = data.get('base64_image_data') # 确保键名与发送的数据匹配
  25. if not base64_image_data:
  26. raise ValueError("Missing 'base64_image_data' in JSON payload")
  27. print("This is OCR command.")
  28. ocr(base64_image_data,self)
  29. elif cmd == "create_link":
  30. name = data.get('name')
  31. bookId = data.get('bookId')
  32. topUpTemplateId = data.get('topUpTemplateId')
  33. passBackTemplateId = data.get('passBackTemplateId')
  34. paidPoint = data.get('paidPoint')
  35. token = data.get('token')
  36. create_link(name,bookId,topUpTemplateId,passBackTemplateId,paidPoint,token,self)
  37. print("Command is empty.")
  38. elif cmd == "get_fq_book":
  39. key = data.get('key')
  40. response = {
  41. "message": "Data received successfully",
  42. "received_data": getFqBook(key,None),
  43. }
  44. response_str = json.dumps(response)
  45. self.send_response(200)
  46. self.send_header('Content-type', 'application/json')
  47. self.end_headers()
  48. self.wfile.write(response_str.encode('utf-8'))
  49. else:
  50. self.send_response(200)
  51. self.send_header('Content-type', 'application/json')
  52. self.end_headers()
  53. self.wfile.write("not func")
  54. print("Unknown command.")
  55. except json.JSONDecodeError:
  56. self.send_error(400, "Invalid JSON data")
  57. except (ValueError, base64.binascii.Error, IOError) as e:
  58. self.send_error(400, f"Invalid base64 image data: {str(e)}")
  59. except Exception as e:
  60. self.send_error(500, f"Internal server error: {str(e)}")
  61. def ocr(base64_image_data,server):
  62. image_data = base64.b64decode(base64_image_data)
  63. image = Image.open(io.BytesIO(image_data)) # 直接在内存中处理图像
  64. ocr = ddddocr.DdddOcr()
  65. result = ocr.classification(image)
  66. response = {
  67. "message": "Data received successfully",
  68. "received_data": result,
  69. }
  70. response_str = json.dumps(response)
  71. server.send_response(200)
  72. server.send_header('Content-type', 'application/json')
  73. server.end_headers()
  74. server.wfile.write(response_str.encode('utf-8'))
  75. def create_link(name,bookId,topUpTemplateId,passBackTemplateId,paidPoint,token,server):
  76. url = "https://ms.zhangwenpindu.cn/manage/distribution/createLink"
  77. data = {
  78. "name": name,
  79. "bookId": bookId,
  80. "passBackTemplateId": passBackTemplateId,#"5", 回传规则
  81. "adPassbackTemplateId": "",
  82. "topUpTemplateId": topUpTemplateId, #充值
  83. "mediaChannel": "1", #媒体渠道
  84. "group": "35", #合作站点
  85. "paidPoint": paidPoint,#"", #卡点收费
  86. "site": "5" #推广平台
  87. }
  88. headers['Authorization']=f'Bearer {token}'
  89. res = requests.post(url, headers=headers, data=data).json()
  90. # f'{"=" * 40}\n'
  91. # f'原始ID:{res.get("data").get("originalId")}\n'
  92. # f'小程序ID:{res.get("data").get("appId")}\n'
  93. # f'小程序启动页面:{res.get("data").get("launchPath")}\n'
  94. # f'小程序启动参数:{res.get("data").get("launchParam")}\n'
  95. # f'跳转路径参数:{res.get("data").get("fullPath")}\n'
  96. # f'微信站外链接:{res.get("data").get("wxMountLink")}\n'
  97. # f'{"=" * 40}\n',
  98. response = {
  99. "message": "create_link successfully",
  100. "received_data":{"originalId":res.get("data").get("originalId"),
  101. "appId":res.get("data").get("appId"),
  102. "launchPath":res.get("data").get("launchPath"),
  103. "fullPath":res.get("data").get("fullPath"),
  104. "wxMountLink":res.get("data").get("wxMountLink")}
  105. }
  106. response_str = json.dumps(response)
  107. server.send_response(200)
  108. server.send_header('Content-type', 'application/json')
  109. server.end_headers()
  110. server.wfile.write(response_str.encode('utf-8'))
  111. # print(res)
  112. print(data)
  113. def run(server_class=HTTPServer, handler_class=MyRequestHandler, port=8080):
  114. server_address = ('', port)
  115. httpd = server_class(server_address, handler_class)
  116. print(f"Serving on port {port}")
  117. httpd.serve_forever()
  118. headers_str = '''
  119. Accept: application/json, text/plain, */*
  120. Accept-Language: zh-CN,zh;q=0.9
  121. Cache-Control: no-cache
  122. Connection: keep-alive
  123. Content-Type: application/x-www-form-urlencoded
  124. Origin: https://manage.zhangwenpindu.cn
  125. Pragma: no-cache
  126. Referer: https://manage.zhangwenpindu.cn/
  127. Sec-Fetch-Dest: empty
  128. Sec-Fetch-Mode: cors
  129. Sec-Fetch-Site: same-site
  130. 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
  131. sec-ch-ua: "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"
  132. sec-ch-ua-mobile: ?0
  133. sec-ch-ua-platform: "Windows"
  134. '''
  135. headers = dict(
  136. [[y.strip() for y in x.strip().split(':', 1)] for x in headers_str.strip().split('\n') if x.strip()])
  137. def getFqBook( key,post_data=None):
  138. # key = 'PHVJKLVWRUY' # Get this from your input method
  139. if not key:
  140. return
  141. url = f"https://api.whbfxb.cn/api/novelsale/reader/get/content/v1/?aid=40013183&device_brand=realme&device_platform=android&device_type=RMX2020&mp_sdk_version=3.21.0&novelsale_app_scene=023001&version_code=230&key={key}&item_source=1&module_name=ad_link&click_id=__CLICKID__&clickid=__CLICKID__&creativetype=__CTYPE__&demand_id=0&item_id=&media_source=1&mid1=__MID1__&mid2=__MID2__&mid3=__MID3__&mid4=__MID4__&mid5=__MID5__&projectid=__PROJECT_ID__&promotionid=__PROMOTION_ID__&request_id=__REQUESTID__&book_id=&host_novelsale_app_id=40013183"
  142. n_headers = {
  143. 'Connection': 'keep-alive',
  144. 'Cookie': 'sid_tt=617946caef227c4a80e1dd9cb290515e;ssid_ucp_v1=1.0.0-KGY3OGU0YWM0OTMzMjI1YTg4OThiMTAyMGI3YmFhOTIxNjE2YzZiYzQKFQjkktCcvMz_ARCf9PC5Bhjv6CA4CBoCaGwiIDYxNzk0NmNhZWYyMjdjNGE4MGUxZGQ5Y2IyOTA1MTVl;is_staff_user=false;sid_ucp_v1=1.0.0-KGY3OGU0YWM0OTMzMjI1YTg4OThiMTAyMGI3YmFhOTIxNjE2YzZiYzQKFQjkktCcvMz_ARCf9PC5Bhjv6CA4CBoCaGwiIDYxNzk0NmNhZWYyMjdjNGE4MGUxZGQ5Y2IyOTA1MTVl;sessionid=617946caef227c4a80e1dd9cb290515e;ttwid=1%7CG17ZXFInuaAvJxxf46K8gU7KOBUO5aC89gBmDvnA_fo%7C1732000431%7C90ea8439ff8c370df5be3f31d7187a23ed8a2318b4a1aa7d345283ba395bfcb2;sessionid_ss=617946caef227c4a80e1dd9cb290515e;sid_guard=617946caef227c4a80e1dd9cb290515e%7C1732000287%7C5184000%7CSat%2C+18-Jan-2025+07%3A11%3A27+GMT;uid_tt=560968d5ca0089cc8ce610b12f7f2191;passport_csrf_token=8a66478b232599457f588305cb6317dd;uid_tt_ss=560968d5ca0089cc8ce610b12f7f2191;odin_tt=38b1a8591565cfabfde8e2ff37a2d033e74a58e85a42dbf7c48fbca909ebd43b2a0ef306193946a4c74c64f005d15aaef66f3f0b5fe61669cd56f37b355e1591;passport_csrf_token_default=8a66478b232599457f588305cb6317dd;store-region=cn-gs;store-region-src=uid;n_mh=9-mIeuD4wZnlYrrOvfzG3MuT6aQmCUtmr8FxV8Kl8xY',
  145. 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; RMX2020 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.193 Mobile Safari/537.36 aweme/29.4.0 ToutiaoMicroApp/3.21.0 PluginVersion/29409006',
  146. 'Content-Type': 'application/json',
  147. 'Referer': 'https://tmaservice.developer.toutiao.com/?appid=tt1b316d8c8401e42101&version=2.3.0'
  148. }
  149. try:
  150. if post_data:
  151. if isinstance(post_data, dict):
  152. response = requests.post(url, headers=n_headers, data=urlencode(post_data), allow_redirects=True, verify=False, timeout=(10, 30))
  153. else:
  154. response = requests.post(url, headers=n_headers, data=post_data, allow_redirects=True, verify=False, timeout=(10, 30))
  155. else:
  156. response = requests.get(url, headers=n_headers, allow_redirects=True, verify=False, timeout=(10, 30))
  157. return {
  158. 'header': str(response.headers),
  159. 'body': response.text,
  160. 'http_code': response.status_code
  161. }
  162. except Exception as e:
  163. return {
  164. 'header': '',
  165. 'body': str(e),
  166. 'http_code': 0
  167. }
  168. if __name__ == "__main__":
  169. import io # 确保导入了 io 模块以处理内存中的图像
  170. run(port=8080)