PHP实现QQ空间自动回复说说的方法

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技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Tomcat配置https SSL证书的项目实践

    Tomcat配置https SSL证书的项目实践 在Web应用程序中添加SSL证书是提高安全性的一种重要方法。Tomcat是一个流行的Java Web服务器,它可以通过配置https SSL证书来提供安全的访问。 什么是SSL证书? SSL(Secure Socket Layer)证书是一种用于保护Web通信的数字证书。它通过加密网站和用户之间的数据传输来确…

    Java 2023年6月2日
    00
  • Java读取邮件的方法

    下面是详细讲解Java读取邮件的方法的完整攻略。 1. 使用JavaMail API JavaMail API 是一组用于发送、接收和管理电子邮件的Java类库。通过JavaMail API,我们可以使用Java读取邮件。 步骤: 导入JavaMail API jar包,例如:javax.mail.jar,可以从这里下载。 创建Session实例,用于连接邮…

    Java 2023年5月20日
    00
  • 使用maven如何将项目中的test代码打包进jar中

    使用 Maven 将项目中的 test 代码打包进 jar 中,可以实现在发布项目时一并发布 test 代码,方便其他人也能进行测试。下面是具体的步骤: 在 pom.xml 文件中添加以下代码,指定将 test 代码打包进 jar 中: <build> <plugins> <plugin> <groupId>o…

    Java 2023年5月20日
    00
  • Java中jstat命令的使用详解

    Java中jstat命令的使用详解 什么是jstat命令? jstat是一个用于监控Java虚拟机(JVM)统计信息的命令行工具。使用jstat命令可以查看JVM堆、垃圾回收、类加载等方面的实时统计信息。jstat命令可以用于调试JVM性能问题和进行故障诊断。 jstat命令的语法 jstat命令有以下的语法: jstat [option vmid [int…

    Java 2023年5月26日
    00
  • java导出到excel常用的几种方式总结

    Java导出到Excel常用的几种方式总结 在Java的开发中,我们经常会遇到将数据导出到Excel表格的需求。本文主要总结了Java导出到Excel常用的几种方式,包括使用POI、EasyExcel等框架实现导出,以及使用CSV格式和HTML格式导出的方法。 使用POI实现导出 Apache POI是一个Java API,用于处理Microsoft Off…

    Java 2023年5月26日
    00
  • mybatis的Configuration详解

    MyBatis的Configuration详解 MyBatis的Configuration类是整个MyBatis系统的核心,它是用于配置MyBatis系统的重要组件。在本篇攻略中,我们将详细讲解MyBatis的Configuration类。 Configuration类的作用 MyBatis的Configuration类负责读取MyBatis的配置文件,并提…

    Java 2023年5月19日
    00
  • Java的MyBatis框架中关键的XML字段映射的配置参数详解

    关于“Java的MyBatis框架中关键的XML字段映射的配置参数详解”,下面是完整的攻略: 什么是MyBatis框架 MyBatis 框架,是一款支持普通SQL查询和存储过程的优秀持久层框架。MyBatis 可以使用简单的 XML或注解 ,将接口和 Java的pojo(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。…

    Java 2023年5月20日
    00
  • Java 数据库连接池详解及简单实例

    Java 数据库连接池详解及简单实例 数据库连接池是一种管理数据库连接的技术,它使用一组数据库连接来避免在每个请求中重复创建和释放数据库连接的开销。本文将详细介绍Java中如何使用数据库连接池技术。 什么是数据库连接池 数据库连接池是一种可以在应用程序启动时创建并保持在内存中的一组预配置的数据库连接。当应用程序需要连接到数据库时,它可以从连接池中获取一个空闲…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部