这堆代码是我去年从一个贴吧被删贴子的百度快照里面抢救出来的,稍作修改。今天试了一下还能用。
首先需要提取 Cookies。我建议使用 Edit This Cookie 这个 Chrome 扩展,在设置中把 Cookies 的输出格式设为“Semicolon separated name=value pairs”。然后打开百度贴吧首页,登录后点击 Edit This Cookie 按钮并选择“导出 Cookies”即可。这样导出的数据前三行注释请删除,只留最后一行数据即可。
以下为 PHP 源代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$diqu="";//要签到的贴吧名称 $Cookie="";//填写你的贴吧登录 Cookie,形式为 "key=value;" $url="http://tieba.baidu.com/f?kw=".urlencode( mb_convert_encoding($diqu,'gb2312','utf-8'))."&fr=itb_favo&fp=favo"; $cu = curl_init();curl_setopt($cu, CURLOPT_URL, $url); curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1); $header[]= 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, text/html, * '. '/* '; $header[]= 'Accept-Language: zh-cn '; $header[]= 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) '; $header[]= 'Host: tieba.baidu.com'; $header[]= 'Connection: Keep-Alive '; $header[]= 'Cookie: '.$Cookie; curl_setopt($cu, CURLOPT_HTTPHEADER,$header); $ret = curl_exec($cu); curl_close($cu); preg_match("/PageData.tbs = "(.*?)"/", $ret , $matches); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://tieba.baidu.com/sign/add"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $he[]= 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, text/html, * '. '/* '; $he[]= 'Accept-Language: zh-cn '; $he[]= 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) '; $he[]= 'Host: tieba.baidu.com'; $he[]= 'Connection: Keep-Alive '; $he[]= 'Cookie: '.$Cookie ; curl_setopt($ch, CURLOPT_HTTPHEADER,$he); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"ie=utf-8&kw=".urlencode($diqu)."&tbs=".$matches[1] ); curl_setopt($ch, CURLOPT_TIMEOUT, TIMEOUT); $ret =curl_exec($ch); curl_close($ch); |
$ret 这个变量存储了签到状态。下面是使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$result=json_decode($ret); if($result->no=="0") { echo "成功:"; echo "您是本吧第".$result->data->uinfo->user_sign_rank."个签到的用户。"; echo "连续签到第".$result->data->uinfo->cont_sign_num."天,共签到".$result->data->uinfo->cout_total_sing_num."天。"; } else { echo "失败:"; echo "错误代码:".$result->no.','; echo "原因:".$result->error; } |
配置完成以后,可以使用 crontab 等实现自动签到。注意:建议不要在0:00定时触发,否则很容易出现这种状况:
失败:错误代码:1100,原因:零点时分,赶在一天伊始签到的人好多,亲要不等几分钟再来签吧