def set_date(self, url, url2, bill_date, keyword): """ 设置查询账单的日期(不同类型的信息,传输的内容存在不同) :param url: 信息首页 :param url2:设置查询时间信息首页 :param bill_date:查询时间 :param keyword:查询那种信息 'call': 通话记录 'sms': 短信记录 'net': 上网记录 'bill': 历史账单 :return: None: 获取信息失败 False: 该月不存在要查询的信息 True: 获取信息成功 """ set_date_success = None current_infos = self.keyword_infos.get(keyword) if current_infos is None: self.write_log(keyword + u" -- 还不能提供该类信息的查询!") self.write_log(u"设置查询日期失败(查询信息类型不支持): " + str(keyword) + "!") return set_date_success else: self.write_log(u"尝试设置查询日期:" + str(current_infos) + "...") # 依次进行如下操作: # 1. 打开信息首页,并检验是否登录状态 try: self.ses.get(url) except Exception as e: self.write_log(u"[3002] 无法打开查询网页(设置查询日期): " + str(current_infos) + " : " + url) self.write_log(traceback.format_exc()) return set_date_success if not self.check_if_login(): self.write_log(u"在查询" + str(current_infos) + "掉出登录") return set_date_success # 2. 根据不同类型的信息,设置不同的post data date_list = Operator.get_begin_end_date(bill_date) post_data = { "querytype": "0001", "querycode": "0001", "billdate": bill_date.replace("-", "") } # 3. 传送post data到指定信息页面 try: strtsmp = self.get_timestamp() res = self.ses.post(url2.format(strtsmp=strtsmp), data=post_data) except Exception as e: self.write_log(u"[3002] 无法打开查询网页(设置查询日期): " + str(url2)) self.write_log(traceback.format_exc()) return set_date_success # 4. 检查是否成功获取指定信息: try: json_res = res.json() except Exception as e: self.write_log(u"[3003] 获得的结果不匹配!" + str(current_infos)) self.write_log(traceback.format_exc()) return set_date_success # 5. 根据查询信息的类别,提取关键词信息 if keyword == "bill": set_date_success = json_res.get("issuccess") if set_date_success is True: result_json = res.json().get("historyResultList") if result_json is None: res_json = res.json().get("result") if res_json is not None: result_json = res_json.get("billinfo") return self.get_bill_by_month_detail(result_json, bill_date)
def get_smss_by_month_detail(self, check_url, url, bill_date): self.write_log(u"开始请求短信记录, 查询月份: " + str(bill_date)) self.write_log(u"尝试设置查询日期:短信记录...") smss_list = [] # 依次进行如下操作: # 1. 打开信息首页,并检验是否登录状态 try: self.ses.get(check_url) except Exception as e: self.write_log(u"[3002] 无法打开查询网页(设置查询日期): " + url) self.write_log(traceback.format_exc()) if not self.check_if_login(): self.write_log(u"在查询 短信记录 掉出登录") # 2. 根据不同类型的信息,设置不同的post data date_list = Operator.get_begin_end_date(bill_date) page_no = 1 post_data = { "pageNo": "1", "pageSize": "20", "begindate": date_list[0].replace("-", ""), "enddate": date_list[1].replace("-", "") } try: strtsmp = self.get_timestamp() res = self.post(url.format(strtsmp=strtsmp), post_data=post_data) smss_list.extend(self.get_smss_by_page_detail(res.json())) self.write_log(u"查询数据" + str(bill_date) + "月, 查询第1页...") except Exception as e: self.write_log(u"[3002] 无法打开查询网页(设置查询日期): " + str(url)) self.write_log(traceback.format_exc()) # 4. 检查是否成功获取指定信息: try: json_res = res.json() page_map = json_res.get('pageMap') if page_map != None: total_pages = page_map.get('totalPages') page_no = int(page_map.get('pageNo')) for page in range(2, total_pages): try: post_data['pageNo'] = str(page) strtsmp = self.get_timestamp() res = self.post(url.format(strtsmp=strtsmp), post_data=post_data) smss_list.extend(self.get_smss_by_page_detail(res.json())) self.write_log(u"查询数据" + str(bill_date) + "月, 查询第" + str(page) + "页..., 总数据页数: " + str(total_pages)) except Exception as e: self.write_log(u"[3002] 无法打开查询网页(设置查询日期): " + str(url)) self.write_log( u"查询数据失败, " + str(bill_date) + "月, 查询第" + str(page) + "页..., 总数据页数: " + str(total_pages)) self.write_log(traceback.format_exc()) self.write_log(u"请求短信记录成功, 查询月份: " + str(bill_date)) except Exception as e: self.write_log(u"[3003] 获得的结果不匹配!短信记录 ") self.write_log(traceback.format_exc()) return smss_list