声明:本脚本为原创,供大家借鉴使用,转载请声明原作者并附上本文链接,使用本脚本造成的一切后果(包括但不限于连续签到过快而被限制)自负!
首先在android上抓包,可见签到的时候请求如下:
由此可知,群签到的接口为http://qun.qq.com/cgi-bin/qiandao/sign/publish
请求方式为POST,请求参数为
bkn=【g_tk】&gallery_info={"category_id":9,"page":0,"pic_id":15}&template_id=2&gc=【群号】&client=2&text=【签到文本】
cookie需要发送uin和skey。返回的内容为json。
通过抓包还可以发现获取群列表的接口为
http://qun.qzone.qq.com/cgi-bin/get_group_list?uin=【uin】&g_tk=【g_tk】
cookie同样需要发送uin和skey。
获取uin和skey的方式可以使用php cURL模拟登陆并抓取内容进行匹配。也可以手动登陆QQ空间后在F12的console里输入
document.cookie.match(/(uin|skey)=(.+?);/g);
进行获取。签到可以用如下代码实现:
<?php
/*
请手动登陆QQ空间后在F12的console中输入下面代码
document.cookie.match(/(uin|skey)=(.+?);/g);
获取uin和skey后请替换掉下面的uin和skey。否则无法使用!
*/
$uin = 'o0123456789'; //请务必修改这里的uin
$skey = '@ABcdEfgHijK'; //请务必修改这里的skey
new QianDao($uin, $skey);
class QianDao{
private $signUrl = 'http://qun.qq.com/cgi-bin/qiandao/sign/publish';//签到的URL地址
function __construct($uin, $skey){
$this->un = preg_replace('/^o0*/', '', $uin);//数字QQ号码
$this->cookie = sprintf('Cookie: uin=%s; skey=%s;', $uin, $skey);//Cookie
$this->g_tk = $this->getGTK($skey);//计算 g_tk
$this->sign($this->getQunList());//获取群列表并签到
}
function getGTK($skey){
$len = strlen($skey);
$hash = 5381;
for($i = 0; $i < $len; $i++){
$hash += ($hash << 5) + ord($skey[$i]);
}
return $hash & 0x7fffffff;//计算g_tk
}
function getQunList(){
$html = file_get_contents(
sprintf('http://qun.qzone.qq.com/cgi-bin/get_group_list?uin=%s&g_tk=%s', $this->un, $this->g_tk),
false,
stream_context_create(array(
'http'=>array(
'method'=>'GET',
'header'=>$this->cookie
)
))
);
preg_match('/(\{[\s\S]+\})/', $html, $qunList);
if(count($qunList) == 0){
return NULL;
}
$qunList = json_decode($qunList[1]);
if($qunList == NULL || $qunList->code != 0){
return NULL;
}
return $qunList->data->group;
}
function sign($groups){
if($groups == NULL)return;
$i = 1;
foreach($groups as $qun){
$this->qiandao($qun->groupid);//签到
printf("%d\t%s(%d)\t签到完成\r\n", $i++, $qun->groupname, $qun->groupid);//输出信息
}
}
function qiandao($qin){
file_get_contents($this->signUrl, false,
stream_context_create(
array('http' => array(
'method' => 'POST',
'header' => $this->cookie,
'content' => sprintf('bkn=%s&gallery_info={"category_id":9,"page":0,"pic_id":15}&template_id=2&gc=%s&client=2&text=', $this->g_tk, $qin)
))
)
);
}
}
接着可以写个定时任务,每天运行一遍即可给所有群签到。
不想给所有群签到可以在qiandao()函数里面加上个
if($qin == 【群号】) return false;
即可禁止给某个群签到。代码很多细节之处不完善,请自行修改。
你好我想问问这个脚本在哪儿使用,我是电脑小白