code删除前两个_听说用python来批量删除说说也挺快乐的呢~
原文鏈接
聽說用python來批量刪除說說也挺快樂的呢~?mp.weixin.qq.com先睹為快
在終端運行如下命令即可:
python clearQzone.py (--manual)如果加了--manual選項,意思就是每條說說刪除前你都要先人工確認一下是否真的需要刪除它,否則就是直接把所有說說都刪了。
效果如下(借的別人不用的小號測試的,不是我的QQ號T_T):
批量刪除說說https://www.zhihu.com/video/1248312837506195456導語
接昨天的那篇文章:
帶大家用python來享受一下批量刪除微博的快感唄~
看到有小伙伴留言說批量刪除說說也挺讓人快樂的,頓時明白了ta的意思。干脆趁熱打鐵,再來一期用python批量刪除QQ空間說說的教程吧。
廢話不多說,讓我們愉快地開始吧~
相關文件
https://github.com/CharlesPikachu/DecryptLogin
開發(fā)工具
Python版本:3.6.4 相關模塊: DecryptLogin模塊; argparse模塊; 以及一些python自帶的模塊。環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關模塊即可。
原理簡介
和之前類似,還是先利用我們開源的DecryptLogin包實現(xiàn)一波QQ空間的模擬登錄操作:
from DecryptLogin import login@staticmethod def login():lg = login.Login()infos_return, session = lg.QQZone()return session然后,我們去QQ空間抓一波包,即進入QQ空間之后按F12打開開發(fā)者工具,再點擊一下說說按鈕,可以發(fā)現(xiàn)如下鏈接:
即:
https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?它可以返回說說頁首頁的說說數(shù)據(jù)。簡單分析一下這個鏈接需要攜帶的參數(shù)有哪些:
1. 易知參數(shù) uin: 用戶的QQ號 ftype: 可以始終為'0' sort: 可以始終為'0' pos: 可以始終為'0' num: 可以始終為'20' replynum: 可以始終為'100' callback: 可以始終為'_preloadCallback' code_version: 可以始終為'1' format: 可以始終為'jsonp' need_private_comment: 可以始終為'1' 2. 不易知參數(shù) g_tk qzonetoken其中g_tk我們在以前的文章里說過應該怎么算:
模擬登錄系列 | QQ空間模擬登錄
即找到對應的js代碼:
然后轉成py的就行了:
'''計算g_tk''' def __calcGtk(self, string):e = 5381for c in string:e += (e << 5) + ord(c)return 2147483647 & e而參數(shù)qzonetoken,我們也可以找到對應的js代碼:
原來它可以是一個固定值。寫個簡單的程序測試一下:
'''獲得首頁的說說數(shù)據(jù)''' 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可以發(fā)現(xiàn)返回的數(shù)據(jù)如下:
和我們首頁的數(shù)據(jù)是對上的:
看來我們前面的分析是完全正確的?,F(xiàn)在,我們只需要再抓包看看刪除說說需要請求哪個接口就ok啦(自己手動刪除一條說說就能抓到這個接口了,很簡單的):
需要攜帶的參數(shù)如下:
hostuin: 用戶的QQ號 tid: 說說的id t1_source: 固定值'1' code_version: 固定值'1' format: 固定值'fs' qzreferrer: 格式為'https://user.qzone.qq.com/{用戶QQ號}/infocenter'于是,我們現(xiàn)在就可以愉快地開始寫代碼啦:
'''外部調用''' 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))基本的原理和之前批量刪除微博那個代碼一樣,只不過加了個是否需要手動確認之后再刪除的選項。
大功告成,完整源代碼詳見相關文件~
總結
以上是生活随笔為你收集整理的code删除前两个_听说用python来批量删除说说也挺快乐的呢~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骨伽推出影武者 X5 Pro 机箱:支持
- 下一篇: python网络运维案例代码库_OLDb