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日

相关文章

  • Spring Boot中使用Spring Retry重试框架的操作方法

    Spring Boot中使用Spring Retry重试框架的操作方法 Spring Retry是一个轻量级的重试框架,可以帮助我们处理应用程序中的重试逻辑。在本文中,我们将详细讲解如何在Spring Boot应用程序中使用Spring Retry。 步骤一:添加依赖 我们需要在pom.xml文件中添加以下依赖项: <dependency> &l…

    Java 2023年5月15日
    00
  • 深入了解Java SpringBoot自动装配原理

    Java SpringBoot 自动装配原理是 SpringBoot 框架的一大特点,也是所谓依赖注入的核心。通过自动装配,SpringBoot 可以自动完成 Bean 的实例化,而不必通过 XML 或者 Java 配置来定义 Bean。本文将详细探讨 SpringBoot 自动装配的原理,包括步骤和示例。 SpringBoot 自动装配的步骤: 扫描组件 …

    Java 2023年5月19日
    00
  • Java实现字符串解析为日期时间的方法示例

    引言 在Java中,字符串转日期时间是经常使用的操作之一。本文将讲解利用Java实现字符串解析为日期时间的方法示例。 问题概述 在Java中,我们可以通过SimpleDateFormat类来实现字符串解析为日期时间的目的。SimpleDateFormat是一个日期格式化类,通过指定的日期格式将日期转换为字符串,或将字符串按指定格式解析为日期。可以使用Simp…

    Java 2023年5月20日
    00
  • IDEA中Maven依赖下载失败的完美解决方案

    下面是“IDEA中Maven依赖下载失败的完美解决方案”的攻略。 问题描述 在使用Maven构建项目时,可能会遇到依赖下载失败的情况。这时IDEA上会报错,指出找不到相应的依赖。通常遇到这种情况可以有如下的处理方法: 方法一:手动清除本地Maven缓存 在本地Maven仓库里清除缓存,然后重新构建项目即可。清除缓存的方法如下: mvn dependency:…

    Java 2023年5月20日
    00
  • java常用工具类之DES和Base64加密解密类

    下面我将为您详细讲解“java常用工具类之DES和Base64加密解密类”的完整攻略。 1. 什么是DES和Base64加密解密算法 DES是一种对称加密算法,全称为数据加密标准(Data Encryption Standard),在安全性和效率方面都有不错的表现。而Base64是流行的编码方式,不是一种加密方式。它可以将任意字节序列编码成一种可用于文本通信…

    Java 2023年5月20日
    00
  • JAVA面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解 在Java Web开发中,经常会使用到Forward和Redirect这两种方式进行请求转发。它们的实现方式不同,在使用时也需要根据需求选择合适的方式。本文将详细讲解Forward和Redirect的区别以及使用场景。 Forward Forward是什么 Forward是一种请求转发方式,可以将请…

    Java 2023年6月15日
    00
  • SpringBoot项目将mybatis升级为mybatis-plus的方法

    下面是详细讲解 SpringBoot 项目将 Mybatis 升级为 Mybatis-Plus 的方法: 一、前置准备 1. 项目环境 SpringBoot版本:2.5.1 Mybatis版本:3.5.4 2. 引入依赖 在项目 pom.xml 中的 dependencies 中,加入以下依赖: <!– Mybatis-plus –> &lt…

    Java 2023年5月20日
    00
  • Java源码刨析之ArrayDeque

    Java源码刨析之ArrayDeque Java中的ArrayDeque是一种基于动态数组的双端队列数据结构。本篇文章将与读者一起深入分析Java中ArrayDeque的源代码,从中学习这种数据结构的实现原理。 容量扩充 由于使用动态数组来存储队列中的元素,因此在添加元素时,需要判断是否需要扩展数组的容量。容量扩充的代码实现如下: private void …

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