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)
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)
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)
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)