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

yizhihongxing

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日

相关文章

  • Java面试题及答案集锦(基础题122道,代码题19道)

    Java面试题及答案集锦(基础题122道,代码题19道)是一个涵盖了Java基础知识、常见面试题目以及编程题的集锦,可以帮助初学者了解Java的基础知识,也可以帮助面试者提高面试准备的质量。本文将从以下几个方面进行详细解析: Java基础知识题目解析 常见面试题目解析 编程题目解析 1. Java基础知识题目解析 Java基础知识部分共计包含122道题目,对…

    Java 2023年5月20日
    00
  • SpringBoot整合Keycloak实现单点登录的示例代码

    下面我将为您详细讲解“SpringBoot整合Keycloak实现单点登录的示例代码”的完整攻略。 1. 准备工作 在开始整合之前,我们需要准备以下工具和环境: JDK 1.8或以上版本 Maven Keycloak服务器 IntelliJ IDEA或Eclipse等IDE 2. 创建Spring Boot项目 首先,我们需要创建一个Spring Boot项…

    Java 2023年5月20日
    00
  • 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用

    下面是关于微信小程序如何使用websocket通讯的完整攻略。 1. 前言 微信小程序是一种应用程序平台,使用websocket通讯是一种前后端进行实时通讯的方式,能够实现消息快速传输,适用于实时聊天、游戏等场景。下面我将介绍如何使用websocket通讯进行实时聊天,包括前后端代码示例和亲测可用的demo。 2. 实现步骤 2.1 编写后端代码 我们首先需…

    Java 2023年5月23日
    00
  • spring security自定义登录页面

    下面是 Spring Security 自定义登录页面的完整攻略。 一、Spring Security 自定义登录页面的原理 Spring Security 默认提供了一个登录页面,但是我们可以通过自定义登录页面来满足自己的需求。实现自定义登录页面的方法主要包括以下几步: 创建一个登录页面; 在 Spring Security 配置文件中设置自定义登录页面的…

    Java 2023年5月20日
    00
  • Java8中的Stream 流实践操作

    让我来详细讲解一下 Java8 中的 Stream 流实践操作的完整攻略。 什么是 Stream? Stream 是 Java8 新增加的 API,用于支持对集合及数组的操作。使用 Stream API,可以更方便地进行筛选、过滤、映射及归约等操作。 在 Java8 中,每一个和集合相关的接口都提供了一个 stream 方法,用于返回一个 Stream 对象…

    Java 2023年5月26日
    00
  • 详解SpringMVC的两种实现方式

    详解SpringMVC的两种实现方式 Spring MVC是一个基于MVC架构的Web框架,它可以用于构建Web应用程序。Spring MVC框架提供了一组组件,包括控制器、视解析器、处理器映射器、数据绑定、数据验证、异常处理等,可以帮助我们快速开发Web应用程序。在Spring MVC中,我们可以使用两种方式来实现控制器:注解方式和XML配置方式。 注解方…

    Java 2023年5月18日
    00
  • springBoot2.X配置全局捕获异常的操作

    本文主要介绍如何使用 Spring Boot 2.x 配置全局的异常处理器。具体的步骤如下: 步骤一:新建异常处理器 首先,我们需要新建一个异常处理器类 GlobalExceptionHandler,该类需要实现 ErrorController 接口和 @RestControllerAdvice 注解。代码如下: @RestControllerAdvice …

    Java 2023年5月27日
    00
  • Spring MVC的web.xml配置详解

    简介 在Spring MVC应用程序中,web.xml文件是必需的配置文件之一。它包含了应用程序的基本配置信息,例如Servlet、Filter、Listener等。本文将详细介绍Spring MVC的web.xml配置,并提供两个示例说明。 配置Servlet 在Spring MVC应用程序中,我们需要配置一个Servlet来处理HTTP请求。以下是一个配…

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