PHP实现QQ空间自动回复说说的方法
简介
在 PHP 中,可以通过调用第三方库实现登录QQ空间并发布评论、回复的功能。本文将介绍如何使用 PHP 向指定好友的说说进行自动回复。
整体思路
通过 QQ 登录,查找到指定好友的说说,获取说说的ID。通过模拟请求,向该说说增加回复。
具体来讲,可以分为以下步骤:
1.模拟登录 QQ 空间,获取 session、cookie 的值。
2.访问获取好友的说说列表,并获取要回复的说说的 ID。
3.模拟请求,向该说说增加回复。
4.完成自动回复。
详细步骤
1.模拟登录 QQ 空间,获取 session、cookie 的值。
使用 CURL 库来获取登录信息,如代码所示:
$ch = curl_init("https://user.qzone.qq.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($ch);
preg_match_all('/setcookie\("(.*?)",(.*?),"(\S+)",(.*?),"(.*?)",(.*?),(.*?),"(.*?)",(.*?)\)/', $output, $matches);
preg_match('/window.g_qzonetoken\s=\s"(.*?)"/', $output, $token);
其中,g_qzonetoken 即为在后续中必需的 token。
2.访问获取好友的说说列表,并获取要回复的说说的 ID。
访问 url:https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?qzonetoken={$token}&uin={$owner_uin}&ftype=0&sort=0&pos=0&num={$num}&replynum=100&g_tk={$g_tk}
。其中,$num 为要获取的说说条数,$owner_uin 为目标说说的所有者 ID,$g_tk 也需要通过之前获取到的 token 来获取。在返回的 JSON 中,可以获取到每一条说说的 ID。
代码示例:
$ch = curl_init("https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?qzonetoken={$token}&uin={$owner_uin}&ftype=0&sort=0&pos=0&num={$num}&replynum=100&g_tk={$g_tk}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
$output = curl_exec($ch);
$data = json_decode($output, TRUE);
$emm_id = $data['data']['vEmotions'][0]['tid'];
3.模拟请求,向该说说增加回复。
访问 url:https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_repcb_all?g_tk={$g_tk}
。
通过 POST 方法将回复内容以及需要回复的ID作为参数提交。如下代码所示:
$params = array(
"qzonetoken" => $token,
"g_tk" => $g_tk,//获取到的g_tk值
"uin" => $owner_uin,
"tid" => $emm_id,//回复的说说ID
"content" => $content,//回复的内容
"code_version" => 1,
"format" => "fs",
"hostUin" => $hostUin,
"sin" => $sin,
"sort" => 0,
"replynum" => 100,
"categoria" => 0,
"reid" => $emm_id,
"source" => 999
);
$ch = curl_init("https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_repcb_all?g_tk={$g_tk}");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Referer: https://user.qzone.qq.com/XXXXXXXX'));
$output = curl_exec($ch);
4.完成自动回复。
在获取到每条好友动态 的 ID 的基础上,逐一向其增加自动回复即可。
示例
以下示例为回复指定好友页面的第一条说说:
$ch = curl_init("https://user.qzone.qq.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($ch);
preg_match_all('/setcookie\("(.*?)",(.*?),"(\S+)",(.*?),"(.*?)",(.*?),(.*?),"(.*?)",(.*?)\)/', $output, $matches);
preg_match('/window.g_qzonetoken\s=\s"(.*?)"/', $output, $token);
$owner_uin = '10001';
$num = 1;
$g_tk = qq_share_callback();
$ch = curl_init("https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?qzonetoken={$token}&uin={$owner_uin}&ftype=0&sort=0&pos=0&num={$num}&replynum=100&g_tk={$g_tk}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
$output = curl_exec($ch);
$data = json_decode($output, TRUE);
$emm_id = $data['data']['vEmotions'][0]['tid'];
$content = 'hello world';
$hostUin = 123456;
$sin = 0;
$params = array(
"qzonetoken" => $token,
"g_tk" => $g_tk,
"uin" => $owner_uin,
"tid" => $emm_id,
"content" => $content,
"code_version" => 1,
"format" => "fs",
"hostUin" => $hostUin,
"sin" => $sin,
"sort" => 0,
"replynum" => 100,
"categoria" => 0,
"reid" => $emm_id,
"source" => 999
);
$ch = curl_init("https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_repcb_all?g_tk={$g_tk}");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_exec($ch);
curl_close($ch);
注意事项
1.代码中的 {$token}、{$owner_uin}、{$num}、{$g_tk} 需要根据实际需要替换。
2.在需要登录的网站上扫码登录获取Cookie和Token。
3.实际应用时需注意防止意外造成的违规操作,遵守服务协议。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现QQ空间自动回复说说的方法 - Python技术站