@staticmethod
def __get_dx_cmp_no_dx_time_info():
cmp_info = {
"requestId": "ff937c2e-ceec-4ea1-a8cb-f1d47d7302aa",
"code": 0,
"message": "success",
"data": {
"companyName": "北京龙盛源小额贷款有限公司",
"province": "bj",
"basicList": [
{
"enterpriseName": "北京龙盛源小额贷款有限公司",
"esDate": "2009-12-11",
"openFrom": "2009-12-11",
"openTo": "",
"enterpriseStatus": "吊销",
"cancelDate": "",
"revokeDate": "",
"address": "北京市房山区良乡长虹东路2号1号楼一层、二层",
"abuItem": "",
"cbuItem": "",
"industryCode": "6639",
"industryName": "金融业",
"recCap": "",
"auditDate": "2018-01-18"
}
],
"alterList": [
{
"altDate": "2016-04-26",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2015-11-18",
"altItem": "投资人"
},
{
"altDate": "2014-11-17",
"altItem": "股东改变姓名或名称"
},
{
"altDate": "2014-11-17",
"altItem": "投资人"
},
{
"altDate": "2012-07-03",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2012-07-03",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2011-10-12",
"altItem": "注册资本"
},
{
"altDate": "2011-10-12",
"altItem": "实收资本(金)"
},
{
"altDate": "2011-10-12",
"altItem": "注册资本"
},
{
"altDate": "2010-09-01",
"altItem": "住所"
},
{
"altDate": "2010-04-02",
"altItem": "住所"
}
]
}
}
dx_time = {
"earliestActiveTime": "2017-08-02",
"latestActiveTime": ""
}
return cmp_info, dx_time
这样写容易出错,最好分开写:
@staticmethod
def __get_cmp_info_shi_xin():
return {
"requestId": "ff937c2e-ceec-4ea1-a8cb-f1d47d7302aa",
"code": 0,
"message": "success",
"data": {
"companyName": "北京龙盛源小额贷款有限公司",
"province": "bj",
"basicList": [
{
"enterpriseName": "北京龙盛源小额贷款有限公司",
"esDate": "",
"openFrom": "",
"openTo": "",
"enterpriseStatus": "吊销",
"cancelDate": "",
"revokeDate": "",
"address": "北京市房山区良乡长虹东路2号1号楼一层、二层",
"abuItem": "",
"cbuItem": "",
"industryCode": "6639",
"industryName": "金融业",
"recCap": "",
"auditDate": "2018-01-18"
}
],
"alterList": [
{
"altDate": "2016-04-26",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2015-11-18",
"altItem": "投资人"
},
{
"altDate": "2014-11-17",
"altItem": "股东改变姓名或名称"
},
{
"altDate": "2014-11-17",
"altItem": "投资人"
},
{
"altDate": "2012-07-03",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2012-07-03",
"altItem": "董事(理事)、经理、监事"
},
{
"altDate": "2011-10-12",
"altItem": "注册资本"
},
{
"altDate": "2011-10-12",
"altItem": "实收资本(金)"
},
{
"altDate": "2011-10-12",
"altItem": "注册资本"
},
{
"altDate": "2010-09-01",
"altItem": "住所"
},
{
"altDate": "2010-04-02",
"altItem": "住所"
}
]
}
}
@staticmethod
def __get_open_time_shi_xin():
return {
"earliestActiveTime": "2015-05-07",
"latestActiveTime": ""
}
备注1:项目中出现过的问题——当直接写返回三个mock值,进入其中一个mock后,其company_name被改写了,并不是原来输入到模型当中额那个值,分开写后就正常了!
备注2:最好把要用到类写到init里面,而不是放在最外面,这样不容易出现跑测试mock与debug出来的不一样,
class ShiXinFeaturesDealSvc(object):
"""
获取特征数据 -- 按时间节点排列
"""
def __init__(self):
# 依赖对象
self.__network_features_time = NetworkFeaturesTime()
self.featureExtractTimeNodeApiSvc = FeatureExtractTimeNodeApiSvc() 写在类的init初始化方法里面,而不要写在class类的外面!!!只是调用的时候都带上self。
失信特征的提取:
只获取失信时间以前的特征——1)确定失信时间,2)获取特征;3)将特征写入数据库;
1)确定失信时间:一个公司有多个失信记录,取最早的失信时间,
def __get_shixin_end_time(self, company_name):
"""
获取最后一个点的截止时间
"""
# 获取返回失信的相关数据
#通过与时间无关的api调;
shixin_info = self.feature_extract_api_svc.get_cmp_shixin_api(company_name)
# 工商信息
shixin_cmp_data = shixin_info.get(sx_model.DATA_1, {})#这个地方取到的是第一层data里面的数据
publish_date_list = Stream(shixin_cmp_data).take_path(sx_model.DATA_1, []) #这个地方sx_model.DATA_1与前面键名字相同,但取到得是第二层data里面的数据; \
.map(lambda PUBLISHDATE: str(PUBLISHDATE.get('publishDate', ''))[:10]) \
.get()
if len(publish_date_list)>0:
publish_date_list.sort()
sx_time = publish_date_list[0]
else :
sx_time = self.now_time
sx_cnt = Stream(shixin_cmp_data) \
.take_path(sx_model.Data.TOTAL, 0) \
.get()
sx_label = 0
if float(sx_cnt) > 0:
sx_label = 1
return sx_time,sx_label
注意:通过api取参数,ShiXinInfoModel as sx_model;
其中 take_path中sx_model.DATA_1 与 sx_model.Data.DATA 取到的东西一样,其本质都是'data',注意take_path()-take_path(sx_model.Data.TOTAL, 0)函数的理解,第一个参数是路径(可以理解为键值--既可以为单个键,也可以是键列表),第二个参数是如果没有取到则默认为0;
class ShiXinInfoModel(object):
'''
基本信息(收费) 照面信息(注册信息,股东信息,主要人员,分支机构),
工商变更,企业年报.
http://192.168.31.157:8200/doku.php?id=huangyu:%E5%B7%A5%E5%95%86:%E6%B4%9E%E6%82%89api
'''
DATA_1 = 'data' # 数据源
class Data(object): #这样定义一个Data类的原因,可以直接取多个键,比如Data.TOTAL和Data.DATA这样对应两个键:'total','data';而在类里面再定义一个类则是模拟了数据的结构,表明PUBLISHDATE在键'total','data'这个层级结构的里面;
**疑问:貌似取PUBLISHDATE里面的内容的时候,其根本没有根据逐一取,比如先把外层数据取出来,再取内层里面需要的键值,而是直接用键,不管内层,外层,难道这已经避免了外层不会有这个键,所以就这样取??
答复:根据前面两处对sx_model.DATA_1的分析,取值的时候用到了内外层的,是逐层取得,这样本才符合逻辑!**
TOTAL = 'total'
DATA = 'data'
class data(object):
PUBLISHDATE = "publishDate" #公布日期
mock返回最好分开写/关于api取数据(结构多层的情况)/
猜你喜欢
转载自blog.csdn.net/sinat_26566137/article/details/80285128
今日推荐
周排行