Esempio n. 1
0
    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)
Esempio n. 2
0
    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