def get(self): #提取爬虫设置信息 #?setInfo={'spiderName': "ceshi2", 'spiderTag': 'webPage', 'spiderUrl': "", "spiderRule": "", 'isValid':'False', 'isDel':'True', "timeSet" : "* * * * *", 'mark':'测试设置' } #?setInfo={'spiderName': "sh000001", 'spiderTag': 'quote', 'spiderUrl': "", "spiderRule": "", 'isValid':'True', 'isDel':'False', "timeSet" : "* 9-20 * * 1-6", 'mark':'测试设置' } params = request.args.get('setInfo', "{}") setInfo = myData_Json.Trans_ToJson(params) #setInfo = myData_Trans.Tran_ToDict(params) bRes = not (setInfo.get("spiderName", "") == "") bRemove = myData_Trans.To_Bool(setInfo.get('isDel', "False")) if(setInfo.get("timeSet", None) == None): setInfo['timeSet'] = "* 9-15 * * 1-5" if(bRes and bRemove): bRes = setsSpider._Remove(setInfo['spiderName']) bRes = setsSpider._Find(setInfo["spiderName"]) == None else: bRes = setsSpider._Edit(setInfo) pMsg = copy.deepcopy(gol._Get_Setting('Return_strFormat', {})) if(bRes): pMsg['result'] = True spiderInfo = setsSpider._Find(setInfo["spiderName"]) if(bRemove != True and spiderInfo != None): if(spiderInfo.isValid and not spiderInfo.isDeled): pMsg['datas'] = [spiderInfo.ToDict()] #return myData_Json.Trans_ToJson_str(pMsg) #使用jsonify来讲定义好的数据转换成json格式,并且返回给前端 return jsonify(pMsg)
def _Trans_Value(self, value, utype): if(utype == "string"): return str(value) elif(utype == "float"): if(type(value) == float): return value if(type(value) == int): return value return myData_Trans.To_Float(value) elif(utype == "int"): if(type(value) == int): return value return myData_Trans.To_Int(value) elif(utype == "bool"): if(type(value) == bool): return value return myData_Trans.To_Bool(value) elif(utype == "datetime"): if(type(value) == datetime.datetime): return value return self._Trans_Value_Datetime(value) elif(utype == "list"): if(type(value) == list): return value if(value == None): return [] if(value.count("~*^") > 0): data = list(json.loads(value.replace("~*^", ","))) return data else: return [] return value
def InitBystr(self, strSets): if(len(strSets) > 5): self.spiderName = strSets[0] self.spiderTag = strSets[1] self.spiderUrl = strSets[2] self.spiderRule = strSets[3].replace(';', ',') self.isValid = myData_Trans.To_Bool(strSets[4]) self.timeSet = strSets[5].replace(';', ',') #时间规则 self.mark = strSets[6] self.InitRule() return True
def get(self): #提取股票信息 pMsg = copy.deepcopy(gol._Get_Setting('Return_strFormat', {})) pRisks = gol._Get_Value('zxcRisk_Control', None) bResult = True # 组装参数并添加 #dicParam = {"边界限制": True,"定量监测": False, "监测间隔": 0.01,"止盈线": 0.20, "止损线": -0.05, "动态止盈": True, "动态止损": True, "止盈回撤": 0.01, "止盈比例": 0.20, "止损回撤": 0.01, "止损比例": 0.20 } usrID = request.args.get('usrID', '') usrTag = request.args.get('usrTag', '') code_id = request.args.get('code_id', "") code_name = request.args.get('code_name', "") removeSet = myData_Trans.To_Bool(request.args.get('removeSet', False)) paramInfo = myData_Trans.Tran_ToDict(request.args.get('setInfo', "{}")) paramInfo['removeSet'] = removeSet dtTrade = request.args.get('time', "") dateTag = request.args.get('dateTag', "") stockPrice = myData_Trans.To_Float( str(request.args.get('stockPrice', 0))) stockNum = myData_Trans.To_Int(str(request.args.get('stockNum', 0))) if (removeSet == False and (stockPrice == 0 or stockNum == 0)): bResult = False pMsg['text'] = "股价、数量不能为0." if (usrID == "" and usrTag == ""): bResult = False pMsg['text'] = "用户信息不能为空." if (bResult): strR = pRisks.addRiskSet(usrID, usrTag, code_id, code_name, stockPrice, stockNum, dtTrade, dateTag, paramInfo) #解析参数 strTag = "风控设置:" + code_name + "\n" if (bResult): if (removeSet == False): if (stockPrice == 0 or stockNum == 0): pMsg['text'] = strTag + " --已成功修改参数信息." else: trade = myData.iif(stockNum > 0, "买入", "卖出") if (stockNum % 100 == 0): pMsg[ 'text'] = strTag + F"新增{trade}:{str(abs(stockNum))} 股.\n{trade}均价:{stockPrice} 元/股)." else: pMsg[ 'text'] = strTag + F"新增{trade}:{str(abs(stockNum))} 张.\n{trade}均价:{stockPrice} 元/张." bResult = True else: pMsg['text'] = strTag + " --设置已成功移除." bResult = True pMsg['result'] = bResult if (bResult == ""): pMsg['text'] = strTag + "操作失败!" return pMsg
def Add_Row_BySimply(self, strInfo, updata = False, bSave = True): lines = strInfo.replace('\r\n', '').replace('\n', '').split(',') ind = 1 rowInfo = {} for x in self.fields: rowInfo[x] = lines[ind] ind = ind + 1 #系统字段初始 rowInfo["ID"] = myData_Trans.To_Int(lines[0]) if(len(lines) - 2 == len(self.fields)): rowInfo["isDel"] = myData_Trans.To_Bool(lines[len(self.fields) + 1]) return self.Add_Row(rowInfo, updata, bSave)
def Add_Field(self, fieldName, fieldType = myIO_xlsx.myFiledype.string, isIndex = False, fieldName_alias = ''): # 以字典方式组织字段头 if(fieldType == ""): fieldType = myIO_xlsx.myFiledype.string isIndex = myData_Trans.To_Bool(str(isIndex)) # 字段方式定义索引 fieldName = fieldName.replace('\r\n', '').replace('\n', '') if(fieldName[:2] == '**'): isIndex = True fieldName = fieldName[2:] self.fields[fieldName] = {'name': fieldName,'nameAlias': fieldName_alias, 'type': fieldType, 'isIndex': isIndex} self._Add_IndexField(fieldName, isIndex) return True
def get(self): #提取股票信息 extype = request.args.get('extype', "") code_id = request.args.get('code_id', "") code_name = request.args.get('code_name', "") removeSet = myData_Trans.To_Bool(request.args.get('removeSet', '')) pMsg = copy.deepcopy(gol._Get_Setting('Return_strFormat', {})) pStocks = gol._Get_Value('setsStock', None) lstStock = pStocks._Find(code_id, "", exType=extype) if (len(lstStock) != 1): pMsg['text'] = "股票代码或名称错误!" return pMsg pStock = lstStock[0] strTag = "股票设置:" + pStock.code_name + "\n " #解析参数 bResult = False if (bResult == False): #提取行情对象 pSource = gol._Get_Value('quoteSource', None) pSets = gol._Get_Value('setsQuote', None) if (pSource != None and pSets != None): if (removeSet == False): editInfo = myData_Trans.Tran_ToDict( request.args.get('editInfo', "{}")) if (pSets._Edit(pStock.extype, pStock.code_id, pStock.code_name, editInfo)): pSource.params = pSource._getDefault_Param() pMsg['text'] = strTag + " --设置已成功修改。" bResult = True print(pSource.params) else: usrID = request.args.get('usrID', '') usrPlat = request.args.get('usrPlat', 'wx') if (pSets._Remove(pStock.extype, pStock.code_id, pStock.code_name, usrID)): pSource.params = pSource._getDefault_Param() pMsg['text'] = strTag + " --设置已成功移除。" bResult = True print(pSource.params) pMsg['result'] = bResult if (bResult == ""): pMsg['text'] = strTag + "操作失败!" return pMsg
def loadDt_Row(self, ind_row, col_start=0, isField=False, csvLines=None): pTypes = self.dataFieldType nFields = len(pTypes) pValues = [] if (csvLines == None): rows = self.sheet.row_values( ind_row) # 获取整行内容,列内容: pSheet.col_values(i) cols = self.sheet.ncols else: rows = csvLines # csv行数据 cols = len(self.dataField) # 转换数据类型 cols_row = len(rows) for j in range(col_start, cols): if (nFields > j and cols_row > j and isField == False): if (pTypes[j] == myFiledype.float): pValues.append(float(rows[j])) continue elif (pTypes[j] == myFiledype.int): pValues.append(int(rows[j])) continue elif (pTypes[j] == myFiledype.datetime): nCount = rows[j].count(":") if (nCount == 0): pValues.append( myData_Trans.Tran_ToDatetime(rows[j], "%Y-%m-%d")) elif (nCount == 1): pValues.append( myData_Trans.Tran_ToDatetime( rows[j], "%Y-%m-%d %H:%M")) else: pValues.append(myData_Trans.Tran_ToDatetime(rows[j])) continue elif (pTypes[j] == myFiledype.bool): pValues.append(myData_Trans.To_Bool(rows[j])) continue #其他全部为默认类型 pValues.append(rows[j]) return pValues
def _Init_BySet_str(self, strSet): strSets = strSet.split(',') if (len(strSets) < 10): return False #初始设置集 ids = strSets[0].split('.') pSet = self._Find("", ids[0] + ids[1]) if (pSet == None): pSet = myQuote_Settings(ids[0], ids[1], "", "") self._Index(pSet) #按类型初始 if (pSet): monitorTag = strSets[5] pSetting = pSet.settings.get(monitorTag, None) if (pSetting == None): if (monitorTag == "整点播报" or monitorTag == "涨跌监测"): #特殊类型处理 pSetting = myQuote_Setting(monitorTag) else: pSetting = None return False #底层属性提取 pSetting.monitorTag = monitorTag pSetting.isValid = myData_Trans.To_Bool(strSets[6]) pSetting.setStr = strSets[7] pSetting.mark = strSets[9] msgUsers = myData_Trans.Tran_ToDict(strSets[8].replace(',', ',')) for x in msgUsers: pSetting.msgUsers[x] = msgUsers[x] # 特殊同步设置 if (x == "茶叶一主号"): pSetting.msgUsers["老婆"] = msgUsers[x] pSet.AddSetting(pSetting) self._Index_User(pSet) return True return False
def _Edit(self, dictSet): bResult = False name = dictSet.get("spiderName", "") if(name == ""): return False #初始设置集 pSet = self._Find(name) if(pSet == None): pSet = mySpider_Setting(name, dictSet.get("spiderTag", "") + "", dictSet.get("spiderUrl", "") + "", dictSet.get("spiderRule", "" + ""), dictSet.get("timeSet", "") + "") bResult = self._Index(pSet) else: pSet.spiderTag = dictSet.get("spiderTag", pSet.spiderTag + "") pSet.spiderUrl = dictSet.get("spiderUrl", pSet.spiderUrl + "") pSet.spiderRule = dictSet.get("spiderRule", pSet.spiderRule + "") pSet.timeSet = dictSet.get("timeSet", pSet.timeSet + "") bResult = pSet.InitRule(); bResult = True pSet.isValid = myData_Trans.To_Bool(dictSet.get("isValid", str(pSet.isValid))) pSet.mark = dictSet.get("mark", pSet.mark) if(bResult): self.change_reply(pSet.spiderTag, name) self._Save() return bResult
def createDB_ByFile(self, dbName, dbSet_MdFile='', isRecover=False): try: #读取表字段信息集 if (dbSet_MdFile == ""): strDir, strName = myIO.getPath_ByFile(__file__) dirBase = os.path.abspath(os.path.join(strDir, "..")) dir = dirBase + "/Data/DB_Data/" dbSet_MdFile = dir + dbName + ".md" pMD = myIO_md.myMD(dbSet_MdFile) if (len(pMD.nodesMD) < 1): return False #数据库创建,不存在或者强制覆盖 bReusult = True if (self.isExist_DB(dbName) == False or isRecover == True): bReusult = bReusult & (self.createDB(dbName) >= 0) #循环更新创建表信息 self.initConnect(dbName) for x in pMD[0].Childs: #提取表信息 pTable = x.getTable() bRecover = x.titleName.count("-*r") == 1 tbName = x.titleName.replace("-*r", "") #创建表-检查存在,如果覆盖则重建 if (bRecover == True): bReusult = bReusult & (self.dropTable(tbName) >= 0) if (self.isExist_Table(tbName) == False or bRecover == True): bReusult = bReusult & (self.createTable(tbName) >= 0) #循环所有字段,创建或更新字段信息 for ind in range(1, pTable.rows): fieldName = pTable['字段名'].values[ind] fieldType = pTable['字段类型'].values[ind] fieldLength = myData_Trans.To_Int( pTable['字段长度'].values[ind]) nullable = myData_Trans.To_Bool(pTable['是否可空'].values[ind]) isIndex = myData_Trans.To_Bool(pTable['是否索引'].values[ind]) default = pTable['默认值'].values[ind].replace('-', '') indexType = pTable['索引类型'].values[ind].replace('-', '') #创建字段 tableInfo = { 'tb_name': tbName, 'fields': [{ "columnName": fieldName, "dataType": fieldType, "fieldLength": fieldLength, 'nullable': nullable, 'columnDefault': default }] } bReusult = bReusult & (self.createField(tableInfo) >= 0) #创建索引 if (isIndex and indexType != ""): bReusult = bReusult & (self.createIndex( tbName, indexType, indexType + "_" + fieldName, fieldName) >= 0) #创建默认字段 tableInfo = { 'tb_name': tbName, 'fields': [{ "columnName": 'isDel', "dataType": 'bool', "fieldLength": 0, 'nullable': False }] } bReusult = bReusult & (self.createField(tableInfo) >= 0) tableInfo = { 'tb_name': tbName, 'fields': [{ "columnName": 'editTime', "dataType": 'datetime', "fieldLength": 0, 'nullable': False }] } bReusult = bReusult & (self.createField(tableInfo) >= 0) return bReusult except Exception as e: myDebug.Debug(f'error:{e}') return False