Beispiel #1
0
def Reserver(applyTask, taskStatus, geniusbar=True):
    name = multiprocessing.current_process().name
    debug.debug(name)
    if geniusbar:
        return applyTask.applyGeniusbar(taskStatus)
    else:
        return applyTask.applyWorkshops(taskStatus)
Beispiel #2
0
 def accept(self):
     confhelper = ConfHelper()
     appleid = str(self.ui.lEAccount.text())
     accounts = confhelper.getAccounts(self.accountfile)
     account = {}
     account['id'] = str(len(accounts) + 1)
     account['appleid'] = appleid
     account['passwd'] = str(self.ui.lEPasswd.text())
     account['governmentid'] = str(self.ui.lEGovId.text())
     account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
     accounts[account['id']] = account
     isOk = True
     for key, val in account.items():
         if not val:
             isOk = False
             debug.debug('Please type %s' % key)
             QtGui.QMessageBox.warning(self, "Info",
                                       "Please input %s" % key,
                                       QtGui.QMessageBox.Yes)
             break
     if isOk:
         confhelper.addAccounts(self.accountfile, accounts)
         super(AddAccountDLG, self).accept()
     else:
         debug.error('empty field')
Beispiel #3
0
 def fillResultView(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s' %
                     (appleId, currentTaskName))
         return
     verifyData = findResult['verifyCodeData']
     if verifyData:
         self.fillVerifyCodePic(verifyData)
     else:
         debug.debug('can not get verfiy pic')
     smsMsg = findResult['smsMsg']
     if smsMsg:
         self.pTSmsChallengeTip.setPlainText(smsMsg)
     else:
         debug.error('Can not found smsMsg %s %s' %
                     (appleId, currentTaskName))
Beispiel #4
0
    def get_verification_code_pic(self):
        try:
            getData = {}
            getData['key'] = self.get_tag_value("input", {'id': 'captchaKey'})
            getData['format'] = self.get_tag_value("input",
                                                   {'id': "captchaFormat"})
            timeStamp = str(time.time()).replace('.', '')
            getData['t'] = timeStamp
            if not self.geniusbarUrl:
                self.geniusbarUrl = self.get_geniusbar_url()

            url = "%s/captcha?&%s" % (self.geniusbarUrl,
                                      urllib.urlencode(getData))

            if not self.pageHeader:
                self.pageHeader = GeniusbarPage.headers
            headers = self.pageHeader
            headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
            headers['Accept-Encoding'] = 'gzip, deflate'
            request = urllib2.Request(url, headers=headers)
            try:
                data = urllib2.urlopen(request).read()
            except:
                debug.debug('read pic err')
            return (data, timeStamp)
        except Exception as e:
            debug.error(str(e))
            return (None, None)
 def accept(self):
     confhelper = ConfHelper()
     appleid = str(self.ui.lEAccount.text())
     accounts = confhelper.getAccounts(self.accountfile)
     account = {}
     account['id'] = str(len(accounts)+1)
     account['appleid'] = appleid
     account['passwd'] = str(self.ui.lEPasswd.text())
     account['governmentid'] = str(self.ui.lEGovId.text())
     account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
     accounts[account['id']] = account
     isOk = True
     for key, val in account.items():
         if not val:
             isOk = False
             debug.debug('Please type %s' % key)
             QtGui.QMessageBox.warning(self, "Info",
                                       "Please input %s" % key,
                                       QtGui.QMessageBox.Yes)
             break
     if isOk:
         confhelper.addAccounts(self.accountfile, accounts)
         super(AddAccountDLG, self).accept()
     else:
         debug.error('empty field')
 def fillResultView(self, appleId):
     currentTaskName = self.appContext.getCurrentTaskName()
     results = self.reserverResult.getData(currentTaskName)
     if not results:
         debug.info('Can not find %s' % currentTaskName)
         return
     findResult = None
     for result in results:
         if appleId in result.values():
             findResult = result
     if not findResult:
         debug.error('can not found verifyData %s,%s'
                     % (appleId, currentTaskName))
         return
     verifyData = findResult['verifyCodeData']
     if verifyData:
         self.fillVerifyCodePic(verifyData)
     else:
         debug.debug('can not get verfiy pic')
     smsMsg = findResult['smsMsg']
     if smsMsg:
         self.pTSmsChallengeTip.setPlainText(smsMsg)
     else:
         debug.error('Can not found smsMsg %s %s'
                     % (appleId, currentTaskName))
def Reserver(applyTask, taskStatus, geniusbar=True):
    name = multiprocessing.current_process().name
    debug.debug(name)
    if geniusbar:
        return applyTask.applyGeniusbar(taskStatus)
    else:
        return applyTask.applyWorkshops(taskStatus)
    def get_verification_code_pic(self):
        try:
            getData = {}
            getData['key'] = self.get_tag_value("input", {'id': 'captchaKey'})
            getData['format'] = self.get_tag_value("input",
                                                   {'id': "captchaFormat"})
            timeStamp = str(time.time()).replace('.', '')
            getData['t'] = timeStamp
            if not self.geniusbarUrl:
                self.geniusbarUrl = self.get_geniusbar_url()

            url = "%s/captcha?&%s" % (self.geniusbarUrl,
                                      urllib.urlencode(getData))

            if not self.pageHeader:
                self.pageHeader = GeniusbarPage.headers
            headers = self.pageHeader
            headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
            headers['Accept-Encoding'] = 'gzip, deflate'
            request = urllib2.Request(url, headers=headers)
            try:
                data = urllib2.urlopen(request).read()
            except:
                debug.debug('read pic err')
            return (data, timeStamp)
        except Exception as e:
            debug.error(str(e))
            return (None, None)
def demo (net, imagePathName, scoreThreshold):
    """Detect object classes in an image using pre-computed object proposals."""
    # Load the demo image
    im = cv2.imread(imagePathName)

    # Detect all object classes and regress object bounds
    timer = Timer()
    timer.tic()

    scores, boxes = im_detect(net, im)

    timer.toc()
    debug('Object detection took {:.3f}s for {:d} object proposals'.format(timer.total_time, boxes.shape[0]))

    # Visualize detections for each class
    path, imageFilename = os.path.split(imagePathName)
    catDir = os.path.split(path)[-1]
    imageName = catDir + '/' + imageFilename
    for i, cls in enumerate(CLASSES[1:]):
        i += 1  # because we skipped background
        cls_boxes = boxes[:, 4 * i:4 * (i + 1)]
        cls_scores = scores[:, i]
        dets = np.hstack((cls_boxes, cls_scores[:, np.newaxis])).astype(np.float32)
        keep = nms(dets, NMS_THRESHOLD)
        dets = dets[keep, :]
        vis_detections(im, cls, imageName, dets, scoreThreshold)
Beispiel #10
0
def parse_date(post_id):
    results = fetch_token_post_with_date(post_id)
    row = results.fetchall()[0]
    tokens = row[1].split(',')
    best_date, all_date = find_dates(tokens, row[2])
    debug(best_date, all_date)
    formated_all_date = format_all_date(all_date)
    return best_date, formated_all_date
Beispiel #11
0
def handle(update):
    for handler in handler_funcs:
        try:
            result = handler(update)
            if result:
                break
        except Exception as e:
            debug(handler.__module__ + '\n' + repr(e))
Beispiel #12
0
 def select(self, sql):
     try:
         cursor = self.db.cursor()
         cursor.execute(sql)
         debug.debug(sql)
         return cursor.fetchall()
     except sqlite3.OperationalError as e:
         debug.error(str(e))
         return []
 def storeResult(self, appleId):
     debug.debug('store result')
     curTask = self.appContext.getCurrentTaskName()
     for status in self.finishedAppleId:
         if status['appleId'] == appleId:
             debug.debug('save task %s %s' % (curTask, appleId))
             result = {
                 'appleId': appleId,
                 'smsMsg': status['prompInfo'],
                 'verifyCodeData': status['verifyCodeData']}
             self.reserverResult.add(curTask, result)
 def _deleteTaskList(self, taskName):
     del self.tasks[taskName]
     self.updateTaskTableWidget()
     #del taskfile
     filedir = self.appContext.getTaskStoreDir()
     filedir = os.path.join(filedir, self.mkTaskListName(taskName))
     try:
         debug.debug('delete %s' % filedir)
         os.remove(filedir)
     except Exception as e:
         debug.error('Can not del %s %s' % (filedir, str(e)))
 def saveTask(self, tasks):
     for task in tasks:
         fileName = self.mkTaskListName(task.taskName)
         debug.debug('save task %s' % fileName)
         taskdir = self.appContext.getTaskStoreDir()
         taskfile = os.path.join(taskdir, fileName)
         try:
             with open(taskfile, 'wb') as f:
                 pickle.dump(task, f)
         except Exception as e:
             debug.error('Error write %s %s' % (taskfile, str(e)))
 def getTasksFromdisk(self, taskfiles):
     debug.debug('read taskfiles %s' % taskfiles)
     tasks = {}
     for taskfile in taskfiles:
         try:
             with open(taskfile, 'rb') as f:
                 task = pickle.load(f)
                 tasks[task.taskName] = task
         except Exception as e:
             debug.error('can not found %s %s' % (taskfile, str(e)))
     return tasks
 def saveTask(self, tasks):
     for task in tasks:
         fileName = self.mkTaskListName(task.taskName)
         debug.debug('save task %s' % fileName)
         taskdir = self.appContext.getTaskStoreDir()
         taskfile = os.path.join(taskdir, fileName)
         try:
             with open(taskfile, 'wb') as f:
                 pickle.dump(task, f)
         except Exception as e:
             debug.error('Error write %s %s' % (taskfile, str(e)))
 def getTasksFromdisk(self, taskfiles):
     debug.debug('read taskfiles %s' % taskfiles)
     tasks = {}
     for taskfile in taskfiles:
         try:
             with open(taskfile, 'rb') as f:
                 task = pickle.load(f)
                 tasks[task.taskName] = task
         except Exception as e:
             debug.error('can not found %s %s' % (taskfile, str(e)))
     return tasks
 def _deleteTaskList(self, taskName):
     del self.tasks[taskName]
     self.updateTaskTableWidget()
     #del taskfile
     filedir = self.appContext.getTaskStoreDir()
     filedir = os.path.join(filedir, self.mkTaskListName(taskName))
     try:
         debug.debug('delete %s' % filedir)
         os.remove(filedir)
     except Exception as e:
         debug.error('Can not del %s %s' % (filedir, str(e)))
Beispiel #20
0
 def storeResult(self, appleId):
     debug.debug('store result')
     curTask = self.appContext.getCurrentTaskName()
     for status in self.finishedAppleId:
         if status['appleId'] == appleId:
             debug.debug('save task %s %s' % (curTask, appleId))
             result = {
                 'appleId': appleId,
                 'smsMsg': status['prompInfo'],
                 'verifyCodeData': status['verifyCodeData']
             }
             self.reserverResult.add(curTask, result)
Beispiel #21
0
 def Get_suppport_url(self, storeUrl):
     debug.debug('get storeurl')
     page = GeniusbarPage(storeUrl)
     attrs = {'class': "nav hero-nav selfclear"}
     page_soup = page.get_soup()
     navtag = page_soup.find('nav', attrs=attrs)
     hrefs = navtag.findAll('a')
     support_url = None
     for href in hrefs:
         target = href.find('img', {'alt': 'Genius Bar'})
         if target:
             support_url = href.get('href')
             break
     return support_url
 def Get_suppport_url(self, storeUrl):
     debug.debug('get storeurl')
     page = GeniusbarPage(storeUrl)
     attrs = {'class': "nav hero-nav selfclear"}
     page_soup = page.get_soup()
     navtag = page_soup.find('nav', attrs=attrs)
     hrefs = navtag.findAll('a')
     support_url = None
     for href in hrefs:
         target = href.find('img', {'alt': 'Genius Bar'})
         if target:
             support_url = href.get('href')
             break
     return support_url
Beispiel #23
0
def process_dates(results, tokens, postdate):
    debug(results)
    dates = remove_invalid(results, postdate)
    if len(dates) == 0:
        return None, []
    d = defaultdict(list)
    for indice, date in dates:
        d[(date.year, date.month,
           date.day)].append(indiceToToken(indice, tokens))
    counter = Counter({date: len(items) for date, items in d.items()})
    most_common = counter.most_common(1)[0][0]
    return datetuple_to_datetime(most_common), [
        (date, d[date]) for date, count in counter.most_common()
    ]
    def addAccount(self):
        account = {}
        account['appleid'] = str(self.ui.lEAccount.text())
        account['passwd'] = str(self.ui.lEPasswd.text())
        account['governmentid'] = str(self.ui.lEGovId.text())
        account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
        for key, item in account.items():
            if len(item) == 0:
                debug.debug('%s can not empty' % key)
                return

        account = Account(account)
        self.appContext.accountManager.addAccounts(account.getData())
        accounts = self.appContext.accountManager.getAccounts()
        self.updataAccountsTableView(accounts)
    def addAccount(self):
        account = {}
        account['appleid'] = str(self.ui.lEAccount.text())
        account['passwd'] = str(self.ui.lEPasswd.text())
        account['governmentid'] = str(self.ui.lEGovId.text())
        account['phonenumber'] = str(self.ui.lEPhoneNumber.text())
        for key, item in account.items():
            if len(item) == 0:
                debug.debug('%s can not empty' % key)
                return

        account = Account(account)
        self.appContext.accountManager.addAccounts(account.getData())
        accounts = self.appContext.accountManager.getAccounts()
        self.updataAccountsTableView(accounts)
    def checking(self, statusTasks, finished):
        while statusTasks:
            for index, statusTask in enumerate(statusTasks):
                progress = str(statusTask['taskProgress'])
                appleId = statusTask['appleId']
                debug.debug('checking %s %s' % (appleId, progress))
                if progress == '100':
                    for status in finished:
                        if status['appleId'] == appleId:
                            status = dict(status, **statusTasks[index])
                    time.sleep(1)
                    self.signalStoreResult.emit(appleId)
                    time.sleep(2)
                    del statusTasks[index]
                self.signalUpdateProgress.emit(appleId, progress)
                time.sleep(3)

        debug.info('Terminal check %s' % self.appContext.getCurrentTaskName())
        self.enableStart()
Beispiel #27
0
    def checking(self, statusTasks, finished):
        while statusTasks:
            for index, statusTask in enumerate(statusTasks):
                progress = str(statusTask['taskProgress'])
                appleId = statusTask['appleId']
                debug.debug('checking %s %s' % (appleId, progress))
                if progress == '100':
                    for status in finished:
                        if status['appleId'] == appleId:
                            status = dict(status, **statusTasks[index])
                    time.sleep(1)
                    self.signalStoreResult.emit(appleId)
                    time.sleep(2)
                    del statusTasks[index]
                self.signalUpdateProgress.emit(appleId, progress)
                time.sleep(3)

        debug.info('Terminal check %s' % self.appContext.getCurrentTaskName())
        self.enableStart()
Beispiel #28
0
 def _read_page(self):
     self.init_cookie()
     if self.post_data:
         debug.debug('post %s' % self.url)
     else:
         debug.debug('read %s' % self.url)
     req = urllib2.Request(self.url,
                           data=self.post_data,
                           headers=self.headers)
     counter = 3
     while counter > 0:
         try:
             res = urllib2.urlopen(req, data=None, timeout=self.timeout)
             data = res.read()
             return data
         except Exception as e:
             debug.info(str(e))
             counter -= 1
     debug.error('Read failed')
     return None
Beispiel #29
0
 def _read_page(self):
     self.init_cookie()
     if self.post_data:
         debug.debug('post %s' % self.url)
     else:
         debug.debug('read %s' % self.url)
     req = urllib2.Request(self.url,
                           data=self.post_data,
                           headers=self.headers)
     counter = 3
     while counter > 0:
         try:
             res = urllib2.urlopen(req, data=None, timeout=self.timeout)
             data = res.read()
             return data
         except Exception as e:
             debug.info(str(e))
             counter -= 1
     debug.error('Read failed')
     return None
Beispiel #30
0
    def open(self, url, post_data=None, headers={}, receiver=None):
        request = QNetworkRequest(QUrl(url))
        if post_data:
            debug.debug('post %s' % url)
            postData = QByteArray()
            for key, var in post_data.items():
                postData.append('%s=%s&' % (key, var))
            for header, var in headers.items():
                request.setRawHeader(header, var)
            reply = self.netWorkMgr.post(request, postData)
        else:
            debug.debug('get %s' % url)
            for header, var in headers.items():
                request.setRawHeader(header, var)
            reply = self.netWorkMgr.get(request)

        if receiver:
            reply.finished.connect(receiver)
        else:
            receiver = self.netWorkMgr.parent()
            reply.finished.connect(receiver.replyFinished)
Beispiel #31
0
    def startTask(self):
        self.reserverResult.stopAllTask()

        self.running = True
        self.disableStart()
        geniusBar = True
        loginDatas = self.getTasksInfo(geniusBar=geniusBar)
        self.statusTasks = []
        self.finishedAppleId = []
        pool = self.getTaskPool()
        for loginData in loginDatas:
            apy = ApplyTask(loginData)
            self.applyTasks.append(apy)
            taskStatus = Manager().dict()
            taskStatus['prompInfo'] = ''
            taskStatus['verifyCodeData'] = ''
            taskStatus['appleId'] = loginData['appleId']
            taskStatus['taskProgress'] = '0'
            taskStatus['taskCmd'] = None
            taskStatus['cmdStatus'] = None
            taskStatus['storeUrl'] = loginData['storeUrl']
            taskStatus['timeSlots'] = None
            # timeslot id
            taskStatus['id'] = None
            self.statusTasks.append(taskStatus)

            taskResult = Manager().dict()
            taskResult['appleId'] = loginData['appleId']
            self.finishedAppleId.append(taskStatus)

            pool.apply_async(Reserver, (apy, taskStatus, geniusBar))

        pool.close()
        debug.debug('have %s task' % len(self.statusTasks))
        checking = threading.Thread(target=self.checking,
                                    args=(self.statusTasks,
                                          self.finishedAppleId))
        checking.start()
        self.twTasklistCellClicked(0, 0)
    def startTask(self):
        self.reserverResult.stopAllTask()

        self.running = True
        self.disableStart()
        geniusBar = True
        loginDatas = self.getTasksInfo(geniusBar=geniusBar)
        self.statusTasks = []
        self.finishedAppleId = []
        pool = self.getTaskPool()
        for loginData in loginDatas:
            apy = ApplyTask(loginData)
            self.applyTasks.append(apy)
            taskStatus = Manager().dict()
            taskStatus['prompInfo'] = ''
            taskStatus['verifyCodeData'] = ''
            taskStatus['appleId'] = loginData['appleId']
            taskStatus['taskProgress'] = '0'
            taskStatus['taskCmd'] = None
            taskStatus['cmdStatus'] = None
            taskStatus['storeUrl'] = loginData['storeUrl']
            taskStatus['timeSlots'] = None
            # timeslot id
            taskStatus['id'] = None
            self.statusTasks.append(taskStatus)

            taskResult = Manager().dict()
            taskResult['appleId'] = loginData['appleId']
            self.finishedAppleId.append(taskStatus)

            pool.apply_async(Reserver, (apy, taskStatus, geniusBar))

        pool.close()
        debug.debug('have %s task' % len(self.statusTasks))
        checking = threading.Thread(target=self.checking,
                                    args=(self.statusTasks,
                                          self.finishedAppleId))
        checking.start()
        self.twTasklistCellClicked(0, 0)
def classify (net, imagePathName, scoreThreshold):
    img = cv2.imread(imagePathName)
    if img is None:
        debug('Image does not exist: ' + imagePathName)
        return

    allScores, allBoxes = im_detect(net, img)  # returns scores + boxes for ALL candidate regions, R (where R > 100)
    # scores: R x  K    array of object class scores (K includes background category 0)
    # boxes:  R x (4*K) array of predicted bounding boxes

    tagScoreBoxes = list()
    for region in filterScoredRegions(allScores, allBoxes, scoreThreshold):
        tagScoreBoxes.append((region[0], region[1][0]))

    def formatResult (tagScoreBox):
        label = tagScoreBox[0]                          # category name
        box = ','.join(map(str, tagScoreBox[1][1]))     # comma-separated coords (left, top, right, bottom)
        score = tagScoreBox[1][0]                       # integral percentage (0-100)
        return '/'.join(map(str, [label, score, box]))  # slash-separated fields

    cmdOutput = ";".join(map(formatResult, tagScoreBoxes))   # semicolon-separated entries, highest scores first

    print(cmdOutput)  # send to STDOUT
    def importFromFile(self):
        debug.debug('import accounter from file')
        filter = "All(*)"
        fileName = QFileDialog.getOpenFileName(self,
                                               caption="导入账号",
                                               directory='.',
                                               filter=filter)
        if not fileName:
            return

        accounts = {}
        #账号,密码,身份证
        with open(fileName, 'r') as f:
            for line in f.readlines():
                account = {}
                l = line.replace('\n', '').replace(' ', '').split(',')
                account['appleid'] = l[0]
                account['passwd'] = l[1]
                account['governmentid'] = l[2]
                account['phonenumber'] = ''
                accounts[l[0]] = account
        self.appContext.accountManager.addAccounts(accounts)
        accounts = self.appContext.accountManager.getAccounts()
        self.updataAccountsTableView(accounts)
    def importFromFile(self):
        debug.debug('import accounter from file')
        filter = "All(*)"
        fileName = QFileDialog.getOpenFileName(self,
                                                     caption="导入账号",
                                                     directory='.',
                                                     filter=filter)
        if not fileName:
            return

        accounts = {}
        #账号,密码,身份证
        with open(fileName, 'r') as f:
            for line in f.readlines():
                account = {}
                l = line.replace('\n', '').replace(' ', '').split(',')
                account['appleid'] = l[0]
                account['passwd'] = l[1]
                account['governmentid'] = l[2]
                account['phonenumber'] = ''
                accounts[l[0]] = account
        self.appContext.accountManager.addAccounts(accounts)
        accounts = self.appContext.accountManager.getAccounts()
        self.updataAccountsTableView(accounts)
def Checker(ip):
    cmd = 'ping -n 2 -w 2 %s' % ip
    debug.debug(cmd)
    try:
        res = subprocess.check_output(cmd)
        if not -1 == res.find('TTL='):
            debug.debug('find %s' %ip)
            return ip
    except Exception as e:
        debug.debug(str(e))
        return False
def Checker(ip):
    cmd = 'ping -n 2 -w 2 %s' % ip
    debug.debug(cmd)
    try:
        res = subprocess.check_output(cmd)
        if not -1 == res.find('TTL='):
            debug.debug('find %s' % ip)
            return ip
    except Exception as e:
        debug.debug(str(e))
        return False
        print('Error. Configuration file "{}" does not'
              ' define setting "{}".'
              .format(cmd_parameters['config_file'],
                      missing_setting.get('yaml_path')))
    sys.exit(ExitCode.CONFIGURATION_ERROR.value)
except ConfigParseError as cpe:
    print('Error. Configuration file "{}" is invalid: {}'
          .format(cmd_parameters['config_file'],
                  str(cpe)))
    sys.exit(ExitCode.CONFIGURATION_ERROR.value)
except FileNotFoundError:
    print('Error. Configuration file "{}" was not found.'
          .format(cmd_parameters['config_file']))
    sys.exit(ExitCode.INVOCATION_ERROR.value)

debug('Using the following configuration settings: ', config)

cw = None  # COS wrapper handle
w = None   # WML wrapper handle
training_guid = cmd_parameters.get('training_id', None)

if cmd_parameters['command'] == 'package' and training_guid is not None:
    # monitor status of an existing training run; skip preparation steps
    try:
        # instantiate Cloud Object Storage wrapper
        cw = COSWrapper(os.environ['AWS_ACCESS_KEY_ID'],
                        os.environ['AWS_SECRET_ACCESS_KEY'])
    except COSWrapperError as cwe:
        print('Error. Cloud Object Storage preparation failed: {}'.format(cwe))
        sys.exit(ExitCode.PRE_PROCESSING_FAILED.value)
Beispiel #39
0
 def applyGeniusbar(self, taskStatus):
     debug.debug('start %s' % taskStatus['appleId'])
     return self.reser.Jump_login_page(self.enterUrl, taskStatus)
Beispiel #40
0
    def waitingCmd(self, page, taskStatus):
        '''
        waiting the input
        '''
        runtime = 300  # waiting time
        storeUrl = taskStatus['storeUrl']
        debug.debug(storeUrl)

        while runtime > 0:
            taskCmd = taskStatus['taskCmd']
            if taskCmd == 'refresh':
                debug.debug('refresh cmd %s' % taskStatus['appleId'])
                verifycodedata, tSt = page.get_verification_code_pic()
                taskStatus['verifyCodeData'] = verifycodedata
                taskStatus['taskCmd'] = None
                time.sleep(1)
                continue
            if taskCmd == 'submit':
                debug.debug('get submit cmd %s' % taskStatus['appleId'])
                postData = page.build_submit_post_data()
                postData['captchaAnswer'] = taskStatus['captchaAnswer']
                postData['phoneNumber'] = taskStatus['phoneNumber']
                postData['smsCode'] = taskStatus['smsCode']
                postData['clientTimezone'] = taskStatus['clientTimezone']
                # 'Asia/Shanghai'
                submitUrl = self.challengeUrlFormat % GeniusbarPage.storeNumber
                headers = page.headers
                headers['Referer'] = submitUrl
                headers.pop('Accept-Encoding')
                submitpage = GeniusbarPage(submitUrl,
                                           data=urllib.urlencode(postData),
                                           headers=headers)
                data = submitpage.get_data()
                resultfile = 'tmp/%s.htm' % taskStatus['appleId']
                Writefile(resultfile, data)

                attrs = {
                    "class": "error-message on",
                    "id": "error_message_generalError"
                }
                errorMsg = submitpage.get_tag_text('label', attrs=attrs)
                if errorMsg:
                    taskStatus['cmdStatus'] = 'NOK'
                    taskStatus['taskCmd'] = None
                    taskStatus['prompInfo'] = errorMsg
                    page = submitpage
                    debug.error(errorMsg)
                    Writefile('tmp/submiterr.html', page.get_data())
                    continue
                else:
                    # success for submit
                    # get the time slots
                    ret, maxrow = self.buildTimeSlotsTable(submitpage)
                    taskStatus['cmdStatus'] = 'OK'
                    taskStatus['timeSlots'] = (ret, maxrow)
                    taskStatus['taskCmd'] = None
                    page = submitpage
                    continue
            if taskCmd == 'timeslot':
                # post timeslots
                debug.debug('get timeslot cmd %s' % taskStatus['appleId'])
                postData = self.buildPostTimeSlotsData(page)
                postData['clientTimezone'] = taskStatus['clientTimezone']
                postData['id'] = taskStatus['id']
                tlsUrl = self.timeslotFormat % GeniusbarPage.storeNumber
                debug.debug('tls ulr %s' % tlsUrl)
                headers = {}
                headers[
                    'Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
                headers[
                    'User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
                headers[
                    'Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
                headers["Connection"] = 'keep-alive'
                headers["Host"] = 'concierge.apple.com'
                tlspage = GeniusbarPage(tlsUrl,
                                        data=urllib.urlencode(postData),
                                        headers=headers)
                data = tlspage.get_data()
                Writefile('tmp/posttimeslotsresult.html', data)
                text = self.getConfirmMsg(tlspage)
                taskStatus['prompInfo'] = text.replace(' ', '')
                Writefile('tmp/reserv-%s' % taskStatus['appleId'],
                          taskStatus['prompInfo'])
                taskStatus['taskCmd'] = None
                taskStatus['cmdStatus'] = 'OK'
                break
            if taskCmd == 'end':
                taskStatus['taskCmd'] = None
                break
            #debug.debug('waiting cmd')
            time.sleep(1)
            runtime -= 1
        debug.info('End task %s' % taskStatus['appleId'])
    def waitingCmd(self, page, taskStatus):
        '''
        waiting the input
        '''
        runtime = 300  # waiting time
        storeUrl = taskStatus['storeUrl']
        debug.debug(storeUrl)

        while runtime > 0:
            taskCmd = taskStatus['taskCmd']
            if taskCmd == 'refresh':
                debug.debug('refresh cmd %s' % taskStatus['appleId'])
                verifycodedata, tSt = page.get_verification_code_pic()
                taskStatus['verifyCodeData'] = verifycodedata
                taskStatus['taskCmd'] = None
                time.sleep(1)
                continue
            if taskCmd == 'submit':
                debug.debug('get submit cmd %s' % taskStatus['appleId'])
                postData = page.build_submit_post_data()
                postData['captchaAnswer'] = taskStatus['captchaAnswer']
                postData['phoneNumber'] = taskStatus['phoneNumber']
                postData['smsCode'] = taskStatus['smsCode']
                postData['clientTimezone'] = taskStatus['clientTimezone']
                # 'Asia/Shanghai'
                submitUrl = self.challengeUrlFormat % GeniusbarPage.storeNumber
                headers = page.headers
                headers['Referer'] = submitUrl
                headers.pop('Accept-Encoding')
                submitpage = GeniusbarPage(submitUrl,
                                           data=urllib.urlencode(postData),
                                           headers=headers)
                data = submitpage.get_data()
                resultfile = 'tmp/%s.htm' % taskStatus['appleId']
                Writefile(resultfile, data)

                attrs = {"class": "error-message on",
                         "id": "error_message_generalError"}
                errorMsg = submitpage.get_tag_text('label', attrs=attrs)
                if errorMsg:
                    taskStatus['cmdStatus'] = 'NOK'
                    taskStatus['taskCmd'] = None
                    taskStatus['prompInfo'] = errorMsg
                    page = submitpage
                    debug.error(errorMsg)
                    Writefile('tmp/submiterr.html', page.get_data())
                    continue
                else:
                    # success for submit
                    # get the time slots
                    ret, maxrow = self.buildTimeSlotsTable(submitpage)
                    taskStatus['cmdStatus'] = 'OK'
                    taskStatus['timeSlots'] = (ret, maxrow)
                    taskStatus['taskCmd'] = None
                    page = submitpage
                    continue
            if taskCmd == 'timeslot':
                # post timeslots
                debug.debug('get timeslot cmd %s' % taskStatus['appleId'])
                postData = self.buildPostTimeSlotsData(page)
                postData['clientTimezone'] = taskStatus['clientTimezone']
                postData['id'] = taskStatus['id']
                tlsUrl = self.timeslotFormat % GeniusbarPage.storeNumber
                debug.debug('tls ulr %s' % tlsUrl)
                headers = {}
                headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
                headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
                headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
                headers["Connection"] = 'keep-alive'
                headers["Host"] = 'concierge.apple.com'
                tlspage = GeniusbarPage(tlsUrl,
                                        data=urllib.urlencode(postData),
                                        headers=headers)
                data = tlspage.get_data()
                Writefile('tmp/posttimeslotsresult.html', data)
                text = self.getConfirmMsg(tlspage)
                taskStatus['prompInfo'] = text.replace(' ', '')
                Writefile('tmp/reserv-%s' % taskStatus['appleId'],
                          taskStatus['prompInfo'])
                taskStatus['taskCmd'] = None
                taskStatus['cmdStatus'] = 'OK'
                break
            if taskCmd == 'end':
                taskStatus['taskCmd'] = None
                break
            #debug.debug('waiting cmd')
            time.sleep(1)
            runtime -= 1
        debug.info('End task %s' % taskStatus['appleId'])
def test_login_page():
    baseUrl = "http://www.apple.com"
    storelist = "http://www.apple.com/cn/retail/storelist/"
    mainpage = webpage.WebPage(storelist)
    data = mainpage.get_data()
    headers = {}
    headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    headers[
        'User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
    headers[
        'Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    headers["Connection"] = 'keep-alive'
    headers["Accept-Encoding"] = "gzip, deflate"
    #print(headers)

    #f = open('data/storelist.html', 'w')
    #f.write(data.encode('utf-8'))
    Writefile('data/storelist.html', data.encode('utf-8'))
    data = data.encode('utf-8')
    soup = mainpage.get_page(data)
    # find all store
    #<div id="cnstores" class="listing">
    attrs = {"id": "cnstores", "class": "listing"}
    tag = soup.find('div', attrs=attrs)
    hrefs = tag.findAll('a')
    suburl = None
    storeName = None
    for href in hrefs:
        suburl = href.get('href')
        storeName = href.getString().encode('utf-8', 'ignore')
        break

    storeurl = baseUrl + suburl
    debug.debug('%s: %s' % (storeName, storeurl))
    storepage = webpage.WebPage(storeurl)
    page_soup = storepage.get_page()
    Writefile('data/%s.html' % storeName.encode('gbk'), data)

    attrs = {'class': "nav hero-nav selfclear"}
    navtag = page_soup.find('nav', attrs=attrs)
    hrefs = navtag.findAll('a')
    support_url = None
    for href in hrefs:
        target = href.find('img', {'alt': 'Genius Bar'})
        if target:
            support_url = href.get('href')
            break
    post_data = {}
    support_page = webpage.WebPage(support_url)
    data = support_page.get_data()
    Writefile('data/support_page.html', data.encode('utf-8'))
    page_soup = support_page.get_page(data)
    # get form token
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    # get selected store
    attrs = {'selected': 'selected'}

    store_tag = page_soup.find('option', attrs=attrs)
    post_data['storeNumber'] = store_tag.get('value')
    post_data['store'] = post_data['storeNumber']
    store_number = post_data['store']
    post_data['ruleType'] = 'TECHSUPPORT'
    headers['Referer'] = support_url
    headers['Host'] = 'concierge.apple.com'
    #headers['POST'] = '/reservation/ HTTP/1.1'
    url = "http://concierge.apple.com/reservation/"
    jump_page = webpage.WebPage(
        url, urllib.urlencode(post_data))  #, headers=headers)
    data = jump_page.get_data()
    Writefile('data/jump_page.html', data.encode('utf-8'))
    base_geniusbar = 'http://concierge.apple.com/geniusbar/'
    geniusbar_url = 'http://concierge.apple.com/geniusbar/' + post_data['store']
    headers = {}
    headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    headers[
        'User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
    headers[
        'Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    headers["Connection"] = 'keep-alive'
    headers['Referer'] = support_url
    headers['Host'] = 'concierge.apple.com'
    geniusbar_page = webpage.WebPage(geniusbar_url, None, headers=headers)
    data = geniusbar_page.get_data()
    Writefile('data/getr401.html', data.encode('utf-8'))
    # post geniusbar store
    headers['Referer'] = geniusbar_url
    geniusbar_soup = geniusbar_page.get_page(data)
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = geniusbar_soup.find('input', attrs=attrs)
    post_data = {}
    post_data["_formToken"] = tokentag.get('value')
    post_data['supportOffered'] = 'true'
    geniusbar_detail_page = webpage.WebPage(geniusbar_url,
                                            urllib.urlencode(post_data),
                                            headers=headers)
    data = geniusbar_detail_page.get_data()
    Writefile('data/geniusbar_%s.html' % store_number, data)

    authenticate_url = 'https://idmsa.apple.com/IDMSWebAuth/authenticate'
    tag_names = [
        'Env', 'appIdKey', 'captchaType', 'captchaToken', 'grpCode',
        'language', 'iForgotNewWindowVar', 'paramcode', 'path', 'path2',
        'segment'
    ]

    post_data = build_post_data(geniusbar_detail_page.get_page(data),
                                tag_names)
    post_data['accountPassword'] = '******'
    post_data['appleId'] = '*****@*****.**'
    authenticate_page = webpage.WebPage(authenticate_url,
                                        data=urllib.urlencode(post_data),
                                        headers=headers)

    data = authenticate_page.get_data()
    Writefile('data/authenticate_page.html', data.encode('utf-8'))

    # post government id
    geniusbar_url = "https://concierge.apple.com/geniusbar/%s/governmentID" % store_number
    post_items = ['clientTimezone', 'FirstName', 'LastName']
    page_soup = authenticate_page.get_page(data)
    post_data = build_post_data(page_soup, post_items)
    if not post_data['clientTimezone']:
        post_data['clientTimezone'] = 'Asia/Shanghai'
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    post_data['governmentID'] = '610102196103120670'
    post_data['governmentIDType'] = 'CN.PRCID'
    post_geniusbar_governmentid = webpage.WebPage(geniusbar_url,
                                                  urllib.urlencode(post_data),
                                                  headers)
    data = post_geniusbar_governmentid.get_data()
    page_soup = post_geniusbar_governmentid.get_page(data)
    Writefile('data/post_government_id.html', data.encode('utf-8'))
    data, geniusbar_page = get_geniusbar_page(store_number, headers=headers)
    page_soup = geniusbar_page.get_page(data)
    post_items = ['clientTimezone']
    post_data = build_post_data(page_soup, post_items)
    if not post_data['clientTimezone']:
        post_data['clientTimezone'] = 'Asia/Shanghai'
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    attrs = {'class': 'NSCSSStateHidden value', "name": "id"}
    spantag = page_soup.find('span', attrs=attrs)
    post_data['id'] = spantag.text
    postbar = 'http://concierge.apple.com/geniusbar/R401'
    headers['Referer'] = postbar
    headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    reservicepage = webpage.WebPage(postbar,
                                    data=urllib.urlencode(post_data),
                                    headers=headers)
    data = reservicepage.get_data()
    Writefile('data/revers.html', data.encode('utf-8'))
    page_soup = reservicepage.get_page(data)
    attrs = {'id': 'captchaKey'}
    tag_key = page_soup.find("input", attrs=attrs)
    get_data = {}
    get_data['key'] = tag_key.get('value')
    attrs = {'id': "captchaFormat"}
    tag_format = page_soup.find("input", attrs=attrs)
    get_data['format'] = tag_format.get('value')
    import time
    get_data['t'] = str(time.time()).replace('.', '')
    url = "https://concierge.apple.com/geniusbar/R401/captcha?&%s" % urllib.urlencode(
        get_data)
    headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
    headers['Accept-Encoding'] = 'gzip, deflate'
    request = urllib2.Request(url, headers=headers)
    res = urllib2.urlopen(request)
    data = res.read()
    f = open('data/img.jpg', 'wb')
    f.write(data)
    f.close
def display_cookie(cookie):
    for i, txt in enumerate(cookie):
        debug.debug('[%d],[%s]' % (i, txt))
Beispiel #44
0
import json

app = Flask(__name__)

pkg_path = os.path.dirname(handlers.__file__)
handler_func_name = 'handler'
handler_funcs = []
for _, module_name, _ in pkgutil.iter_modules([pkg_path]):
    m = importlib.import_module('handlers.' + module_name)
    handler_funcs.append(getattr(m, handler_func_name))


@app.route(WEBHOOK_URL, methods=['POST'])
def post():
    update = Update(request.get_json())
    handle(update)
    return 'ok'


def handle(update):
    for handler in handler_funcs:
        try:
            result = handler(update)
            if result:
                break
        except Exception as e:
            debug(handler.__module__ + '\n' + repr(e))


debug("I'm alive!")
 def applyGeniusbar(self, taskStatus):
     debug.debug('start %s' % taskStatus['appleId'])
     return self.reser.Jump_login_page(self.enterUrl,
                                       taskStatus)
def main (argv=None):
    cfg.TEST.HAS_RPN = True  # Use RPN for proposals

    args = parse_args()

    #
    # Non-Caffe options
    #
    if args.labelfile > 0:  # return the labels file
        print "/opt/dev/proj/sony/research/py-faster-rcnn/lib/datasets/pascal_voc_labels.txt"
        return 0

    #
    # Caffe Setup
    #
    prototxt = os.path.join(cfg.ROOT_DIR, 'models', NETS[args.net][0],
                            'faster_rcnn_alt_opt', 'faster_rcnn_test.pt')
    caffeModel = os.path.join(cfg.ROOT_DIR, 'data', 'faster_rcnn_models',
                              NETS[args.net][1])

    if not os.path.isfile(caffeModel):
        raise IOError(('{:s} not found.\nDid you run ./data/script/'
                       'fetch_faster_rcnn_models.sh?').format(caffeModel))

    if args.cpu_mode:
        caffe.set_mode_cpu()
    else:
        caffe.set_mode_gpu()
        caffe.set_device(args.gpu)
        cfg.GPU_ID = args.gpu

    net = caffe.Net(prototxt, caffeModel, caffe.TEST)
    debug('\n\nLoaded network {:s}'.format(caffeModel))

    # Warmup on a dummy image
    im = 128 * np.ones((300, 500, 3), dtype=np.uint8)
    for i in xrange(2):
        _, _ = im_detect(net, im)

    #
    # Classify
    #
    classifyArg = args.classifyArg
    imageDir = args.testImageDir
    scoreThreshold = args.threshold

    if classifyArg is not None and len(classifyArg) > 0:
        if (classifyArg.endswith('.txt')):
            with open(classifyArg) as imageNames:
                for imageFile in imageNames:
                    # debug('Classifying ' + imageFile)
                    classify(net, imageFile.strip(), scoreThreshold)     # remove trailing \n
        else:
            classify(net, classifyArg, scoreThreshold)       # assume single arg is an image

    elif len(imageDir) > 0:
        for base, dirs, files in os.walk(imageDir):
            for imageName in files:
                if imageName.endswith(".jpg"):
                    imgPathName = os.path.join(base, imageName)
                    demo(net, imgPathName, scoreThreshold)
                    canvas.show()  # display windows and wait until all are closed

    return 0
Beispiel #47
0
def test_net(net, imdb, max_per_image=100, thresh=0.05, vis=False):
    """Test a Fast R-CNN network on an image database."""
    num_images = len(imdb.image_index)
    # all detections are collected into:
    #    all_boxes[cls][image] = N x 5 array of detections in
    #    (x1, y1, x2, y2, score)
    all_boxes = [[[] for _ in xrange(num_images)]
                 for _ in xrange(imdb.num_classes)]

    output_dir = get_output_dir(imdb, net)

    # timers
    _t = {'im_detect' : Timer(), 'misc' : Timer()}

    if not cfg.TEST.HAS_RPN:
        roidb = imdb.roidb

    for i in xrange(num_images):
        # filter out any ground truth boxes
        if cfg.TEST.HAS_RPN:
            box_proposals = None
        else:
            # The roidb may contain ground-truth rois (for example, if the roidb
            # comes from the training or val split). We only want to evaluate
            # detection on the *non*-ground-truth rois. We select those the rois
            # that have the gt_classes field set to 0, which means there's no
            # ground truth.
            box_proposals = roidb[i]['boxes'][roidb[i]['gt_classes'] == 0]

        im = cv2.imread(imdb.image_path_at(i))
        _t['im_detect'].tic()
        scores, boxes = im_detect(net, im, box_proposals)
        _t['im_detect'].toc()

        _t['misc'].tic()
        # skip j = 0, because it's the background class
        for j in xrange(1, imdb.num_classes):
            inds = np.where(scores[:, j] > thresh)[0]
            cls_scores = scores[inds, j]
            cls_boxes = boxes[inds, j*4:(j+1)*4]
            cls_dets = np.hstack((cls_boxes, cls_scores[:, np.newaxis])) \
                .astype(np.float32, copy=False)
            keep = nms(cls_dets, cfg.TEST.NMS)
            cls_dets = cls_dets[keep, :]
            if vis:
                vis_detections(im, imdb.classes[j], cls_dets)
            all_boxes[j][i] = cls_dets

        # Limit to max_per_image detections *over all classes*
        if max_per_image > 0:
            image_scores = np.hstack([all_boxes[j][i][:, -1]
                                      for j in xrange(1, imdb.num_classes)])
            if len(image_scores) > max_per_image:
                image_thresh = np.sort(image_scores)[-max_per_image]
                for j in xrange(1, imdb.num_classes):
                    keep = np.where(all_boxes[j][i][:, -1] >= image_thresh)[0]
                    all_boxes[j][i] = all_boxes[j][i][keep, :]
        _t['misc'].toc()

        debug('im_detect: {:d}/{:d} {:.3f}s {:.3f}s' \
              .format(i + 1, num_images, _t['im_detect'].average_time,
                      _t['misc'].average_time))

    det_file = os.path.join(output_dir, 'detections.pkl')
    with open(det_file, 'wb') as f:
        cPickle.dump(all_boxes, f, cPickle.HIGHEST_PROTOCOL)

    debug('Evaluating detections')
    imdb.evaluate_detections(all_boxes, output_dir)
Beispiel #48
0
def display_cookie(cookie):
    for i, txt in enumerate(cookie):
        debug.debug('[%d],[%s]' % (i, txt))
Beispiel #49
0
 def execute(self, sql):
     cursor = self.db.cursor()
     cursor.execute(sql)
     debug.debug(sql)
     self.db.commit()
Beispiel #50
0
def test_login_page():
    baseUrl = "http://www.apple.com"
    storelist = "http://www.apple.com/cn/retail/storelist/"
    mainpage = webpage.WebPage(storelist)
    data = mainpage.get_data()
    headers = {}
    headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
    headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    headers["Connection"] = 'keep-alive'
    headers["Accept-Encoding"] = "gzip, deflate"
    #print(headers)

    #f = open('data/storelist.html', 'w')
    #f.write(data.encode('utf-8'))
    Writefile('data/storelist.html', data.encode('utf-8'))
    data = data.encode('utf-8')
    soup = mainpage.get_page(data)
    # find all store
    #<div id="cnstores" class="listing">
    attrs = {"id":"cnstores","class":"listing"}
    tag = soup.find('div', attrs=attrs)
    hrefs = tag.findAll('a')
    suburl = None
    storeName = None
    for href in hrefs:
        suburl = href.get('href')
        storeName = href.getString().encode('utf-8', 'ignore')
        break

    storeurl = baseUrl + suburl
    debug.debug('%s: %s' % (storeName, storeurl))
    storepage = webpage.WebPage(storeurl)
    page_soup = storepage.get_page()
    Writefile('data/%s.html' % storeName.encode('gbk'), data)

    attrs = {'class': "nav hero-nav selfclear"}
    navtag = page_soup.find('nav', attrs=attrs)
    hrefs = navtag.findAll('a')
    support_url = None
    for href in hrefs:
        target = href.find('img', {'alt':'Genius Bar'})
        if target:
            support_url = href.get('href')
            break
    post_data = {}
    support_page = webpage.WebPage(support_url)
    data = support_page.get_data()
    Writefile('data/support_page.html', data.encode('utf-8'))
    page_soup = support_page.get_page(data)
    # get form token
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    # get selected store
    attrs = {'selected': 'selected'}

    store_tag = page_soup.find('option', attrs=attrs)
    post_data['storeNumber'] = store_tag.get('value')
    post_data['store'] = post_data['storeNumber']
    store_number = post_data['store']
    post_data['ruleType'] = 'TECHSUPPORT'
    headers['Referer'] = support_url
    headers['Host'] = 'concierge.apple.com'
    #headers['POST'] = '/reservation/ HTTP/1.1'
    url = "http://concierge.apple.com/reservation/"
    jump_page = webpage.WebPage(url, urllib.urlencode(post_data))#, headers=headers)
    data = jump_page.get_data()
    Writefile('data/jump_page.html', data.encode('utf-8'))
    base_geniusbar = 'http://concierge.apple.com/geniusbar/'
    geniusbar_url = 'http://concierge.apple.com/geniusbar/' + post_data['store']
    headers = {}
    headers['Accept-Language']='zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    headers['User-Agent']="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
    headers['Accept']='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    headers["Connection"] = 'keep-alive'
    headers['Referer'] = support_url
    headers['Host'] = 'concierge.apple.com'
    geniusbar_page = webpage.WebPage(geniusbar_url,None, headers=headers)
    data = geniusbar_page.get_data()
    Writefile('data/getr401.html', data.encode('utf-8'))
    # post geniusbar store
    headers['Referer'] = geniusbar_url
    geniusbar_soup = geniusbar_page.get_page(data)
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = geniusbar_soup.find('input', attrs=attrs)
    post_data = {}
    post_data["_formToken"] = tokentag.get('value')
    post_data['supportOffered'] = 'true'
    geniusbar_detail_page = webpage.WebPage(geniusbar_url,
                                            urllib.urlencode(post_data),
                                            headers=headers)
    data = geniusbar_detail_page.get_data()
    Writefile('data/geniusbar_%s.html' % store_number, data)

    authenticate_url = 'https://idmsa.apple.com/IDMSWebAuth/authenticate'
    tag_names = ['Env', 'appIdKey', 'captchaType', 'captchaToken',
                 'grpCode', 'language', 'iForgotNewWindowVar',
                 'paramcode', 'path', 'path2', 'segment']

    post_data = build_post_data(geniusbar_detail_page.get_page(data), tag_names)
    post_data['accountPassword'] = '******'
    post_data['appleId'] = '*****@*****.**'
    authenticate_page = webpage.WebPage(authenticate_url,
                                        data=urllib.urlencode(post_data),
                                        headers=headers)

    data = authenticate_page.get_data()
    Writefile('data/authenticate_page.html',data.encode('utf-8'))

    # post government id
    geniusbar_url ="https://concierge.apple.com/geniusbar/%s/governmentID" % store_number
    post_items =[
        'clientTimezone', 'FirstName', 'LastName'
        ]
    page_soup = authenticate_page.get_page(data)
    post_data = build_post_data(page_soup, post_items)
    if not post_data['clientTimezone']:
        post_data['clientTimezone'] = 'Asia/Shanghai'
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    post_data['governmentID'] = '610102196103120670'
    post_data['governmentIDType'] = 'CN.PRCID'
    post_geniusbar_governmentid = webpage.WebPage(geniusbar_url,
                                                  urllib.urlencode(post_data),
                                                  headers)
    data = post_geniusbar_governmentid.get_data()
    page_soup = post_geniusbar_governmentid.get_page(data)
    Writefile('data/post_government_id.html', data.encode('utf-8'))
    data, geniusbar_page = get_geniusbar_page(store_number, headers=headers)
    page_soup = geniusbar_page.get_page(data)
    post_items = ['clientTimezone']
    post_data = build_post_data(page_soup, post_items)
    if not post_data['clientTimezone']:
        post_data['clientTimezone'] = 'Asia/Shanghai'
    attrs = {'type': 'hidden', "name": "_formToken"}
    tokentag = page_soup.find('input', attrs=attrs)
    post_data["_formToken"] = tokentag.get('value')
    attrs = {'class': 'NSCSSStateHidden value', "name": "id"}
    
    spantag = page_soup.find('span', attrs=attrs)
    post_data['id'] = spantag.text
    postbar = 'http://concierge.apple.com/geniusbar/R401'
    headers['Referer'] = postbar
    headers['Accept-Language'] = 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3'
    reservicepage = webpage.WebPage(postbar,
                                    data=urllib.urlencode(post_data),
                                    headers=headers)
    data = reservicepage.get_data()
    Writefile('data/revers.html', data.encode('utf-8'))
    page_soup = reservicepage.get_page(data)
    attrs = {'id':'captchaKey'}
    tag_key = page_soup.find("input", attrs=attrs)
    get_data ={}
    get_data['key'] = tag_key.get('value')
    attrs= {'id':"captchaFormat"}
    tag_format = page_soup.find("input", attrs=attrs)
    get_data['format'] = tag_format.get('value')
    import time
    get_data['t'] = str(time.time()).replace('.', '')
    url = "https://concierge.apple.com/geniusbar/R401/captcha?&%s" % urllib.urlencode(get_data)
    headers['Accept'] = 'image/png,image/*;q=0.8,*/*;q=0.5'
    headers['Accept-Encoding']='gzip, deflate'
    request = urllib2.Request(url, headers=headers)
    res = urllib2.urlopen(request)
    data = res.read()
    f= open('data/img.jpg', 'wb')
    f.write(data)
    f.close