百度贴吧自动签到

里面的bdLogin在“http://blog.youkuaiyun.com/qq506657335/article/details/18924731”里面

"""

02/19/14  

今天挂在bae上面的自动签到失效了,所以打开自己做的这个进行签到,发现运行后只有一部分贴吧签到了,进入http://tieba.baidu.com/f/like/mylike发现原来自己的贴吧太多了,被分成了3页(做这个的时候用的是小号,没几个关注的贴吧,所以不知道有分页这种事),于是修改了下。。。

将下面代码里面的def getList(opener)函数换成下面这个就Ok了。。。

reg_likePageNum = re.compile('<a href="[^&]*&pn=(\d+)">尾页</a>');

def getList(opener):
    def getPageNum(opener):
        try:
            return reg_likePageNum.findall(opener.open(GETLIKE_URL).read().decode("gbk"))[0];
        except:
            return 1;
    pageNum = getPageNum(opener);
    list = [];
    for i in range(1, int(pageNum) + 1):
        list += reg_likeUrl.findall(opener.open(GETLIKE_URL + "?&pn={0}".format(i)).read().decode("gbk"));
    return list;


"""



import bdLogin
import re;
import urllib;
import urllib.request;
import multiprocessing;
import json;
import pickle;
from urllib.parse import urlencode;

TIEBA_URL = "http://tieba.baidu.com";
GETLIKE_URL = "http://tieba.baidu.com/f/like/mylike";
SIGN_URL = "http://tieba.baidu.com/sign/add";

reg_likeUrl = re.compile("<a href=\"([^\"]+)\" title=\"([^\"]+)\">");
reg_getTbs = re.compile("PageData.tbs = \"(\w+)\"");

def getTbTbs(opener, url):
    return reg_getTbs.findall(opener.open(TIEBA_URL + url).read().decode("gbk"))[0];

#获取喜欢的贴吧列表    
def getList(opener):
    return reg_likeUrl.findall(opener.open(GETLIKE_URL).read().decode("gbk"));
    
signHeaders = {
                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
                "Host":"tieba.baidu.com",
                "Origin":"http://tieba.baidu.com",
                "Referer":"http://tieba.baidu.com",
              }

#要post的表格              
signData = {
            "ie":"utf-8",
            "kw":"",
            "tbs":"",
           }
    
class autoSign:
    def __init__(self, user = "", psw = ""):
        login = bdLogin.tbLogin();
        self._opener = login.login(user, psw);
        
    def getList(self, update = 1):
        if(update):             #update为1时会更新签到表,为0时则只从文件中加载
            file = open("list.data", "wb");
            self._likeList = getList(self._opener);
            pickle.dump(self._likeList, file);
            file.close();
        else:
            file = open("list.data", "rb");
            self._likeList = pickle.load(file);
            file.close();
        
    def sign(self):
        pool = multiprocessing.Pool(processes = 4);
        list = [];
        for url in self._likeList:                  #多进程执行
            list.append(pool.apply_async(self._signProcess, args = (url, )));
        
        for ret in list:                            #取回结果
            print(ret.get());
        
    def _signProcess(self, url):
        signData["kw"] = url[1];
        signData["tbs"] = getTbTbs(self._opener, url[0]);   #获取tbs
        signHeaders["Referer"] = signHeaders["Origin"] + url[0];
        request = urllib.request.Request(SIGN_URL, headers = signHeaders);
        result = json.loads(self._opener.open(request, urlencode(signData).encode("utf-8")).read().decode("utf-8"));
        if(result["no"] == 0):           #签到成功
            return "{0}吧签到成功,今天是第{1}个签到!".format(url[1], result["data"]["uinfo"]["user_sign_rank"])
        elif(result["no"] == 1101):      #已签过
            return "{0}吧之前已经签到过了哦!".format(url[1]);
        else:                            #出错
            return "未知错误!" + "\n" + url + "\n" + result;
        
        
def main():
    asRobot = autoSign("", "");          #传入用户名和密码
    asRobot.getList();                   #先获取列表再进行签到
    asRobot.sign();
    
if(__name__ == "__main__"):
    main();

图。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值