python版 百度签到

    添加时间:2013-8-8 点击量:

    经常玩贴吧,刚学python ,所以本身弄了一个python版的签到法度。本身的器材老是好的。


    登岸模块参考的http://www.crifan.com/emulate_login_website_using_python/。签到模块本身找百度瞎糊弄的,写的很烂,代码一点都不规范。有什么建议可以提




      1  594595116@qq.com
    
    2
    3 import re
    4 import urllib
    5 import urllib2
    6 import cookielib
    7 import json
    8 import sys
    9 import time
    10 urllib import quote,unquote
    11 urllib2 import HTTPError
    12 urllib2 import URLError
    13
    14 def t():
    15 print 按(Y/y)持续,其他退出!
    16 t = raw_input(>>
    17 if (t==y or t==Y):
    18 Login()
    19 else :
    20 print 感激您的应用。
    21 print email:594595116@qq.com
    22 time.sleep(5
    23
    24
    25 登岸模块
    26 def Login():
    27
    28 ID = raw_input(百度账号(暂不支撑和邮箱登岸) :
    29 ID1 = ID.decode(gb18030).encode(utf-8--重视编码,可能网站会辨认不了而导致登岸失败
    30 PassWord = raw_input(暗码 :
    31
    32 try :
    33 cj = cookielib.CookieJar();
    34 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
    35 urllib2.install_opener(opener);
    36
    37 打开百度获得 cookie
    38 baidu_URL = http://www.baidu.com
    39 staticpage = http://www.baidu.com/cache/user/html/jump.html;
    40 baidu_Login_URL = https://passport.baidu.com/v2/api/?login;
    41 baidu_OPEN = urllib2.urlopen(baidu_URL)
    42
    43 获得所需的数据 token
    44 getapiUrl = https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true;
    45 getapiResp = urllib2.urlopen(getapiUrl);
    46 getapiRespHtml = getapiResp.read();
    47
    48 foundTokenVal = re.search(bdPass\.api\.params\.login_token=(?P<tokenVal>\w+);, getapiRespHtml);
    49 tokenVal = foundTokenVal.group(tokenVal);
    50
    51 生成要发送的数据
    52 if(foundTokenVal):
    53 LoginData = {
    54 staticpage:staticpage,http://www.baidu.com/cache/user/html/v3Jump.html,
    55 charset:UTF-8
    56 token:tokenVal,
    57 tpl:mn
    58 apiver:v3,
    59 tt:1375838455898,
    60 codestring:,
    61 isPhone:false
    62 safeflg:0,
    63 u:http://www.baidu.com/,
    64 quick_user:0,
    65 username:ID1,
    66 password:PassWord,
    67 verifycode:,
    68 mem_pass:on
    69 ppui_logintime:11211,
    70 callback:parent.bdPass.api.login._postCallback
    71 };
    72
    73
    74
    75 把发送数据转换格局
    76 LoginData = urllib.urlencode(LoginData);
    77
    78 生成恳求数据
    79 baidu_Login_Request = urllib2.Request(baidu_Login_URL, LoginData);
    80
    81 添加数据头部
    82 baidu_Login_Request.add_header(Content-Typeapplication/x-www-form-urlencoded);
    83 baidu_Login_Request.add_header(User-AgentMozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31);
    84
    85 发送恳求,测验测验登岸
    86 baidu_Login_Open = urllib2.urlopen(baidu_Login_Request);
    87
    88 验证登岸是否成功
    89 tt = urllib2.urlopen(baidu_URL).read().encode(gb18030)
    90 print tt
    91 ttt = re.search(rhref=/p/([0-9A-Za-z%])\?=super,tt).grop(1)
    92 print ttt
    93 yanzheng_url = http://www.baidu.com/p/ + ID1
    94 yanzheng_open = urllib2.urlopen(yanzheng_url)
    95 yanzheng_open = yanzheng_open.read().encode(gb18030
    96 yanzheng = re.search(rsexTitle : ([^ ]), yanzheng_open).group(1
    97
    98 if(yanzheng == ):
    99 print %s 成功登岸, ^_^ID
    100 print 签到正在进行中。。
    101 Sign(ID)
    102 else:
    103 print %s 登岸失败! 请稍后测验测验! ID
    104 Login()
    105 else:
    106 print %s 登岸失败! 请稍后测验测验! ID
    107 Login()
    108 print Fail to extract token value html=,getapiRespHtml;
    109
    110 except :
    111 print 登岸失足啦!
    112 t()
    113
    114
    115 签到模块
    116 def Sign(ID):
    117
    118 try :
    119 签到恳求地址
    120 Sign_Request_Url = http://tieba.baidu.com/sign/add
    121
    122 用户的贴吧
    123 ID_Tieba_Url = http://www.baidu.com/p/ + ID + ?=tieba
    124 ID_Tieba_Open = urllib2.urlopen(ID_Tieba_Url).read()
    125
    126 i贴吧id
    127 itieba_id = re.search(ri\\/([0-9])\\/others\?=princess, ID_Tieba_Open).group(1
    128 index = http://tieba.baidu.com/i/ + itieba_id + ?fr=index
    129
    130 匹配贴吧
    131 index_open = urllib2.urlopen(index).read()
    132 Tieba = re.findall(rkw=([0-9A-Za-z%])&fr=itb_favo&fp=favo target=_blank>([^ ])</a>, index_open)
    133
    134 if Tieba != []:
    135 for i in range(len(Tieba)):
    136 Tieba_Url = http://tieba.baidu.com/f?kw= + Tieba[i][0]
    137 Tieba_Open = urllib2.urlopen(Tieba_Url).read()
    138
    139 获取tbs
    140 Get_Tbs = re.search(rPageData.tbs = ([0-9a-z]);,Tieba_Open).group(1
    141
    142 贴吧名字编码
    143 Tieba_Name = urllib.unquote(Tieba[i][0]).decode(gb18030).encode(utf-8
    144 kw = Tieba_Name
    145
    146 签机关到恳求数据 和 编码
    147 Sign_Request_Data={ie:utf-8kw:kw,tbs:Get_Tbs}
    148 Sign_Request_Data = urllib.urlencode(Sign_Request_Data)
    149
    150 发送签到恳求
    151 Sign_Request = urllib2.Request(Sign_Request_Url, Sign_Request_Data)
    152 Sign_Request.add_header(User-agentMozilla/5.0 (X11; Linux i686)
    153 Sign = urllib2.urlopen(Sign_Request)
    154
    155 获取响应数据
    156 Response = Sign.read()
    157
    158 把响应转成字典
    159 Response = json.loads(Response)
    160 print Response
    161
    162 Tieba_Name = urllib.unquote(Tieba[i][0]).decode(gb18030).encode(utf-8
    163 print Tieba_Name
    164 print unquote(Tieba[i][0])
    165 print Tieba[i][0]
    166 if(Response[error]==) :
    167 user_sign_rank = int(Response[data][uinfo][user_sign_rank]) 第几个签到
    168 cont_sign_num = int(Response[data][uinfo][cont_sign_num]) 连气儿签到
    169 cout_total_sing_num = Response[data][uinfo][cout_total_sing_num] 累计签到
    170 print %d..%s 签到成功,第%d个签到,连气儿签到%d天,累计签到%d天(i, unquote(Tieba[i][0]), user_sign_rank, cont_sign_num, cout_total_sing_num)
    171 else :
    172 print %d.%s %(i,unquote(Tieba[i][0])) print %d.%s %s %(i,unquote(Tieba[i][0]),Response[error]) 不知道为什么如许是不可的,老是乱码。
    173 print --------------------%s %Response[error] print %d.%s %s %(i,Tieba_Name,Response[error]) 如许却可以,所以把他们拆分了
    174 time.sleep(3
    175 else :
    176 print 你还没有喜好的贴吧!
    177
    178 print 一共有%d个喜好的吧 %(i+1
    179 t()
    180 except :
    181 print 签到失足啦!
    182 t()
    183
    184
    185 if __name__ == __main__ :
    186 Login()
    187





    经验总结:1,编码题目须要重视 2,编码要规范








    无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
    分享到: