re-common 10.0.39__py3-none-any.whl → 10.0.41__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.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +235 -220
- re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
- re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
- re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
- re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
- re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/concurrency.py +35 -35
- re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
- re_common/v2/baselibrary/tools/data_processer/data_processer.py +497 -508
- re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
- re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
- re_common/v2/baselibrary/tools/dict_tools.py +44 -44
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
- re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
- re_common/v2/baselibrary/tools/list_tools.py +69 -69
- re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/tree_processor/__init__.py +0 -0
- re_common/v2/baselibrary/tools/tree_processor/builder.py +25 -0
- re_common/v2/baselibrary/tools/tree_processor/node.py +13 -0
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
- re_common/v2/baselibrary/utils/author_smi.py +361 -361
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +163 -163
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +94 -77
- re_common/v2/baselibrary/utils/db.py +174 -156
- re_common/v2/baselibrary/utils/elasticsearch.py +46 -0
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +187 -186
- re_common/v2/baselibrary/utils/string_clear.py +246 -246
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +312 -271
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/LICENSE +201 -201
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/METADATA +16 -16
- re_common-10.0.41.dist-info/RECORD +252 -0
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/WHEEL +1 -1
- re_common-10.0.39.dist-info/RECORD +0 -248
- {re_common-10.0.39.dist-info → re_common-10.0.41.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)
|