def get_result_for_data_label(self, data_label, json_data, index=0): """ # data_label: 数据的标签, 如items # json_data: 字典格式的json数据 # index: 需要查找的数据的索引,默认值0代表查找第一个数据 # 功能:返回指定的index的items里面的数据 """ if data_label in json_data.keys(): if type(json_data[data_label]) == dict: return json_data[data_label] elif type(json_data[data_label]) == list: return json_data[data_label][index] else: for key in json_data.keys(): if type(json_data[key]) == dict: data = self.get_result_for_data_label(data_label, json_data[key], index) if data: return data # break elif type(json_data[key]) == list: for item in json_data[key]: data = self.get_result_for_data_label(data_label, item, index) if data: return data # break raise raiseExceptions("data label is not found!")
def get_json_result(self, url, data=None, headers=None, ssl_connection=False): """ # url: 测试的url # data: url请求时发送的数据 # headers: url请求时发送的消息头 # ssl_connection: 是否为https的连接方式 # 功能:获取json格式的数据 """ if data: data = urllib.urlencode(data) if "?" not in url: url = url + "?" url = url + data if headers: if type(headers) == unicode: headers = eval(headers) req = urllib2.Request(url, headers=headers) else: req = urllib2.Request(url) if ssl_connection: gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) # context = ssl._create_unverified_context() content = eval(urllib2.urlopen(req, context=gcontext).read()) else: content = eval(urllib2.urlopen(req).read()) if type(content) == dict: return content else: raise raiseExceptions("content is not json!\n" + content)
def compare_all_keywords_for_data_label(self, lists): """ # lists: 所有数据的关键字的集合,如items字段对应的所有数据的关键字的集合 # 功能:对比所有的关键字集合是不是一样 """ if lists.count(lists[0]) == len(lists): return True else: raise raiseExceptions("the keywords for data label is not the same!")
def post_url_and_get_result(self, url, data=None, headers=None, ssl_connection=False): if headers: req = urllib2.Request(url, headers=headers) else: req = urllib2.Request(url) if ssl_connection: gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) # context = ssl._create_unverified_context() content = eval(urllib2.urlopen(req, data=data, context=gcontext).read()) else: content = eval(urllib2.urlopen(req, data=data).read()) if type(content) == dict: return content else: raise raiseExceptions("content is not json!\n" + content)
def get_data_label_keywords(self, json_data, data_label, used_once=True, keywords=[], all=False): """ # data_label: 数据的标签, 如items # json_data: 字典格式的json数据 # used_once: 第一次调用的时候,可以不设置此参数,第二次或者重复调用是,used_once请设置为False # keywords: 不用设置这个参数,keyword只做内部逻辑使用 # all: True的时候返回所有的data_label数据的关键字,如items对应的所有数据的关键字,格式为[[], [], []];False的时候只返回data_label数据的第一个数据的所有关键字,如items对应的第一条数据的所有关键字,格式为[] # 功能:返回items字段的所有数据的关键字或者只返回一条数据的关键字 """ if used_once: pass else: keywords = [] used_once = True if data_label in json_data.keys(): if type(json_data[data_label]) == dict: if all: keywords.append(json_data[data_label].keys()) else: keywords += json_data[data_label].keys() elif type(json_data[data_label]) == list: for item in json_data[data_label]: if all: keywords.append(item.keys()) else: keywords += item.keys() break return keywords else: for key in json_data.keys(): if type(json_data[key]) == dict: if all: keywords = self.get_data_label_keywords(json_data[key], data_label, used_once, keywords, all=True) else: keywords = self.get_data_label_keywords(json_data[key], data_label, used_once, keywords) if keywords: return keywords # break elif type(json_data[key]) == list: for item in json_data[key]: if all: keywords = self.get_data_label_keywords(item, data_label, used_once, keywords, all=True) else: keywords = self.get_data_label_keywords(item, data_label, used_once, keywords) if keywords: return keywords # break raise raiseExceptions("data label is not found!")
def get_keyword_result(self, json_data, keyword): """ # json_data: 字典格式的json数据 # keywords: json数据里面的关键字,不一定是items里面字段,可以是外层的,如msg,status;如果是items里面的字段,会返回第一条数据里面这个字段的值 # 功能:获取指定关键字的值 """ if keyword in json_data.keys(): return json_data[keyword] else: for key in json_data.keys(): if type(json_data[key]) == dict: return_result = self.get_keyword_result(json_data[key], keyword) if return_result or (return_result != False and return_result != None) or return_result == 0: return return_result # break elif type(json_data[key]) == list: for item in json_data[key]: return_result = self.get_keyword_result(item, keyword) if return_result or (return_result != False and return_result != None) or return_result == 0: return return_result # break raise raiseExceptions("keyword " + keyword + " is not found!")
def get_all_results_for_data_label(self, data_label, json_data): """ # data_label: 数据的标签, 如items # json_data: 字典格式的json数据 # 功能:返回items的所有数据 """ if data_label in json_data.keys(): return json_data[data_label] else: for key in json_data.keys(): if type(json_data[key]) == dict: data = self.get_all_results_for_data_label(data_label, json_data[key]) if data: return data # break elif type(json_data[key]) == list: for item in json_data[key]: if type(item) == dict: data = self.get_all_results_for_data_label(data_label, item) if data: return data # break raise raiseExceptions("data label is not found!")
def get_keyword_results(self, json_data, data_label, keyword): """ # json_data: 字典格式的json数据 # data_label: 数据的标签, 如items # keywords: json数据里面items字段里面的某一个字段 # 功能:获取指定关键字的所有值,例如items里面name字段的所有值 """ if data_label in json_data.keys(): values = [] for item in json_data[data_label]: values.append(item[keyword]) return values else: for key in json_data.keys(): if type(json_data[key]) == dict: if self.get_keyword_results(json_data[key], data_label, keyword): return self.get_keyword_results(json_data[key], data_label, keyword) # break elif type(json_data[key]) == list: for item in json_data[key]: if self.get_keyword_results(item, data_label, keyword): return self.get_keyword_results(item, data_label, keyword) # break raise raiseExceptions("keyword or data label is not found!")