예제 #1
0
    def check_login(self, stage=0):
        self.apidata = dict()
        req = urllib2.Request("http://tieba.baidu.com/")
        ret = self.opener.open(req)
        ret.read() # Fix
        
        check_data = {"ct" : 486539264, "cm" : 59202, "tn" : "jsonUserInfo",
                "t" : utils.get_random_t()}
        ret = self.api_request("f", extra_data=check_data, encoding="gbk")        
        # self.logdebug("Login check return value: %s", ret)
        
        # 登陆校验成功.
        if ret.has_key("is_login") and ret["is_login"] == 1:
            self.user_info = ret
            self.cookiejar.save()
            self.loginfo("Login check success!")
            return True
            
        # 登陆校验失败(超过两次登陆校验)
        if stage >= 2:
            self.loginfo("Login check failed!")
            return False
        
        req = urllib2.Request('https://passport.baidu.com/v2/api/?login&tpl=mn&time=%d' % utils.timestamp())
        data = self.opener.open(req).read().strip()[1:-1] # remove brackets
        data = eval(data, type('Dummy', (dict,), dict(__getitem__=lambda s,n:n))())
        if int(data["error_no"]) != 0:
            self.logdebug("Login passport error: %s", data)
            return False
        
        param_out = data["param_out"]
        param_in = data["param_in"]
        params = {v : param_out[k.replace("name", "contex")] for k, v in param_out.items() if k.endswith("_name")}
        params.update({v: param_in[k.replace("name", "value")] for k,v in param_in.items() if k.endswith("_name")})
        params["username"] = self.username.decode("utf-8").encode("gbk")
        params["password"] = self.password
        params["safeflg"]  = ""
        params["mem_pass"] = "******"
        if int(params["verifycode"]) == 1 and stage == 1:
            self.loginfo("Login check require verifycode")
            params["verifycode"] = self.get_verify_code()
            
        params['staticpage'] = "http://tieba.baidu.com/tb/v2Jump.html"

        print params
        req = urllib2.Request('https://passport.baidu.com/v2/api/?login',
                              data=urllib.urlencode(params))
        html = self.opener.open(req).read()
        url = re.findall(r"encodeURI\('(.*?)'\)", html)[0]
        self.opener.open(url).read()
        
        # 二次登陆校验
        if stage == 0:
            self.loginfo("Begin second login check..")
        elif stage == 1:    
            self.loginfo("Begin three login check..")
        return self.check_login(stage=stage+1)
예제 #2
0
 def check_need_vcode(self, tieba_name):
     params = {"rs1": 0, "rs10" : 1, "lm" : self.get_forum_id(tieba_name),
               "word" : tieba_name, "t" : utils.get_random_t()}
     ret = self.api_request("f/user/json_needvcode", extra_data=params)
     try:
         if ret["data"]["need"] == 1:
             vcode_ret = self.api_request(ret["data"]["vcodeUrl"])
             vcodestr = vcode_ret["data"]["vcodestr"]
             url = "http://tieba.baidu.com/cgi-bin/genimg?%s" % vcodestr
             req = urllib2.Request(url)
             ret_data = self.opener.open(req).read()
             pic_image = utils.get_cache_file("vcode")
             with open(pic_image, "wb") as fp:
                 fp.write(ret_data)
             self.loginfo("Verify code pic download ok! save to %s", pic_image)
             return pic_image, vcodestr
     except Exception, e:    
         self.logdebug("Check newTie verify code faild, error: %s", e)
예제 #3
0
파일: posterlib.py 프로젝트: vipwp/autotie
 def check_need_vcode(self, tieba_name):
     params = {
         "rs1": 0,
         "rs10": 1,
         "lm": self.get_forum_id(tieba_name),
         "word": tieba_name,
         "t": utils.get_random_t()
     }
     ret = self.api_request("f/user/json_needvcode", extra_data=params)
     try:
         if ret["data"]["need"] == 1:
             vcode_ret = self.api_request(ret["data"]["vcodeUrl"])
             vcodestr = vcode_ret["data"]["vcodestr"]
             url = "http://tieba.baidu.com/cgi-bin/genimg?%s" % vcodestr
             req = urllib2.Request(url)
             ret_data = self.opener.open(req).read()
             pic_image = utils.get_cache_file("vcode")
             with open(pic_image, "wb") as fp:
                 fp.write(ret_data)
             self.loginfo("Verify code pic download ok! save to %s",
                          pic_image)
             return pic_image, vcodestr
     except Exception, e:
         self.logdebug("Check newTie verify code faild, error: %s", e)
예제 #4
0
파일: posterlib.py 프로젝트: vipwp/autotie
    def check_login(self, stage=0):
        self.apidata = dict()
        req = urllib2.Request("http://tieba.baidu.com/")
        ret = self.opener.open(req)
        ret.read()  # Fix

        check_data = {
            "ct": 486539264,
            "cm": 59202,
            "tn": "jsonUserInfo",
            "t": utils.get_random_t()
        }
        ret = self.api_request("f", extra_data=check_data, encoding="gbk")
        # self.logdebug("Login check return value: %s", ret)

        # 登陆校验成功.
        if ret.has_key("is_login") and ret["is_login"] == 1:
            self.user_info = ret
            self.cookiejar.save()
            self.loginfo("Login check success!")
            return True

        # 登陆校验失败(超过两次登陆校验)
        if stage >= 2:
            self.loginfo("Login check failed!")
            return False

        req = urllib2.Request(
            'https://passport.baidu.com/v2/api/?login&tpl=mn&time=%d' %
            utils.timestamp())
        data = self.opener.open(req).read().strip()[1:-1]  # remove brackets
        data = eval(
            data,
            type('Dummy', (dict, ), dict(__getitem__=lambda s, n: n))())
        if int(data["error_no"]) != 0:
            self.logdebug("Login passport error: %s", data)
            return False

        param_out = data["param_out"]
        param_in = data["param_in"]
        params = {
            v: param_out[k.replace("name", "contex")]
            for k, v in param_out.items() if k.endswith("_name")
        }
        params.update({
            v: param_in[k.replace("name", "value")]
            for k, v in param_in.items() if k.endswith("_name")
        })
        params["username"] = self.username.decode("utf-8").encode("gbk")
        params["password"] = self.password
        params["safeflg"] = ""
        params["mem_pass"] = "******"
        if int(params["verifycode"]) == 1 and stage == 1:
            self.loginfo("Login check require verifycode")
            params["verifycode"] = self.get_verify_code()

        params['staticpage'] = "http://tieba.baidu.com/tb/v2Jump.html"

        print params
        req = urllib2.Request('https://passport.baidu.com/v2/api/?login',
                              data=urllib.urlencode(params))
        html = self.opener.open(req).read()
        url = re.findall(r"encodeURI\('(.*?)'\)", html)[0]
        self.opener.open(url).read()

        # 二次登陆校验
        if stage == 0:
            self.loginfo("Begin second login check..")
        elif stage == 1:
            self.loginfo("Begin three login check..")
        return self.check_login(stage=stage + 1)