百度贴吧自动签到 PHP 版本

这堆代码是我去年从一个贴吧被删贴子的百度快照里面抢救出来的,稍作修改。今天试了一下还能用。

首先需要提取 Cookies。我建议使用 Edit This Cookie 这个 Chrome 扩展,在设置中把 Cookies 的输出格式设为“Semicolon separated name=value pairs”。然后打开百度贴吧首页,登录后点击 Edit This Cookie 按钮并选择“导出 Cookies”即可。这样导出的数据前三行注释请删除,只留最后一行数据即可。

以下为 PHP 源代码。

$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 这个变量存储了签到状态。下面是使用示例:

$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,原因:零点时分,赶在一天伊始签到的人好多,亲要不等几分钟再来签吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据