예제 #1
0
파일: Query.py 프로젝트: xzgxp/EasyTrain
 def query(session,
           trainDate,
           fromStation,
           toStation,
           passengerType=PASSENGER_TYPE_ADULT):
     params = {
         r'leftTicketDTO.train_date': trainDate,
         r'leftTicketDTO.from_station': city2code(fromStation),
         r'leftTicketDTO.to_station': city2code(toStation),
         r'purpose_codes': passengerType
     }
     # response = NetUtil.normalGet(Query.__url, params=params, headers={'User-Agent': random.choice(USER_AGENT)}).json()
     headers = {
         'User-Agent': FIREFOX_USER_AGENT,
         'Referer': r'https://kyfw.12306.cn/otn/leftTicket/init',
         'Connection': 'keep-alive',
     }
     response = NetUtils.get(session,
                             Query.__url,
                             params=params,
                             headers=headers,
                             verify=False)
     print(response.text)
     response = response.json()
     response = response['data'] if 'data' in response else Log.e(
         "can not find key: 'data'")
     queryResults = response['result'] if 'result' in response else Log.e(
         "can not find key: 'result'")
     return Query.__decode(queryResults, passengerType)
예제 #2
0
파일: Submit.py 프로젝트: weaming/EasyTrain
    def __waitForOrderId(self):
        Log.v("正在排队获取订单!")
        count = 0
        while True:
            count += 1
            status, msg, waitTime, orderId, errorMsg = self._queryOrderWaitTime(
            )
            if not Utils.check(status, "queryOrderWaitTime: %s" % msg):
                return None
            Log.v("[%d]正在等待订单提交结果..." % count)
            if waitTime < 0:
                if orderId:
                    Log.v("订单提交成功,订单号: %s" % orderId)
                    return orderId
                elif errorMsg:
                    Log.e(errorMsg)
                    return None
            interval = waitTime // 60
            Log.w("未出票,订单排队中...预估等待时间: %s 分钟" %
                  (interval if interval <= 30 else "超过30"))
            if interval > 30:
                time.sleep(60)
            elif interval > 20:
                time.sleep(30)
            elif interval > 10:
                time.sleep(10)
            else:
                time.sleep(3)

        return None
예제 #3
0
    def _getExtraInfo(self):
        def getRepeatSubmitToken(html):
            repeatSubmitToken = re.findall(
                r"var globalRepeatSubmitToken = '(.*)'", html)[0]
            # print('RepeatSubmitToken = %s' % repeatSubmitToken)
            return repeatSubmitToken

        formData = {'_json_att': ''}
        extra_info = copy.deepcopy(self._urlInfo['getExtraInfo'])
        # extra_info['headers']['Referer'] = self._urlInfo['getExtraInfo']['headers']['Referer']+ '?linktypeid='+self.__ticket.tourFlag
        response = EasyHttp.post_custom(extra_info, data=formData)

        if response and response.status_code == requests.codes.ok:
            html = response.text
            if html.find('系统忙,请稍后重试') != -1:
                Log.e('系统忙,请稍后重试...')
                return False
        else:
            html = None
        # html = EasyHttp.send(self._urlInfo['getExtraInfo'])
        if not Utils.check(
                html,
                'failed to visit %s' % self._urlInfo['getExtraInfo']['url']):
            return False
        self.__ticket.repeatSubmitToken = getRepeatSubmitToken(html)

        def decodeTicketInfoForPassengerForm(html):
            ticketInfoForPassengerForm = re.findall(
                r'var ticketInfoForPassengerForm=(.*);', html)[0]
            return json.loads(ticketInfoForPassengerForm.replace("'", "\""))

        # print('=======================')
        self.__ticket.ticketInfoForPassengerForm = decodeTicketInfoForPassengerForm(
            html)
        return True
예제 #4
0
파일: Query.py 프로젝트: zvrr/12306-1
    def query(flag,
              base_url,
              trainDate,
              fromStation,
              toStation,
              passengerType=PASSENGER_TYPE_ADULT):
        # params = {
        #     r'leftTicketDTO.train_date': trainDate,
        #     r'leftTicketDTO.from_station': city2code(fromStation),
        #     r'leftTicketDTO.to_station': city2code(toStation),
        #     r'purpose_codes': passengerType
        # }
        params = collections.OrderedDict()
        params['leftTicketDTO.train_date'] = trainDate
        params['leftTicketDTO.from_station'] = city2code(fromStation)
        params['leftTicketDTO.to_station'] = city2code(toStation)
        params['purpose_codes'] = passengerType

        if flag > 1:
            jsonRet = EasyHttp.send(queryUrls['query'], params=params)
        else:
            for suffix in ['', 'O', 'X', 'Z', 'A', 'T', 'V']:
                queryUrls['query']['url'] = base_url + suffix
                jsonRet = EasyHttp.send(queryUrls['query'], params=params)
                if jsonRet:
                    break
        try:
            if jsonRet:
                return Query.__decode(jsonRet['data']['result'], passengerType)
        except Exception as e:
            Log.e(e)

        return []
예제 #5
0
def main():
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(USER_NAME, USER_PWD)
    if not Utils.check(result, msg):
        Log.e(msg)
        return
    Log.v('%s,登录成功' % msg)

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'
    while True:
        # 死循环一直查票,直到下单成功
        try:
            print('-' * 40)
            ticketDetails = Query.loopQuery(TRAIN_DATE, FROM_STATION, TO_STATION,
                                            TrainUtils.passengerType2Desc(passengerTypeCode),
                                            TRAINS_NO,
                                            seatTypesCode)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit():
                submit.showSubmitInfoPretty()
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    print(login.loginOut())
예제 #6
0
    def __waitForOrderId(self):
        Log.v('正在排队获取订单!')
        count = 0
        while True:
            count += 1
            status, msg, waitTime, orderId, errorMsg = self._queryOrderWaitTime()
            if not Utils.check(status, 'queryOrderWaitTime: %s' % msg):
                return None
            Log.v('[%d]正在等待订单提交结果...' % count)
            if waitTime < 0:
                if orderId:
                    Log.v('订单提交成功,订单号: %s' % orderId)
                    return orderId
                elif errorMsg:
                    Log.e(errorMsg)
                    time.sleep(3)
                    return None
                else:
                    time.sleep(3)
                    continue
            interval = waitTime // 60
            Log.w('未出票,订单排队中...预估等待时间: %s 分钟' % (interval if interval <= 30 else '超过30'))
            if interval > 30:
                time.sleep(60)
            elif interval > 20:
                time.sleep(30)
            elif interval > 10:
                time.sleep(10)
            else:
                time.sleep(3)

        return None
예제 #7
0
파일: Submit.py 프로젝트: xiaoyunge/12306-2
    def submit(self, choose_seat):
        self._check_user(self.__ticket.tourFlag)

        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, 'submitOrderRequesst: %s' % msg):
            return False
        Log.v('提交订单请求成功!')

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, 'getPassengerDTOs: %s' % msg):
            return False
        Log.v('获取乘客信息成功!')

        passengersDetails = []
        if len(self.__ticket.passengersId) >= self.__ticket.remindNum:
            for i in range(self.__ticket.remindNum):
                id = self.__ticket.passengersId[i]
                ticket_details = passengersDetailsList.get(id[-3:])
                ticket_details.passengerIdNo = id
                passengersDetails.append(ticket_details)
        else:
            for id in self.__ticket.passengersId:
                ticket_details = passengersDetailsList.get(id[-3:])
                ticket_details.passengerIdNo = id
                passengersDetails.append(ticket_details)

        # time.sleep(0.2)
        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           'checkOrderInfo: %s' % msg) or not Utils.check(
                               submitStatus, 'checkOrderInfo: %s' % errMsg):
            return False
        Log.v('校验订单信息成功!')

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, 'getQueueCount: %s' % msg):
            return False
        Log.v('%s 剩余车票:%s ,目前排队人数: %s' %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails, choose_seat)
        if not Utils.check(status, 'confirmSingleOrGoForQueue: %s' % msg) \
                or not Utils.check(submitStatus, 'confirmSingleOrGoForQueue: %s' % errMsg or '订单信息提交失败!'):
            return False

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, '订单获取失败!'):
            return False

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, 'resultOrderForDcOrWcQueue: %s' % msg):
            return False
        if not submitStatus:
            Log.e('订单提交失败!')
            return False
        Log.v('您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!')
        return True
예제 #8
0
def main():
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(USER_NAME, USER_PWD, IS_AUTO_CHECK_CAPTHCA)
    if not Utils.check(result, msg):
        Log.e(msg)
        return
    Log.v('%s,登录成功' % msg)

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit(CHOOSE_SEATS):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM,
                                      TO_NUM,
                                      '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送成功!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    print(login.loginOut())
예제 #9
0
def working(username=USER_NAME, password=USER_PWD, id_cards=PASSENGERS_ID, day=TRAIN_DATE, from_station=FROM_STATION,
            to_station=TO_STATION,
            seats=SEAT_TYPE_CODE, types=PASSENGER_TYPE_CODE, train_no=TRAINS_NO, polocy=POLICY_BILL,
            tour_flag=TOUR_FLAG, refersh=QUERY_TICKET_REFERSH_INTERVAL):
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL)
    init_ip_pool()
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(username, password, IS_AUTO_CHECK_CAPTHCA)
    if not Utils.check(result, msg):
        Log.e(msg)
        return
    Log.v('%s,登录成功' % msg)

    seatTypesCode = seats if seats else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]
    passengerTypeCode = types if types else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d 次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(day, from_station, to_station,
                                            TrainUtils.passengerType2Desc(passengerTypeCode),
                                            train_no,
                                            seatTypesCode, id_cards, polocy, refersh)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = id_cards
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = tour_flag if tour_flag else 'dc'
            submit = Submit(ticketDetails)
            if submit.submit(CHOOSE_SEATS):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")
                    sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                    if sms_id:
                        Log.v("短信提醒发送成功!")
                    else:
                        Log.v("短信提醒发送成功!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w("提交操作异常:" + e)
    print(login.loginOut())
예제 #10
0
def normalGet(url, params=None, **kwargs):
    try:
        response = requests.get(url, params=params, **kwargs)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response
    except:
        Log.e('can not visit url: ' + url)
        return None
예제 #11
0
def post(session, url, data=None, json=None, **kwargs):
    try:
        response = session.post(url, data, json, **kwargs)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response
    except:
        Log.e('can not visit url: ' + url)
        return None
예제 #12
0
def do_login():
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(USER_NAME, USER_PWD, SELECT_AUTO_CHECK_CAPTHCA)
    EasyHttp.save_cookies(COOKIE_SAVE_ADDRESS)
    if not Utils.check(result, msg):
        Log.e(msg)
        return False, login
    Log.v('%s,登录成功' % msg)
    return True, login
예제 #13
0
def get(session, url, **kwargs):
    try:
        response = session.get(url, **kwargs)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response
    except:
        Log.e('can not visit url: ' + url)
        raise
        return None
예제 #14
0
def do_login(): 
    login = Login()
    Log.v('正在登录...')
    result,msg = login.login(USER_NAME,USER_PWD)
    eHttp.save_cookies(COOKIE_SAVE_ADDRESS)
    if not check(result, msg):
        Log.e(msg)
        return False,login
    Log.v('%s,登录成功' % msg)
    return True,login
예제 #15
0
파일: Capthca.py 프로젝트: Mr-Mei/12306
 def verifyCaptchaByClound(self, type=TYPE_LOGIN_NORMAL_WAY):
     captchaContent = self.getCaptcha(type)
     if captchaContent:
         FileUtils.saveBinary(Captcha.__CAPTCHA_PATH, captchaContent)
     else:
         Log.e('failed to save captcha')
         return None
     results = damatuWeb.verify(Captcha.__CAPTCHA_PATH)
     results = self.__cloundTransCaptchaResults(results)
     Log.v('captchaResult: %s' % results)
     return results, self.check(results)
예제 #16
0
 def query(flag, base_url, trainDate, fromStation, toStation, passengerType=PASSENGER_TYPE_ADULT):
     params = collections.OrderedDict()
     params['leftTicketDTO.train_date'] = trainDate
     params['leftTicketDTO.from_station'] = city2code(fromStation)
     params['leftTicketDTO.to_station'] = city2code(toStation)
     params['purpose_codes'] = passengerType
     jsonRet = eHttp.send(queryUrls['query'], params=params)    
     try:
         if jsonRet:
             return Query.__decode(jsonRet['data']['result'], passengerType)
     except Exception as e:
         Log.e(e)
     return []
예제 #17
0
파일: Query.py 프로젝트: wolfyun/EasyTrain
 def query(trainDate, fromStation, toStation, passengerType=PASSENGER_TYPE_ADULT):
     params = {
         r'leftTicketDTO.train_date': trainDate,
         r'leftTicketDTO.from_station': city2code(fromStation),
         r'leftTicketDTO.to_station': city2code(toStation),
         r'purpose_codes': passengerType
     }
     jsonRet = EasyHttp.send(queryUrls['query'], params=params)
     try:
         if jsonRet:
             return Query.__decode(jsonRet['data']['result'], passengerType)
     except Exception as e:
         Log.e(e)
     return []
예제 #18
0
파일: Submit.py 프로젝트: weaming/EasyTrain
    def submit(self):
        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, "submitOrderRequesst: %s" % msg):
            return False
        Log.v("提交订单请求成功!")

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, "getPassengerDTOs: %s" % msg):
            return False
        Log.v("获取乘客信息成功!")

        passengersDetails = []
        for id in self.__ticket.passengersId:
            passengersDetails.append(passengersDetailsList.get(id))

        time.sleep(1)
        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           "checkOrderInfo: %s" % msg) or not Utils.check(
                               submitStatus, "checkOrderInfo: %s" % errMsg):
            return False
        Log.v("校验订单信息成功!")

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, "getQueueCount: %s" % msg):
            return False
        Log.v("%s 剩余车票:%s ,目前排队人数: %s" %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails)
        if not Utils.check(status, "confirmSingleOrGoForQueue: %s" %
                           msg) or not Utils.check(
                               submitStatus, "confirmSingleOrGoForQueue: %s" %
                               errMsg or "订单信息提交失败!"):
            return False

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, "订单获取失败!"):
            return False

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, "resultOrderForDcOrWcQueue: %s" % msg):
            return False
        if not submitStatus:
            Log.e("订单提交失败!")
            return False
        Log.v("您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!")
        return True
예제 #19
0
파일: Query.py 프로젝트: weaming/EasyTrain
 def query(trainDate,
           fromStation,
           toStation,
           passengerType=PASSENGER_TYPE_ADULT):
     params = {
         r"leftTicketDTO.train_date": trainDate,
         r"leftTicketDTO.from_station": city2code(fromStation),
         r"leftTicketDTO.to_station": city2code(toStation),
         r"purpose_codes": passengerType,
     }
     jsonRet = EasyHttp.send(queryUrls["query"], params=params)
     try:
         if jsonRet:
             return Query.__decode(jsonRet["data"]["result"], passengerType)
     except Exception as e:
         Log.e(e)
     return []
예제 #20
0
    def submit(self):
        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, 'submitOrderRequesst: %s' % msg):
            return
        Log.v('提交订单请求成功!')

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, 'getPassengerDTOs: %s' % msg):
            return
        Log.v('获取乘客信息成功!')

        passengersDetails = []
        for id in self.__ticket.passengersId:
            passengersDetails.append(passengersDetailsList.get(id))

        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           'checkOrderInfo: %s' % msg) or not Utils.check(
                               submitStatus, 'checkOrderInfo: %s' % errMsg):
            return
        Log.v('校验订单信息成功!')

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, 'getQueueCount: %s' % msg):
            return
        Log.v('%s 剩余车票:%s ,目前排队人数: %s' %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails)
        if not Utils.check(status, 'confirmSingleOrGoForQueue: %s' % msg) \
                or not Utils.check(submitStatus, 'confirmSingleOrGoForQueue: %s' % errMsg or '订单信息提交失败!'):
            return

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, '订单获取失败!'):
            return

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, 'resultOrderForDcOrWcQueue: %s' % msg):
            return
        if not submitStatus:
            Log.e('订单提交失败!')
            return
        Log.v('您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!')
예제 #21
0
class zhihuAnj():

    def __init__(self,url):
        self.m_url = url
        self.m_ret = dict()
        self.m_log = Log()
        
    def getHtml(self,url):
#         url = "http://www.zhihu.com/answer/23966524"
#         url = self.url + "/voters_profile"
        html = urllib.urlopen(url).read()
        return html;
    
    def getInfo(self,url):
        #
        html = self.getHtml(url);
        print html
        jsonRet = json.loads(html);
        #
        total = jsonRet['paging']['total']
        #
        if int(total)>10:
            next = jsonRet['paging']['next']
            follows = next.split('follows=')
            print follows[1]
            return total,follows[1]
        else:
            return total,None

    
    def getPayLoad(self,total,offset,follows):
        if follows != None:
            url = self.m_url + "/voters_profile?total="+str(total)+"&offset="+str(offset)+"&follows="+follows
        else:
            url = self.m_url + "/voters_profile"
            
        html = self.getHtml(url)
        try:
            jsonRet = json.loads(html)
        except Exception,e:
            self.m_log.e(e)
            return
        payLoad = jsonRet['payload']
        return payLoad
예제 #22
0
파일: Query.py 프로젝트: xzgxp/EasyTrain
 def __query(trainDate,
             fromStation,
             toStation,
             passengerType=PASSENGER_TYPE_ADULT):
     params = {
         r'leftTicketDTO.train_date': trainDate,
         r'leftTicketDTO.from_station': city2code(fromStation),
         r'leftTicketDTO.to_station': city2code(toStation),
         r'purpose_codes': passengerType
     }
     response = NetUtils.normalGet(Query.__url,
                                   params=params,
                                   headers={
                                       'User-Agent':
                                       random.choice(USER_AGENT)
                                   }).json()
     response = response['data'] if 'data' in response else Log.e(
         "can not find key: 'data'")
     queryResults = response['result'] if 'result' in response else Log.e(
         "can not find key: 'result'")
     return Query.__decode(queryResults, passengerType)
예제 #23
0
def super_hero(love):
    Log.v('启动***超级英雄***线程')
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS,
                             IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    if 'uamtk' not in cookies or 'RAIL_DEVICEID' not in cookies:
        status, login = do_login(love)
        if not status:
            love.change_offline_status(True)
            return
    else:
        status, _ = check_user_login()
        if not status:
            status, login = do_login(love)
            if not status:
                love.change_offline_status(True)
                return

        Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'
    Log.d("订单详情:日期[%s]/区间[%s至%s]%s%s/刷票间隔[%ss]" %
          (','.join(TRAIN_DATE), FROM_STATION, TO_STATION,
           '/出发时间段[' + '~'.join(leave_time) + ']' if leave_time else '',
           '/车次[' + ','.join(TRAINS_NO) + ']' if TRAINS_NO else '',
           QUERY_TICKET_REFERSH_INTERVAL))
    count = 0
    while True:
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, leave_time, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            status = love.get_login_status()
            # status,_ = check_user_login()
            if not status:
                #非登录状态有票,仅支持自动登录或第三方AI自动登录
                if SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_HAND:
                    Log.e("手动模式登录状态已过期,请手动重试...")

                status, login = do_login(love)
                if not status:
                    Log.e("登录状态已过期,重试登录失败")
                    love.change_offline_status(True)
                    return

            # Log.v('已为您查询到可用余票:%s' % ticketDetails)
            Log.v('已为您查询到可用余票:[日期:%s,车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' %
                  (ticketDetails.custom_date, ticketDetails.trainNo,
                   ticketDetails.fromStation, ticketDetails.toStation,
                   ticketDetails.leaveTime, ticketDetails.arriveTime))

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    Log.v("获取车票详情成功")
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")

                sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM,
                                  '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                if sms_id:
                    Log.v("短信提醒发送成功!")
                else:
                    Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
    love.change_offline_status(True)
예제 #24
0
 def check(target, log):
     if not target:
         Log.e(log)
         return False
     return True
예제 #25
0
def super_hero(love):
    Log.v('启动***超级英雄***线程')
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION')
    #(int(RAIL_EXPIRATION)-172800000) < int(time.time()*1000)
    if RAIL_EXPIRATION and int(RAIL_EXPIRATION) < int(time.time()*1000) :
        Log.d('cookie登录已过期,重新请求')
        status,login = do_login()
        if not status:
            love.change_status(True)
            return
    else:
        if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies):
            status,login = do_login()
            if not status:
                love.change_status(True)
                return
        else:
            status = check_login()
            if not status:
                love.change_status(True)
                return
            login = Login()
            login._urlInfo = loginUrls['normal']
            Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'
    Log.d("订单详情:日期[%s]/区间[%s至%s]%s/车次[%s]/刷票间隔[%ss]"%(TRAIN_DATE,FROM_STATION,TO_STATION,'/出发时间段['+'~'.join(leave_time)+']' if leave_time else '',','.join(TRAINS_NO),QUERY_TICKET_REFERSH_INTERVAL))
    count = 0
    while True:
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            flag,ticketDetails = Query.loopQuery(TRAIN_DATE, FROM_STATION, TO_STATION,
                                            TrainUtils.passengerType2Desc(passengerTypeCode),
                                            TRAINS_NO,
                                            seatTypesCode, PASSENGERS_ID,leave_time, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL,HEART_BEAT_PER_REQUEST_TIME)
            #非登录状态有票,仅支持自动登录或第三方AI自动登录
            if not flag:
                if SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_HAND:
                    Log.e("手动验证模式登录重试失败,请手动重试")
                    return

                status, login = do_login()
                if not status:
                    Log.e("自动验证模式登录重试失败自动登录失败,请手动重试")
                    return

            # Log.v('已为您查询到可用余票:%s' % ticketDetails)
            Log.v('已为您查询到可用余票:[日期:%s,车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' % (ticketDetails.custom_date,ticketDetails.trainNo,ticketDetails.fromStation,ticketDetails.toStation,ticketDetails.leaveTime,ticketDetails.arriveTime))

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT] or ticketDetails.seatType == SEAT_TYPE[SeatName.SECOND_CLASS_SEAT]) and not seats_default:
                results_seat = []
                for i in range(len(PASSENGERS_ID)):
                    random_seat = random.choice(NUM_SEAT)+random.choice(LETTER_SEAT)
                    if random_seat in results_seat:
                        continue
                    results_seat.append(random_seat)
                seats_default.extend(results_seat)

            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    Log.v("获取车票详情成功")
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")

                sms_id = send_sms(ACCOUNT_SID,AUTO_TOKEN,FROM_NUM,TO_NUM,'小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                if sms_id:
                    Log.v("短信提醒发送成功!")
                else:
                    Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')
    love.change_status(True)
예제 #26
0
def main():
    #免费代理ip访问
    GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS,
                             IS_REFASH_IP_POOL)
    init_ip_pool()

    EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS)
    cookies = {c.name: c.value for c in EasyHttp.get_session().cookies}

    RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION')
    #(int(RAIL_EXPIRATION)-172800000) < int(time.time()*1000)
    if RAIL_EXPIRATION and int(RAIL_EXPIRATION) < int(time.time() * 1000):
        Log.d('cookie登录已过期,重新请求')
        status, login = do_login()
        if not status:
            return
    else:
        if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies):
            status, login = do_login()
            if not status:
                return
        else:
            status = check_login()
            if not status:
                return
            login = Login()
            login._urlInfo = loginUrls['normal']
            Log.v('已登录状态,开始寻找小票票')

    seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [
        SEAT_TYPE[key] for key in SEAT_TYPE.keys()
    ]
    passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1'

    count = 0
    while True:
        # 死循环一直查票,直到下单成功
        try:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('第%d次访问12306网站' % count)
            print('-' * 40)
            ticketDetails = Query.loopQuery(
                TRAIN_DATE, FROM_STATION, TO_STATION,
                TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO,
                seatTypesCode, PASSENGERS_ID, POLICY_BILL,
                QUERY_TICKET_REFERSH_INTERVAL)
            Log.v('已为您查询到可用余票:%s' % ticketDetails)

            ticketDetails.passengersId = PASSENGERS_ID
            ticketDetails.ticketTypeCodes = passengerTypeCode
            ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc'
            submit = Submit(ticketDetails)
            seats_default = copy.deepcopy(CHOOSE_SEATS)
            if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT]
                    or ticketDetails.seatType
                    == SeatName.SECOND_CLASS_SEAT) and not seats_default:
                results_seat = []
                for i in range(len(PASSENGERS_ID)):
                    random_seat = random.choice(NUM_SEAT) + random.choice(
                        LETTER_SEAT)
                    if random_seat in results_seat:
                        continue
                    results_seat.append(random_seat)
                seats_default.extend(results_seat)

            #仅支持自动登录或第三方AI自动登录
            status = check_re_login()
            if not status and SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_MYSELF:
                status, login = do_login()
                if not status:
                    Log.e("自动登录失败,请手动重试")
                    return

            if submit.submit(seats_default):
                status, contents = submit.showSubmitInfoPretty()
                if status:
                    Log.v("获取车票详情成功")
                    flag = send_mail(mail_user, mailto_list, '12306订票结果通知',
                                     mail_host, mail_user, mail_pass, contents)
                    if flag:
                        Log.v("邮件发送成功!")
                    else:
                        Log.v("邮件发送失败!")

                sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM,
                                  '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!')
                if sms_id:
                    Log.v("短信提醒发送成功!")
                else:
                    Log.v("短信提醒发送失败!")
                break
            time.sleep(1)
        except Exception as e:
            Log.w(e)
    login.loginOut()
    Log.d('注销登录成功')