re-common 10.0.37__py3-none-any.whl → 10.0.39__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +219 -219
  145. re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
  146. re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
  147. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
  148. re_common/v2/baselibrary/decorators/utils.py +59 -59
  149. re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
  150. re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
  151. re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
  152. re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
  153. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  154. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
  155. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  156. re_common/v2/baselibrary/tools/concurrency.py +35 -35
  157. re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
  158. re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
  159. re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
  160. re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
  161. re_common/v2/baselibrary/tools/dict_tools.py +44 -44
  162. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  163. re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
  164. re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
  165. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  166. re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
  167. re_common/v2/baselibrary/tools/list_tools.py +69 -69
  168. re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
  169. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  170. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  171. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  172. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  173. re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
  174. re_common/v2/baselibrary/utils/author_smi.py +361 -361
  175. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  176. re_common/v2/baselibrary/utils/basedict.py +37 -37
  177. re_common/v2/baselibrary/utils/basehdfs.py +163 -163
  178. re_common/v2/baselibrary/utils/basepika.py +180 -180
  179. re_common/v2/baselibrary/utils/basetime.py +77 -77
  180. re_common/v2/baselibrary/utils/db.py +156 -156
  181. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  182. re_common/v2/baselibrary/utils/mq.py +83 -83
  183. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  184. re_common/v2/baselibrary/utils/string_bool.py +186 -186
  185. re_common/v2/baselibrary/utils/string_clear.py +246 -246
  186. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  187. re_common/v2/baselibrary/utils/stringutils.py +271 -278
  188. re_common/vip/base_step_process.py +11 -11
  189. re_common/vip/baseencodeid.py +90 -90
  190. re_common/vip/changetaskname.py +28 -28
  191. re_common/vip/core_var.py +24 -24
  192. re_common/vip/mmh3Hash.py +89 -89
  193. re_common/vip/proxy/allproxys.py +127 -127
  194. re_common/vip/proxy/allproxys_thread.py +159 -159
  195. re_common/vip/proxy/cnki_proxy.py +153 -153
  196. re_common/vip/proxy/kuaidaili.py +87 -87
  197. re_common/vip/proxy/proxy_all.py +113 -113
  198. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  199. re_common/vip/proxy/wanfang_proxy.py +152 -152
  200. re_common/vip/proxy/wp_proxy_all.py +181 -181
  201. re_common/vip/read_rawid_to_txt.py +91 -91
  202. re_common/vip/title/__init__.py +5 -5
  203. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  204. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  205. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  206. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  207. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  208. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  209. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  210. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  211. re_common/vip/title/transform/__init__.py +10 -10
  212. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/LICENSE +201 -201
  213. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/METADATA +16 -16
  214. re_common-10.0.39.dist-info/RECORD +248 -0
  215. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/WHEEL +1 -1
  216. re_common-10.0.37.dist-info/RECORD +0 -248
  217. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/top_level.txt +0 -0
@@ -1,429 +1,429 @@
1
- # coding=utf-8
2
- import hashlib
3
- import json
4
- import time
5
-
6
- import requests
7
-
8
- FATEA_PRED_URL = "http://pred.fateadm.com"
9
-
10
-
11
- def LOG(log):
12
- # 不需要测试时,注释掉日志就可以了
13
- print(log)
14
- log = None
15
-
16
-
17
- class TmpObj():
18
- def __init__(self):
19
- self.value = None
20
-
21
-
22
- class Rsp():
23
- def __init__(self):
24
- self.ret_code = -1
25
- self.cust_val = 0.0
26
- self.err_msg = "succ"
27
- self.pred_rsp = TmpObj()
28
-
29
- def ParseJsonRsp(self, rsp_data):
30
- if rsp_data is None:
31
- self.err_msg = "http request failed, get rsp Nil data"
32
- return
33
- jrsp = json.loads(rsp_data)
34
- self.ret_code = int(jrsp["RetCode"])
35
- self.err_msg = jrsp["ErrMsg"]
36
- self.request_id = jrsp["RequestId"]
37
- if self.ret_code == 0:
38
- rslt_data = jrsp["RspData"]
39
- if rslt_data is not None and rslt_data != "":
40
- jrsp_ext = json.loads(rslt_data)
41
- if "cust_val" in jrsp_ext:
42
- data = jrsp_ext["cust_val"]
43
- self.cust_val = float(data)
44
- if "result" in jrsp_ext:
45
- data = jrsp_ext["result"]
46
- self.pred_rsp.value = data
47
-
48
-
49
- def CalcSign(pd_id, passwd, timestamp):
50
- md5 = hashlib.md5()
51
- md5.update((timestamp + passwd).encode())
52
- csign = md5.hexdigest()
53
-
54
- md5 = hashlib.md5()
55
- md5.update((pd_id + timestamp + csign).encode())
56
- csign = md5.hexdigest()
57
- return csign
58
-
59
-
60
- def CalcCardSign(cardid, cardkey, timestamp, passwd):
61
- md5 = hashlib.md5()
62
- md5.update(passwd + timestamp + cardid + cardkey)
63
- return md5.hexdigest()
64
-
65
-
66
- def HttpRequest(url, body_data, img_data=""):
67
- rsp = Rsp()
68
- post_data = body_data
69
- files = {
70
- 'img_data': ('img_data', img_data)
71
- }
72
- header = {
73
- 'User-Agent': 'Mozilla/5.0',
74
- }
75
- rsp_data = requests.post(url, post_data, files=files, headers=header)
76
- rsp.ParseJsonRsp(rsp_data.text)
77
- return rsp
78
-
79
-
80
- class FateadmApi():
81
- # API接口调用类
82
- # 参数(appID,appKey,pdID,pdKey)
83
- def __init__(self, app_id, app_key, pd_id, pd_key):
84
- self.app_id = app_id
85
- if app_id is None:
86
- self.app_id = ""
87
- self.app_key = app_key
88
- self.pd_id = pd_id
89
- self.pd_key = pd_key
90
- self.host = FATEA_PRED_URL
91
-
92
- def SetHost(self, url):
93
- self.host = url
94
-
95
- #
96
- # 查询余额
97
- # 参数:无
98
- # 返回值:
99
- # rsp.ret_code:正常返回0
100
- # rsp.cust_val:用户余额
101
- # rsp.err_msg:异常时返回异常详情
102
- #
103
- def QueryBalc(self):
104
- tm = str(int(time.time()))
105
- sign = CalcSign(self.pd_id, self.pd_key, tm)
106
- param = {
107
- "user_id": self.pd_id,
108
- "timestamp": tm,
109
- "sign": sign
110
- }
111
- url = self.host + "/api/custval"
112
- rsp = HttpRequest(url, param)
113
- if rsp.ret_code == 0:
114
- LOG("query succ ret: {} cust_val: {} rsp: {} pred: {}".format(rsp.ret_code, rsp.cust_val, rsp.err_msg,
115
- rsp.pred_rsp.value))
116
- else:
117
- LOG("query failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
118
- return rsp
119
-
120
- #
121
- # 查询网络延迟
122
- # 参数:pred_type:识别类型
123
- # 返回值:
124
- # rsp.ret_code:正常返回0
125
- # rsp.err_msg: 异常时返回异常详情
126
- #
127
- def QueryTTS(self, pred_type):
128
- tm = str(int(time.time()))
129
- sign = CalcSign(self.pd_id, self.pd_key, tm)
130
- param = {
131
- "user_id": self.pd_id,
132
- "timestamp": tm,
133
- "sign": sign,
134
- "predict_type": pred_type,
135
- }
136
- if self.app_id != "":
137
- #
138
- asign = CalcSign(self.app_id, self.app_key, tm)
139
- param["appid"] = self.app_id
140
- param["asign"] = asign
141
- url = self.host + "/api/qcrtt"
142
- rsp = HttpRequest(url, param)
143
- if rsp.ret_code == 0:
144
- LOG("query rtt succ ret: {} request_id: {} err: {}".format(rsp.ret_code, rsp.request_id, rsp.err_msg))
145
- else:
146
- LOG("predict failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
147
- return rsp
148
-
149
- #
150
- # 识别验证码
151
- # 参数:pred_type:识别类型 img_data:图片的数据
152
- # 返回值:
153
- # rsp.ret_code:正常返回0
154
- # rsp.request_id:唯一订单号
155
- # rsp.pred_rsp.value:识别结果
156
- # rsp.err_msg:异常时返回异常详情
157
- #
158
- def Predict(self, pred_type, img_data, head_info=""):
159
- tm = str(int(time.time()))
160
- sign = CalcSign(self.pd_id, self.pd_key, tm)
161
- param = {
162
- "user_id": self.pd_id,
163
- "timestamp": tm,
164
- "sign": sign,
165
- "predict_type": pred_type,
166
- "up_type": "mt"
167
- }
168
- if head_info is not None or head_info != "":
169
- param["head_info"] = head_info
170
- if self.app_id != "":
171
- #
172
- asign = CalcSign(self.app_id, self.app_key, tm)
173
- param["appid"] = self.app_id
174
- param["asign"] = asign
175
- url = self.host + "/api/capreg"
176
- files = img_data
177
- rsp = HttpRequest(url, param, files)
178
- if rsp.ret_code == 0:
179
- LOG("predict succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
180
- rsp.pred_rsp.value, rsp.err_msg))
181
- else:
182
- LOG("predict failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg))
183
- if rsp.ret_code == 4003:
184
- # lack of money
185
- LOG("cust_val <= 0 lack of money, please charge immediately")
186
- return rsp
187
-
188
- #
189
- # 从文件进行验证码识别
190
- # 参数:pred_type;识别类型 file_name:文件名
191
- # 返回值:
192
- # rsp.ret_code:正常返回0
193
- # rsp.request_id:唯一订单号
194
- # rsp.pred_rsp.value:识别结果
195
- # rsp.err_msg:异常时返回异常详情
196
- #
197
- def PredictFromFile(self, pred_type, file_name, head_info=""):
198
- with open(file_name, "rb") as f:
199
- data = f.read()
200
- return self.Predict(pred_type, data, head_info=head_info)
201
-
202
- #
203
- # 识别失败,进行退款请求
204
- # 参数:request_id:需要退款的订单号
205
- # 返回值:
206
- # rsp.ret_code:正常返回0
207
- # rsp.err_msg:异常时返回异常详情
208
- #
209
- # 注意:
210
- # Predict识别接口,仅在ret_code == 0时才会进行扣款,才需要进行退款请求,否则无需进行退款操作
211
- # 注意2:
212
- # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
213
- #
214
- def Justice(self, request_id):
215
- if request_id == "":
216
- #
217
- return
218
- tm = str(int(time.time()))
219
- sign = CalcSign(self.pd_id, self.pd_key, tm)
220
- param = {
221
- "user_id": self.pd_id,
222
- "timestamp": tm,
223
- "sign": sign,
224
- "request_id": request_id
225
- }
226
- url = self.host + "/api/capjust"
227
- rsp = HttpRequest(url, param)
228
- if rsp.ret_code == 0:
229
- LOG("justice succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
230
- rsp.pred_rsp.value, rsp.err_msg))
231
- else:
232
- LOG("justice failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
233
- return rsp
234
-
235
- #
236
- # 充值接口
237
- # 参数:cardid:充值卡号 cardkey:充值卡签名串
238
- # 返回值:
239
- # rsp.ret_code:正常返回0
240
- # rsp.err_msg:异常时返回异常详情
241
- #
242
- def Charge(self, cardid, cardkey):
243
- tm = str(int(time.time()))
244
- sign = CalcSign(self.pd_id, self.pd_key, tm)
245
- csign = CalcCardSign(cardid, cardkey, tm, self.pd_key)
246
- param = {
247
- "user_id": self.pd_id,
248
- "timestamp": tm,
249
- "sign": sign,
250
- 'cardid': cardid,
251
- 'csign': csign
252
- }
253
- url = self.host + "/api/charge"
254
- rsp = HttpRequest(url, param)
255
- if rsp.ret_code == 0:
256
- LOG("charge succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
257
- rsp.pred_rsp.value, rsp.err_msg))
258
- else:
259
- LOG("charge failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
260
- return rsp
261
-
262
- ##
263
- # 充值,只返回是否成功
264
- # 参数:cardid:充值卡号 cardkey:充值卡签名串
265
- # 返回值: 充值成功时返回0
266
- ##
267
- def ExtendCharge(self, cardid, cardkey):
268
- return self.Charge(cardid, cardkey).ret_code
269
-
270
- ##
271
- # 调用退款,只返回是否成功
272
- # 参数: request_id:需要退款的订单号
273
- # 返回值: 退款成功时返回0
274
- #
275
- # 注意:
276
- # Predict识别接口,仅在ret_code == 0时才会进行扣款,才需要进行退款请求,否则无需进行退款操作
277
- # 注意2:
278
- # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
279
- ##
280
- def JusticeExtend(self, request_id):
281
- return self.Justice(request_id).ret_code
282
-
283
- ##
284
- # 查询余额,只返回余额
285
- # 参数:无
286
- # 返回值:rsp.cust_val:余额
287
- ##
288
- def QueryBalcExtend(self):
289
- rsp = self.QueryBalc()
290
- return rsp.cust_val
291
-
292
- ##
293
- # 从文件识别验证码,只返回识别结果
294
- # 参数:pred_type;识别类型 file_name:文件名
295
- # 返回值: rsp.pred_rsp.value:识别的结果
296
- ##
297
- def PredictFromFileExtend(self, pred_type, file_name, head_info=""):
298
- rsp = self.PredictFromFile(pred_type, file_name, head_info)
299
- return rsp.pred_rsp.value
300
-
301
- ##
302
- # 识别接口,只返回识别结果
303
- # 参数:pred_type:识别类型 img_data:图片的数据
304
- # 返回值: rsp.pred_rsp.value:识别的结果
305
- ##
306
- def PredictExtend(self, pred_type, img_data, head_info=""):
307
- rsp = self.Predict(pred_type, img_data, head_info)
308
- return rsp.pred_rsp.value
309
-
310
-
311
- #
312
- # def TestFunc():
313
- # pd_id = "120292" # 用户中心页可以查询到pd信息
314
- # pd_key = "i3M9C5vG7nWqAyP9xW2aZke9utdZsJRC"
315
- # app_id = "320292" # 开发者分成用的账号,在开发者中心可以查询到
316
- # app_key = "c7Op85NwodVYZjZ80pPp/2QTkEAPouGT"
317
- # # 识别类型,
318
- # # 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
319
- # pred_type = "30400"
320
- # api = FateadmApi(app_id, app_key, pd_id, pd_key)
321
- # # 查询余额
322
- # balance = api.QueryBalcExtend() # 直接返余额
323
- # # api.QueryBalc()
324
- #
325
- # # 通过文件形式识别:
326
- # file_name = "img.jpg"
327
- # # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
328
- # # result = api.PredictFromFileExtend(pred_type,file_name) # 直接返回识别结果
329
- # rsp = api.PredictFromFile(pred_type, file_name) # 返回详细识别结果
330
- #
331
- # '''
332
- # # 如果不是通过文件识别,则调用Predict接口:
333
- # # result = api.PredictExtend(pred_type,data) # 直接返回识别结果
334
- # rsp = api.Predict(pred_type,data) # 返回详细的识别结果
335
- # '''
336
- #
337
- # just_flag = False
338
- # if just_flag:
339
- # if rsp.ret_code == 0:
340
- # # 识别的结果如果与预期不符,可以调用这个接口将预期不符的订单退款
341
- # # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
342
- # api.Justice(rsp.request_id)
343
- #
344
- # # card_id = "123"
345
- # # card_key = "123"
346
- # # 充值
347
- # # api.Charge(card_id, card_key)
348
- # LOG("print in testfunc")
349
- #
350
- #
351
- # if __name__ == "__main__":
352
- # TestFunc()
353
-
354
- class UseFateadm(object):
355
- def __init__(self, pd_id="120292", pd_key="i3M9C5vG7nWqAyP9xW2aZke9utdZsJRC", app_id="320292",
356
- app_key="c7Op85NwodVYZjZ80pPp/2QTkEAPouGT"):
357
- self.pd_id = pd_id # 用户中心页可以查询到pd信息
358
- self.pd_key = pd_key
359
- self.app_id = app_id # 开发者分成用的账号,在开发者中心可以查询到
360
- self.app_key = app_key
361
- # 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
362
- self.pred_type = "30400"
363
- self.api = FateadmApi(self.app_id, self.app_key, self.pd_id, self.pd_key)
364
-
365
- def set_pred_type(self, pred_type):
366
- self.pred_type = pred_type
367
-
368
- def get_balance(self):
369
- # 查询余额
370
- balance = self.api.QueryBalcExtend() # 直接返余额
371
- return balance
372
-
373
- def get_queryBalc(self):
374
- """
375
- # 查询余额
376
- # 参数:无
377
- # 返回值:
378
- # rsp.ret_code:正常返回0
379
- # rsp.cust_val:用户余额
380
- # rsp.err_msg:异常时返回异常详情
381
- #
382
- :return:
383
- """
384
- self.api.QueryBalc()
385
-
386
- def PredictFromFileExtend(self, file_name, pred_type=None):
387
- if pred_type == None:
388
- pred_type = self.pred_type
389
- # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
390
- result = self.api.PredictFromFileExtend(pred_type, file_name) # 直接返回识别结果
391
- return result
392
-
393
- def PredictFromFile(self, file_name, pred_type=None): # 返回详细识别结果
394
- if pred_type == None:
395
- pred_type = self.pred_type
396
- rsp = self.api.PredictFromFile(pred_type, file_name) # 返回详细识别结果
397
- return rsp
398
-
399
- def PredictExtend(self, data, pred_type=None):
400
- if pred_type == None:
401
- pred_type = self.pred_type
402
- # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
403
- result = self.api.PredictExtend(pred_type, data) # 直接返回识别结果
404
- return result
405
-
406
- def Predict(self, data, pred_type=None): # 返回详细识别结果
407
- if pred_type == None:
408
- pred_type = self.pred_type
409
- rsp = self.api.Predict(pred_type, data) # 返回详细的识别结果
410
- return rsp
411
-
412
- def Justice(self, rsp):
413
- if rsp.ret_code == 0:
414
- # 识别的结果如果与预期不符,可以调用这个接口将预期不符的订单退款
415
- # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
416
- self.api.Justice(rsp.request_id)
417
-
418
- def Charge(self, card_id, card_key):
419
- """
420
- # 充值接口
421
- # 参数:cardid:充值卡号 cardkey:充值卡签名串
422
- # 返回值:
423
- # rsp.ret_code:正常返回0
424
- # rsp.err_msg:异常时返回异常详情
425
- :param card_id:
426
- :param card_key:
427
- :return:
428
- """
429
- self.api.Charge(card_id, card_key)
1
+ # coding=utf-8
2
+ import hashlib
3
+ import json
4
+ import time
5
+
6
+ import requests
7
+
8
+ FATEA_PRED_URL = "http://pred.fateadm.com"
9
+
10
+
11
+ def LOG(log):
12
+ # 不需要测试时,注释掉日志就可以了
13
+ print(log)
14
+ log = None
15
+
16
+
17
+ class TmpObj():
18
+ def __init__(self):
19
+ self.value = None
20
+
21
+
22
+ class Rsp():
23
+ def __init__(self):
24
+ self.ret_code = -1
25
+ self.cust_val = 0.0
26
+ self.err_msg = "succ"
27
+ self.pred_rsp = TmpObj()
28
+
29
+ def ParseJsonRsp(self, rsp_data):
30
+ if rsp_data is None:
31
+ self.err_msg = "http request failed, get rsp Nil data"
32
+ return
33
+ jrsp = json.loads(rsp_data)
34
+ self.ret_code = int(jrsp["RetCode"])
35
+ self.err_msg = jrsp["ErrMsg"]
36
+ self.request_id = jrsp["RequestId"]
37
+ if self.ret_code == 0:
38
+ rslt_data = jrsp["RspData"]
39
+ if rslt_data is not None and rslt_data != "":
40
+ jrsp_ext = json.loads(rslt_data)
41
+ if "cust_val" in jrsp_ext:
42
+ data = jrsp_ext["cust_val"]
43
+ self.cust_val = float(data)
44
+ if "result" in jrsp_ext:
45
+ data = jrsp_ext["result"]
46
+ self.pred_rsp.value = data
47
+
48
+
49
+ def CalcSign(pd_id, passwd, timestamp):
50
+ md5 = hashlib.md5()
51
+ md5.update((timestamp + passwd).encode())
52
+ csign = md5.hexdigest()
53
+
54
+ md5 = hashlib.md5()
55
+ md5.update((pd_id + timestamp + csign).encode())
56
+ csign = md5.hexdigest()
57
+ return csign
58
+
59
+
60
+ def CalcCardSign(cardid, cardkey, timestamp, passwd):
61
+ md5 = hashlib.md5()
62
+ md5.update(passwd + timestamp + cardid + cardkey)
63
+ return md5.hexdigest()
64
+
65
+
66
+ def HttpRequest(url, body_data, img_data=""):
67
+ rsp = Rsp()
68
+ post_data = body_data
69
+ files = {
70
+ 'img_data': ('img_data', img_data)
71
+ }
72
+ header = {
73
+ 'User-Agent': 'Mozilla/5.0',
74
+ }
75
+ rsp_data = requests.post(url, post_data, files=files, headers=header)
76
+ rsp.ParseJsonRsp(rsp_data.text)
77
+ return rsp
78
+
79
+
80
+ class FateadmApi():
81
+ # API接口调用类
82
+ # 参数(appID,appKey,pdID,pdKey)
83
+ def __init__(self, app_id, app_key, pd_id, pd_key):
84
+ self.app_id = app_id
85
+ if app_id is None:
86
+ self.app_id = ""
87
+ self.app_key = app_key
88
+ self.pd_id = pd_id
89
+ self.pd_key = pd_key
90
+ self.host = FATEA_PRED_URL
91
+
92
+ def SetHost(self, url):
93
+ self.host = url
94
+
95
+ #
96
+ # 查询余额
97
+ # 参数:无
98
+ # 返回值:
99
+ # rsp.ret_code:正常返回0
100
+ # rsp.cust_val:用户余额
101
+ # rsp.err_msg:异常时返回异常详情
102
+ #
103
+ def QueryBalc(self):
104
+ tm = str(int(time.time()))
105
+ sign = CalcSign(self.pd_id, self.pd_key, tm)
106
+ param = {
107
+ "user_id": self.pd_id,
108
+ "timestamp": tm,
109
+ "sign": sign
110
+ }
111
+ url = self.host + "/api/custval"
112
+ rsp = HttpRequest(url, param)
113
+ if rsp.ret_code == 0:
114
+ LOG("query succ ret: {} cust_val: {} rsp: {} pred: {}".format(rsp.ret_code, rsp.cust_val, rsp.err_msg,
115
+ rsp.pred_rsp.value))
116
+ else:
117
+ LOG("query failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
118
+ return rsp
119
+
120
+ #
121
+ # 查询网络延迟
122
+ # 参数:pred_type:识别类型
123
+ # 返回值:
124
+ # rsp.ret_code:正常返回0
125
+ # rsp.err_msg: 异常时返回异常详情
126
+ #
127
+ def QueryTTS(self, pred_type):
128
+ tm = str(int(time.time()))
129
+ sign = CalcSign(self.pd_id, self.pd_key, tm)
130
+ param = {
131
+ "user_id": self.pd_id,
132
+ "timestamp": tm,
133
+ "sign": sign,
134
+ "predict_type": pred_type,
135
+ }
136
+ if self.app_id != "":
137
+ #
138
+ asign = CalcSign(self.app_id, self.app_key, tm)
139
+ param["appid"] = self.app_id
140
+ param["asign"] = asign
141
+ url = self.host + "/api/qcrtt"
142
+ rsp = HttpRequest(url, param)
143
+ if rsp.ret_code == 0:
144
+ LOG("query rtt succ ret: {} request_id: {} err: {}".format(rsp.ret_code, rsp.request_id, rsp.err_msg))
145
+ else:
146
+ LOG("predict failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
147
+ return rsp
148
+
149
+ #
150
+ # 识别验证码
151
+ # 参数:pred_type:识别类型 img_data:图片的数据
152
+ # 返回值:
153
+ # rsp.ret_code:正常返回0
154
+ # rsp.request_id:唯一订单号
155
+ # rsp.pred_rsp.value:识别结果
156
+ # rsp.err_msg:异常时返回异常详情
157
+ #
158
+ def Predict(self, pred_type, img_data, head_info=""):
159
+ tm = str(int(time.time()))
160
+ sign = CalcSign(self.pd_id, self.pd_key, tm)
161
+ param = {
162
+ "user_id": self.pd_id,
163
+ "timestamp": tm,
164
+ "sign": sign,
165
+ "predict_type": pred_type,
166
+ "up_type": "mt"
167
+ }
168
+ if head_info is not None or head_info != "":
169
+ param["head_info"] = head_info
170
+ if self.app_id != "":
171
+ #
172
+ asign = CalcSign(self.app_id, self.app_key, tm)
173
+ param["appid"] = self.app_id
174
+ param["asign"] = asign
175
+ url = self.host + "/api/capreg"
176
+ files = img_data
177
+ rsp = HttpRequest(url, param, files)
178
+ if rsp.ret_code == 0:
179
+ LOG("predict succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
180
+ rsp.pred_rsp.value, rsp.err_msg))
181
+ else:
182
+ LOG("predict failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg))
183
+ if rsp.ret_code == 4003:
184
+ # lack of money
185
+ LOG("cust_val <= 0 lack of money, please charge immediately")
186
+ return rsp
187
+
188
+ #
189
+ # 从文件进行验证码识别
190
+ # 参数:pred_type;识别类型 file_name:文件名
191
+ # 返回值:
192
+ # rsp.ret_code:正常返回0
193
+ # rsp.request_id:唯一订单号
194
+ # rsp.pred_rsp.value:识别结果
195
+ # rsp.err_msg:异常时返回异常详情
196
+ #
197
+ def PredictFromFile(self, pred_type, file_name, head_info=""):
198
+ with open(file_name, "rb") as f:
199
+ data = f.read()
200
+ return self.Predict(pred_type, data, head_info=head_info)
201
+
202
+ #
203
+ # 识别失败,进行退款请求
204
+ # 参数:request_id:需要退款的订单号
205
+ # 返回值:
206
+ # rsp.ret_code:正常返回0
207
+ # rsp.err_msg:异常时返回异常详情
208
+ #
209
+ # 注意:
210
+ # Predict识别接口,仅在ret_code == 0时才会进行扣款,才需要进行退款请求,否则无需进行退款操作
211
+ # 注意2:
212
+ # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
213
+ #
214
+ def Justice(self, request_id):
215
+ if request_id == "":
216
+ #
217
+ return
218
+ tm = str(int(time.time()))
219
+ sign = CalcSign(self.pd_id, self.pd_key, tm)
220
+ param = {
221
+ "user_id": self.pd_id,
222
+ "timestamp": tm,
223
+ "sign": sign,
224
+ "request_id": request_id
225
+ }
226
+ url = self.host + "/api/capjust"
227
+ rsp = HttpRequest(url, param)
228
+ if rsp.ret_code == 0:
229
+ LOG("justice succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
230
+ rsp.pred_rsp.value, rsp.err_msg))
231
+ else:
232
+ LOG("justice failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
233
+ return rsp
234
+
235
+ #
236
+ # 充值接口
237
+ # 参数:cardid:充值卡号 cardkey:充值卡签名串
238
+ # 返回值:
239
+ # rsp.ret_code:正常返回0
240
+ # rsp.err_msg:异常时返回异常详情
241
+ #
242
+ def Charge(self, cardid, cardkey):
243
+ tm = str(int(time.time()))
244
+ sign = CalcSign(self.pd_id, self.pd_key, tm)
245
+ csign = CalcCardSign(cardid, cardkey, tm, self.pd_key)
246
+ param = {
247
+ "user_id": self.pd_id,
248
+ "timestamp": tm,
249
+ "sign": sign,
250
+ 'cardid': cardid,
251
+ 'csign': csign
252
+ }
253
+ url = self.host + "/api/charge"
254
+ rsp = HttpRequest(url, param)
255
+ if rsp.ret_code == 0:
256
+ LOG("charge succ ret: {} request_id: {} pred: {} err: {}".format(rsp.ret_code, rsp.request_id,
257
+ rsp.pred_rsp.value, rsp.err_msg))
258
+ else:
259
+ LOG("charge failed ret: {} err: {}".format(rsp.ret_code, rsp.err_msg.encode('utf-8')))
260
+ return rsp
261
+
262
+ ##
263
+ # 充值,只返回是否成功
264
+ # 参数:cardid:充值卡号 cardkey:充值卡签名串
265
+ # 返回值: 充值成功时返回0
266
+ ##
267
+ def ExtendCharge(self, cardid, cardkey):
268
+ return self.Charge(cardid, cardkey).ret_code
269
+
270
+ ##
271
+ # 调用退款,只返回是否成功
272
+ # 参数: request_id:需要退款的订单号
273
+ # 返回值: 退款成功时返回0
274
+ #
275
+ # 注意:
276
+ # Predict识别接口,仅在ret_code == 0时才会进行扣款,才需要进行退款请求,否则无需进行退款操作
277
+ # 注意2:
278
+ # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
279
+ ##
280
+ def JusticeExtend(self, request_id):
281
+ return self.Justice(request_id).ret_code
282
+
283
+ ##
284
+ # 查询余额,只返回余额
285
+ # 参数:无
286
+ # 返回值:rsp.cust_val:余额
287
+ ##
288
+ def QueryBalcExtend(self):
289
+ rsp = self.QueryBalc()
290
+ return rsp.cust_val
291
+
292
+ ##
293
+ # 从文件识别验证码,只返回识别结果
294
+ # 参数:pred_type;识别类型 file_name:文件名
295
+ # 返回值: rsp.pred_rsp.value:识别的结果
296
+ ##
297
+ def PredictFromFileExtend(self, pred_type, file_name, head_info=""):
298
+ rsp = self.PredictFromFile(pred_type, file_name, head_info)
299
+ return rsp.pred_rsp.value
300
+
301
+ ##
302
+ # 识别接口,只返回识别结果
303
+ # 参数:pred_type:识别类型 img_data:图片的数据
304
+ # 返回值: rsp.pred_rsp.value:识别的结果
305
+ ##
306
+ def PredictExtend(self, pred_type, img_data, head_info=""):
307
+ rsp = self.Predict(pred_type, img_data, head_info)
308
+ return rsp.pred_rsp.value
309
+
310
+
311
+ #
312
+ # def TestFunc():
313
+ # pd_id = "120292" # 用户中心页可以查询到pd信息
314
+ # pd_key = "i3M9C5vG7nWqAyP9xW2aZke9utdZsJRC"
315
+ # app_id = "320292" # 开发者分成用的账号,在开发者中心可以查询到
316
+ # app_key = "c7Op85NwodVYZjZ80pPp/2QTkEAPouGT"
317
+ # # 识别类型,
318
+ # # 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
319
+ # pred_type = "30400"
320
+ # api = FateadmApi(app_id, app_key, pd_id, pd_key)
321
+ # # 查询余额
322
+ # balance = api.QueryBalcExtend() # 直接返余额
323
+ # # api.QueryBalc()
324
+ #
325
+ # # 通过文件形式识别:
326
+ # file_name = "img.jpg"
327
+ # # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
328
+ # # result = api.PredictFromFileExtend(pred_type,file_name) # 直接返回识别结果
329
+ # rsp = api.PredictFromFile(pred_type, file_name) # 返回详细识别结果
330
+ #
331
+ # '''
332
+ # # 如果不是通过文件识别,则调用Predict接口:
333
+ # # result = api.PredictExtend(pred_type,data) # 直接返回识别结果
334
+ # rsp = api.Predict(pred_type,data) # 返回详细的识别结果
335
+ # '''
336
+ #
337
+ # just_flag = False
338
+ # if just_flag:
339
+ # if rsp.ret_code == 0:
340
+ # # 识别的结果如果与预期不符,可以调用这个接口将预期不符的订单退款
341
+ # # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
342
+ # api.Justice(rsp.request_id)
343
+ #
344
+ # # card_id = "123"
345
+ # # card_key = "123"
346
+ # # 充值
347
+ # # api.Charge(card_id, card_key)
348
+ # LOG("print in testfunc")
349
+ #
350
+ #
351
+ # if __name__ == "__main__":
352
+ # TestFunc()
353
+
354
+ class UseFateadm(object):
355
+ def __init__(self, pd_id="120292", pd_key="i3M9C5vG7nWqAyP9xW2aZke9utdZsJRC", app_id="320292",
356
+ app_key="c7Op85NwodVYZjZ80pPp/2QTkEAPouGT"):
357
+ self.pd_id = pd_id # 用户中心页可以查询到pd信息
358
+ self.pd_key = pd_key
359
+ self.app_id = app_id # 开发者分成用的账号,在开发者中心可以查询到
360
+ self.app_key = app_key
361
+ # 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
362
+ self.pred_type = "30400"
363
+ self.api = FateadmApi(self.app_id, self.app_key, self.pd_id, self.pd_key)
364
+
365
+ def set_pred_type(self, pred_type):
366
+ self.pred_type = pred_type
367
+
368
+ def get_balance(self):
369
+ # 查询余额
370
+ balance = self.api.QueryBalcExtend() # 直接返余额
371
+ return balance
372
+
373
+ def get_queryBalc(self):
374
+ """
375
+ # 查询余额
376
+ # 参数:无
377
+ # 返回值:
378
+ # rsp.ret_code:正常返回0
379
+ # rsp.cust_val:用户余额
380
+ # rsp.err_msg:异常时返回异常详情
381
+ #
382
+ :return:
383
+ """
384
+ self.api.QueryBalc()
385
+
386
+ def PredictFromFileExtend(self, file_name, pred_type=None):
387
+ if pred_type == None:
388
+ pred_type = self.pred_type
389
+ # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
390
+ result = self.api.PredictFromFileExtend(pred_type, file_name) # 直接返回识别结果
391
+ return result
392
+
393
+ def PredictFromFile(self, file_name, pred_type=None): # 返回详细识别结果
394
+ if pred_type == None:
395
+ pred_type = self.pred_type
396
+ rsp = self.api.PredictFromFile(pred_type, file_name) # 返回详细识别结果
397
+ return rsp
398
+
399
+ def PredictExtend(self, data, pred_type=None):
400
+ if pred_type == None:
401
+ pred_type = self.pred_type
402
+ # 多网站类型时,需要增加src_url参数,具体请参考api文档: http://docs.fateadm.com/web/#/1?page_id=6
403
+ result = self.api.PredictExtend(pred_type, data) # 直接返回识别结果
404
+ return result
405
+
406
+ def Predict(self, data, pred_type=None): # 返回详细识别结果
407
+ if pred_type == None:
408
+ pred_type = self.pred_type
409
+ rsp = self.api.Predict(pred_type, data) # 返回详细的识别结果
410
+ return rsp
411
+
412
+ def Justice(self, rsp):
413
+ if rsp.ret_code == 0:
414
+ # 识别的结果如果与预期不符,可以调用这个接口将预期不符的订单退款
415
+ # 退款仅在正常识别出结果后,无法通过网站验证的情况,请勿非法或者滥用,否则可能进行封号处理
416
+ self.api.Justice(rsp.request_id)
417
+
418
+ def Charge(self, card_id, card_key):
419
+ """
420
+ # 充值接口
421
+ # 参数:cardid:充值卡号 cardkey:充值卡签名串
422
+ # 返回值:
423
+ # rsp.ret_code:正常返回0
424
+ # rsp.err_msg:异常时返回异常详情
425
+ :param card_id:
426
+ :param card_key:
427
+ :return:
428
+ """
429
+ self.api.Charge(card_id, card_key)