code删除前两个_听说用python来批量删除说说也挺快乐的呢~

原文链接

听说用python来批量删除说说也挺快乐的呢~​mp.weixin.qq.com
545328ce1dc2468b1b8430a8f9ae8a97.png

先睹为快

在终端运行如下命令即可:

python clearQzone.py (--manual)

如果加了--manual选项,意思就是每条说说删除前你都要先人工确认一下是否真的需要删除它,否则就是直接把所有说说都删了。

效果如下(借的别人不用的小号测试的,不是我的QQ号T_T):

f585774a60cafc6f0c876f8b67700719.png
批量删除说说https://www.zhihu.com/video/1248312837506195456

导语

接昨天的那篇文章:

带大家用python来享受一下批量删除微博的快感呗~

看到有小伙伴留言说批量删除说说也挺让人快乐的,顿时明白了ta的意思。干脆趁热打铁,再来一期用python批量删除QQ空间说说的教程吧。

废话不多说,让我们愉快地开始吧~

相关文件

https://github.com/CharlesPikachu/DecryptLogin

开发工具

Python版本:3.6.4
相关模块:
DecryptLogin模块;
argparse模块;
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

和之前类似,还是先利用我们开源的DecryptLogin包实现一波QQ空间的模拟登录操作:

from DecryptLogin import login@staticmethod
def login():lg = login.Login()infos_return, session = lg.QQZone()return session

然后,我们去QQ空间抓一波包,即进入QQ空间之后按F12打开开发者工具,再点击一下说说按钮,可以发现如下链接:

5237b41eac037daf583d8c6678940715.png

即:

https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?

它可以返回说说页首页的说说数据。简单分析一下这个链接需要携带的参数有哪些:

1. 易知参数
uin: 用户的QQ号
ftype: 可以始终为'0'
sort: 可以始终为'0'
pos: 可以始终为'0'
num: 可以始终为'20'
replynum: 可以始终为'100'
callback: 可以始终为'_preloadCallback'
code_version: 可以始终为'1'
format: 可以始终为'jsonp'
need_private_comment: 可以始终为'1'
2. 不易知参数
g_tk
qzonetoken

其中g_tk我们在以前的文章里说过应该怎么算:

模拟登录系列 | QQ空间模拟登录

即找到对应的js代码:

975955b8df9c97e8b036bfcff334e864.png

然后转成py的就行了:

'''计算g_tk'''
def __calcGtk(self, string):e = 5381for c in string:e += (e << 5) + ord(c)return 2147483647 & e

而参数qzonetoken,我们也可以找到对应的js代码:

823f8e40db54e470449ecfe4d2d13b2c.png

原来它可以是一个固定值。写个简单的程序测试一下:

'''获得首页的说说数据'''
def __getAllTwitters(self):url = 'https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?'params = {'uin': self.uin,'ftype': '0','sort': '0','pos': '0','num': '20','replynum': '100','g_tk': self.g_tk,'callback': '_preloadCallback','code_version': '1','format': 'jsonp','need_private_comment': '1','qzonetoken': '12a2df7fc3ce126e67c62b0577cdea5133e79e77f46ae920b2a8b822ac867e54416698be9ee883f09e'}response = self.session.get(url, params=params)response_json = response.content.decode('utf-8').replace('_preloadCallback(', '')[:-2]response_json = json.loads(response_json)msglist = response_json['msglist']if msglist is None:msglist = []all_twitters = {}for item in msglist:tid = item['tid']created_time = item['created_time']content = item['content']all_twitters[tid] = [created_time, content]return all_twitters

可以发现返回的数据如下:

6308f07c09b46c631554376660f4c4a4.png

和我们首页的数据是对上的:

70212852a92c01a5bd652edeb53bc2c3.png

看来我们前面的分析是完全正确的。现在,我们只需要再抓包看看删除说说需要请求哪个接口就ok啦(自己手动删除一条说说就能抓到这个接口了,很简单的):

641fc4e79684e06257bf479ba4cf1970.png

需要携带的参数如下:

hostuin: 用户的QQ号
tid: 说说的id
t1_source: 固定值'1'
code_version: 固定值'1'
format: 固定值'fs'
qzreferrer: 格式为'https://user.qzone.qq.com/{用户QQ号}/infocenter'

于是,我们现在就可以愉快地开始写代码啦:

'''外部调用'''
def run(self):url = 'https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_delete_v6?'del_count = 0total_count = 0while True:all_twitters = self.__getAllTwitters()if not all_twitters:breakfor key, value in all_twitters.items():total_count += 1print('[INFO]: 正在处理第%s条说说, 已成功删除%s条说说...' % (total_count, del_count))if self.is_manual:print('说说时间: %s, 说说内容: %s...' % (str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(value[0]))), value[1]))user_input = input('是否需要删除该条说说(yes/no): ')if user_input.lower() == 'n' or user_input.lower() == 'no':continuedata = {'hostuin': self.uin,'tid': key,'t1_source': '1','code_version': '1','format': 'fs','qzreferrer': f'https://user.qzone.qq.com/{self.uin}/infocenter'}params = {'qzonetoken': self.qzonetoken,'g_tk': self.g_tk}try:response = self.session.post(url, data=data, params=params)del_count += 1time.sleep(random.randrange(1, 3)+random.random())except:passtime.sleep(random.randrange(3, 6)+random.random())print('[INFO]: 程序运行完毕, 共检测到您的账户一共有%s条说说, 其中%s条已被成功删除...' % (total_count, del_count))

基本的原理和之前批量删除微博那个代码一样,只不过加了个是否需要手动确认之后再删除的选项。

大功告成,完整源代码详见相关文件~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

放弃Python转向Go语言:我们找到了以下9大理由

转用一门新语言通常是一项大决策&#xff0c;尤其是当你的团队成员中只有一个使用过它时。今年 Stream 团队的主要编程语言从 Python 转向了 Go。本文解释了其背后的九大原因以及如何做好这一转换。 为什么使用 Go 原因 1&#xff1a;性能 Go 极其地快。其性能与 Java 或 C相似…

开源许可证的变更带给我们什么启示?

喜欢就关注我们吧&#xff01;近日&#xff0c;Elastic 公司将旗下的知名开源项目 Elasticsearch 和 Kibana 的开源许可证变更的事件持续发酵&#xff0c;再次把我们的目光聚焦到开源公司与云服务厂商之间的矛盾旋涡中。事实上&#xff0c;Elastic 公司与云服务厂商的“积怨”由…

as本地仓库更改_将gitee仓库连接GitHub Desktop。新建更改仓库并上传至gitee。

Ⅰ、在GitHub Desktop上登陆账号GitHub Desktop上只能用GitHub账户登陆第一次打开GitHub Desktop使会直接有登陆界面出现的&#xff0c;直接用GitHub的账户登陆就好了可以在最上方的菜单&#xff0c;File → Options打开页面登陆 &#xff08;详细操作见图&#xff09;这是已经…

有人问我:程序员要供祖师爷的话该供谁?

有人问我&#xff1a;程序员是不是都抽烟&#xff1f; 我想了半天我抽烟完全是因为医生&#xff0c;在我刚上大学的时候还不会吸烟&#xff0c;有一天嗓子特别疼&#xff0c;我就去医院检查&#xff0c;大夫检查之后对我说&#xff0c;没什么太大毛病&#xff0c;你少抽点烟就行…

java父类转子类_java中什么是继承,和继承的接口的关系?

继承的概念继承是java面向对象编程技术的一块基石&#xff0c;因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为&#xff0c;使得子类对象&#xff08;实例&#xff09;具有父类的实例域和方法&#xff0c;或子类从父类继承方法&#xff0c;使得子类具有父类相…

VSCode+BeetleX.VueHost开发Vue应用

BeetleX.VueHost是一个用于打包Vue和提供HTTP服务的程序&#xff0c;它能提供在没安装vue-cli和webpack的情况下开发vuejs应用。使用 BeetleX.VueHost无须安装下载运行即可&#xff0c;可以通过以下地址下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1z4Jfz…

8 无法识别raid盘_王者荣耀防沉迷规则再升级;未来将采用人脸识别验证

昨天&#xff0c;《王者荣耀》官网发布了《未成年人防沉迷新规接入公告》&#xff0c;这份公告对于未成年人的可游玩时长、充值金额等都做出了规定。规则规定&#xff1a;在游玩时长方面&#xff0c;未成年用户每日22时至次日8时禁玩&#xff0c;法定节假日每日限玩3小时&#…

干货|MIT线性代数课程精细笔记[第二课]

0前言 MIT线性代数课程精细笔记[第一课]笔记见MIT线性代数课程精细笔记[第一课]。 该笔记是连载笔记&#xff0c;希望对大家有帮助。 1知识概要 这一节中我们介绍一下消元法&#xff0c;即是上一节中我们提到的“系统化”求解方程所用的方法&#xff0c;通过矩阵消元运算可以很…

在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案

玉石行业虽然在我们国家有着很悠久的历史&#xff01;但是就行业认知而言&#xff0c;仍然属于小众行业。正所谓隔行如隔山&#xff0c;在很多外行人眼里&#xff0c;翡翠行业很神秘&#xff0c;而且水也很“深”&#xff01;甚至很多人认为这个行业“三年不开张&#xff0c;开…

参加美赛,需掌握这些算法和模型

昨天晚上的直播甚是精彩 方同学不但分享了 获奖论文、解题技巧 还分享了 赛前准备、比赛经验和日程规划 po几张截图让大家感受下 此时此刻可能会有不少童鞋 正在为错过直播而懊悔 不用担心 超模君又准备了一份豪华大礼 本周 超模君特意邀请到 今年美赛A题特等奖获奖者 徐乾同学…

yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践

‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;子固部门&#xff1a;数据中台一、背景有赞是一个商家服务公司&#xff0c;致力于帮助每一位重视产品和服务的商家成功。随着移动互联网的流量增长红利渐渐褪去&#xff0c;商家获得新的流量越来越困难…

分布式数字签名令牌TokenProvider

在分布式系统中&#xff0c;令牌签发系统往往需要跟令牌应用系统分离&#xff0c;并且应用系统可以独立验证令牌&#xff0c;无需请求签发系统接口。数字签名令牌属于发明专利《基于令牌协议的令牌组网构建方法》&#xff08;已授权专利号201510213377.X&#xff09;的一部分&a…

热力地图高德_高德地图:最新动态

高德地图是国内最专业的手机地图&#xff0c;超过3.2亿用户在使用&#xff01;高德地图是应用商店上数据准确率最高、最省流量、躲避拥堵功能最强大的手机地图&#xff0c;平均每天为用户省油61万升&#xff01;高德地图今日宣布上线货车导航功能&#xff0c;帮助全国3000万货车…

有效处理 Java 异常三原则

Java中异常提供了一种识别及响应错误情况的一致性机制&#xff0c;有效地异常处理能使程序更加健壮、易于调试。 异常之所以是一种强大的调试手段&#xff0c;在于其回答了以下三个问题&#xff1a; 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下&#x…

人口危机 资本剥削导致生育率低迷

不久前&#xff0c;相关部门公布数据&#xff0c;2020年出生并已经到公安机关进行户籍登记的新生儿共1003.5万。对此&#xff0c;铁流先不做评论&#xff0c;我们先看数据。以下是1949年和1981年以来人口出生情况&#xff1a;1949年: 1275万......1981年&#xff1a;2064万1982…

连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需

随着科技的进步&#xff0c;现在家家户户大街小巷都是Wifi信号&#xff0c;所以无线基地已经成为生活中不可缺少的一环&#xff0c;但也因为这样无线干扰的情况&#xff0c;常常听到有人抱怨怎么无线又突然断线啦&#xff1f;我的wifi又连不上了&#xff1f;为什么无线上网速度…

关于机器学习,你应该至少学习这8个落地案例|干货集锦

机器学习、深度学习、强化学习、迁移学习&#xff0c;这些你到底了解多少&#xff1f;各种深度学习框架如TensorFlow、Caffe、MXNet等又该如何选择&#xff1f;如何将机器学习整合到正在开发的应用中&#xff1f;机器学习在金融、电商、外卖、教育等领域有哪些落地案例&#xf…

c++经典编程题_全国青少年软件编程等级考试C语言经典程序题10道十

全国青少年软件编程等级考试C语言经典程序题10道十【程序91】题目&#xff1a;时间函数举例11.程序分析&#xff1a;2.程序源代码&#xff1a;#include "stdio.h"#include "time.h"void main(){ time_t lt; /*define a longint time varible*/lttime(NULL)…

使用SQL Server分区表功能提高数据库的读写性能

首先祝大家新年快乐&#xff0c;身体健康&#xff0c;万事如意。一般来说一个系统最先出现瓶颈的点很可能是数据库。比如我们的生产系统并发量很高在跑一段时间后&#xff0c;数据库中某些表的数据量会越来越大。海量的数据会严重影响数据库的读写性能。这个时候我们会开始优化…

回顾周杰伦17年间的歌词,才知道他都唱了些什么

每当提到周杰伦的歌时&#xff0c;你首先会想到的是什么呢&#xff1f;双截棍&#xff1f;中国风&#xff1f;还是是方文山&#xff1f;或者更会有人回答说&#xff1a;根本听不清的歌词…… 回想起来&#xff0c;周杰伦的歌可以说陪伴了我们一代甚至是几代人的成长。无论是《晴…