修复多个失效的qq相关接口

This commit is contained in:
sqzhang 2022-03-17 18:21:44 +08:00
parent aaf4d4ea8c
commit 97f3342fb5
3 changed files with 63 additions and 56 deletions

View File

@ -89,7 +89,7 @@ def generate_data():
# 创建一个自己编写的qq bot对象
bot = Bot()
custom_print(u'登录成功,正在获取数据...')
custom_print(u'登录成功!')
# 更新一下欲输出的markdown文本
markdown_content = markdown_content.replace('{qq_number}',bot.qq_number)
markdown_content = markdown_content.replace('{qq_icon_png}', 'data/qq_icon.png')
@ -98,7 +98,7 @@ def generate_data():
# 获取该登录账户的详细资料
custom_print(u'正在获取该登录账户的详细数据...')
custom_print(u'正在获取该账户的个人数据...')
detail_information = bot.get_detail_information()
# content为markdown语法文本
content = '\n<br/><br/>\n' + '## 我的详细资料\n' + '种类|内容\n:- | :-\n'
@ -139,26 +139,22 @@ def generate_data():
# 获取所有好友列表接口已失效
'''
# 获取所有qq好友的备注名和qq号
all_qq_friends = bot.get_all_friends_in_qq()
custom_print(u'所有qq好友号码和备注名中...')
custom_print(u'正在获取该账户的好友数据...')
all_qq_friends = bot.get_all_friends_in_qq() # 获取所有好友列表接口已失效
qq_number_list = []
for key, friend_group in all_qq_friends.items():
for info in friend_group['mems']:
qq_number_list.append(info['uin'])
'''
# 获取所有群信息
custom_print(u'获取该QQ加入的所有群信息...')
custom_print(u'正在获取该账户的所有群信息...')
group_list = bot.get_group()
print(group_list)
# content为markdown语法文本
content = '\n\n<br/><br/>\n' + '## 我加入的群资料\n' + '序号|群名|群号|群主QQ\n:- | :-| :-| :-\n'
# 获取某个群的群成员信息
@ -179,7 +175,7 @@ def generate_data():
# 获取过去30天内退出的群名单
custom_print(u'获取过去30天退出的群...')
custom_print(u'正在获取该账户过去30天退出的群...')
data = bot.get_quit_of_group()
delete_group_count = 0
# content为markdown语法文本
@ -210,7 +206,7 @@ def generate_data():
# 获取过去364天内删除的好友名单
custom_print(u'获取过去12个月删除的好友名单...')
custom_print(u'正在获取该账户过去12个月删除的好友名单...')
delete_friend_list = bot.get_delete_friend_in_360day()
delete_friend_count = len(delete_friend_list)
# content为markdown语法文本
@ -238,7 +234,7 @@ def generate_data():
# 判断此次登录的qq是否为vip或者svip
# content为markdown语法文本
content = '\n\n<br/><br/>\n' + '## 财产分析\n'
custom_print(u'判断该QQ是否为高级用户...')
custom_print(u'正在判断该账户是否为VIP...')
data = bot.is_vip_svip()
isSvip = data['isSvip']
isVip = data['isSvip']
@ -252,14 +248,14 @@ def generate_data():
content += '此时此刻,我是**QQ VIP**,但不是**QQ SVIP**\n'
# 获取qb值
custom_print(u'获取账户QB值...')
custom_print(u'正在获取该账户的Q币...')
qb_value = bot.get_qb()
timeArray = time.localtime()
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
content += '截止到**{}**我剩余的Q币个数为**{}**个\n\n'.format(otherStyleTime,qb_value)
# 获取代付信息
custom_print(u'获取代付信息...')
custom_print(u'正在获取该账户的代付信息...')
pay_list = bot.get_pay_for_another()
content += '截止到**{}**,我收到的代付信息条数为:**{}**个'.format(otherStyleTime, len(pay_list))
if(len(pay_list) > 0):
@ -283,7 +279,7 @@ def generate_data():
# 亲密度排行榜 谁在意我
custom_print(u'分析好友亲密度数据-谁在意我...')
custom_print(u'正在分析好友亲密度数据-谁在意我...')
# content为markdown语法文本
content = '\n\n<br/><br/>\n' + '## 谁在意我\n'
data_list = bot.who_care_about_me()
@ -292,14 +288,15 @@ def generate_data():
n = len(data_list)
if (len(data_list) > 0):
content += '序号|头像|QQ|亲密度\n:- | :-| :-| :-\n'
content += '序号|头像|昵称|QQ|亲密度\n:- | :-| :-| :-\n'
for index, sub_data in enumerate(data_list[:n]):
uin = sub_data['uin']
score = sub_data['score']
name = sub_data['name']
profile = bot.get_profile_picture(uin, size=40)
with open('data/' + str(uin) + '.jpg', 'wb') as f:
f.write(profile)
content += '{}|![](data/{}.jpg)|{}|{}\n'.format(index, uin, uin, score)
content += '{}|![](data/{}.jpg)|{}|{}|{}\n'.format(index, uin, name, uin, score)
# 更新一下欲输出的markdown文本
markdown_content += content
@ -312,7 +309,7 @@ def generate_data():
# 亲密度排行榜 我在意谁
custom_print(u'分析好友亲密度数据-我在意谁...')
custom_print(u'正在分析好友亲密度数据-我在意谁...')
# content为markdown语法文本
content = '\n\n<br/><br/>\n' + '## 我在意谁\n'
data_list = bot.i_care_about_who()
@ -321,14 +318,15 @@ def generate_data():
n = len(data_list)
if (len(data_list) > 0):
content += '序号|头像|QQ|亲密度\n:- | :-| :-| :-\n'
content += '序号|头像|昵称|QQ|亲密度\n:- | :-| :-| :-\n'
for index, sub_data in enumerate(data_list[:n]):
uin = sub_data['uin']
score = sub_data['score']
name = sub_data['name']
profile = bot.get_profile_picture(uin, size=40)
with open('data/' + str(uin) + '.jpg', 'wb') as f:
f.write(profile)
content += '{}|![](data/{}.jpg)|{}|{}\n'.format(index, uin, uin, score)
content += '{}|![](data/{}.jpg)|{}|{}|{}\n'.format(index, uin, name, uin, score)
# 更新一下欲输出的markdown文本
markdown_content += content
@ -338,11 +336,12 @@ def generate_data():
# 每个步骤完成后保存markdown文件以便防止程序出错时能够保存到最新的数据
with open('{}的个人QQ历史报告.md'.format(bot.qq_number), 'w', encoding='utf-8') as file:
file.write(markdown_content)
custom_print(u'所有数据获取完毕, 并生成了一份报告文件:[{}的个人QQ历史报告.md], 该文件为markdown格式文件, 请下载typora软件以便查看该格式文件, 下载地址为https://typora.io/#windows'.format(bot.qq_number))
custom_print(u'所有数据获取完毕, 并在当前工作目录下生成了一份报告文件:[{}的个人QQ历史报告.md]'.format(bot.qq_number))
custom_print(u'该文件为markdown格式, 请下载typora软件以便查看该文件, 下载地址为https://typora.io/')
if __name__ == "__main__":

View File

@ -57,7 +57,7 @@ class Bot(object):
# 登录qun.qq.com
# 访问网页为了获取参数pt_login_sig
login_url = 'http://ui.ptlogin2.qq.com/cgi-bin/login?appid=549000912&s_url=http://qun.qq.com/member.html'
login_url='https://xui.ptlogin2.qq.com/cgi-bin/xlogin?pt_disable_pwd=1&appid=715030901&daid=73&hide_close_icon=1&pt_no_auth=1&s_url=https%3A%2F%2Fqun.qq.com%2Fmember.html%23'
html = get_html(login_url, '')
# 对返回的cookies进行转化为dict类型方便处理
cookies_back_dict = dict_from_cookiejar(html.cookies)
@ -65,7 +65,8 @@ class Bot(object):
self.cookies_merge_dict_in_qun_qq_com.update(cookies_back_dict)
# 访问网页为了获取参数ptqrtoken
qrcode_url = 'https://ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=4&d=72&v=4&t=0.39550762134604156'
#qrcode_url = 'https://ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=4&d=72&v=4&t=0.39550762134604156'
qrcode_url='https://ssl.ptlogin2.qq.com/ptqrshow?appid=715030901&e=2&l=M&s=3&d=72&v=4&t=0.055986512113441966&daid=73&pt_3rd_aid=0'
html = get_html(qrcode_url, '')
# 对返回的cookies进行转化为dict类型方便处理
cookies_back_dict = dict_from_cookiejar(html.cookies)
@ -81,13 +82,10 @@ class Bot(object):
image_label['image'] = image
# 实时检测二维码状态
while (True):
# 目标网址
target_url = 'http://ptlogin2.qq.com/ptqrlogin?u1=http://qun.qq.com/member.html&' + 'ptqrtoken=' + str(
ptqrtoken) + '&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-1499652067577&js_ver=10224&js_type=1&login_sig=' + str(
pt_login_sig) + '&pt_uistyle=40&aid=549000912&'
target_url ='https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqun.qq.com%2Fmember.html%23&ptqrtoken={}&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=1-5-1647508149682&js_ver=22030810&js_type=1&login_sig={}&pt_uistyle=40&aid=715030901&daid=73&ptdrvs=zE3Wcrd07f4ZnrPfNLLsdLfVh-6bEh5vNlgIR2dcTfep1pxoywDr2Yw03vvhZswWdGxT2OCdJkA_&sid=2353889993957767859&'.format(ptqrtoken, pt_login_sig)
# 登录需要带上访问cookies
html = get_html(target_url, self.cookies_merge_dict_in_qun_qq_com)
@ -119,21 +117,22 @@ class Bot(object):
self.qq_number = qq_list[0]
#print(html.text)
# 登录成功后会返回一个地址需要对该地址进行访问以便获取新的返回cookies
startIndex = (html.text).find('http')
startIndex = (html.text).find('https')
endIndex = (html.text).find('pt_3rd_aid=0')
url = (html.text)[startIndex:endIndex] + 'pt_3rd_aid=0'
# 这里需要注意的是需要禁止重定向才能正确获得返回的cookies
html = get(url, cookies=self.cookies_merge_dict_in_qun_qq_com, allow_redirects=False)
# 需要禁止重定向, allow_redirects=False
# 需要关闭SSL验证, verify=False
html = get(url, cookies = self.cookies_merge_dict_in_qun_qq_com, allow_redirects=False, verify=False)
# 把返回的cookies合并进去
cookies_back_dict = dict_from_cookiejar(html.cookies)
self.cookies_merge_dict_in_qun_qq_com.update(cookies_back_dict)
def login_qzone_qq_com(self):
# 登录qzone.qq.com
# 访问网页为了获取参数pt_login_sig
@ -306,7 +305,6 @@ class Bot(object):
submit_data = {'bkn': bkn}
html = post_html('https://qun.qq.com/cgi-bin/qun_mgr/get_group_list', self.cookies_merge_dict_in_qun_qq_com, submit_data)
group_info = loads(html.text)
print(group_info)
return group_info['join']
@ -326,14 +324,19 @@ class Bot(object):
def get_all_friends_in_qq(self):
'''
# 获取所有qq好友基本信息
# bkn由参数skey通过另一个加密函数得到
bkn = hash33_bkn(self.cookies_merge_dict_in_qun_qq_com['skey'])
submit_data = {'bkn': bkn}
html = post_html('https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list', self.cookies_merge_dict_in_qun_qq_com, submit_data)
friend_info = loads(html.text)
# print(friend_info)
return friend_info['result']
'''
# 获取所有好友列表接口已失效
return None
@ -662,16 +665,20 @@ class Bot(object):
# bkn由参数skey通过另一个加密函数得到
bkn = hash33_bkn(self.cookies_merge_dict_in_qzone_qq_com['p_skey'])
# 获取参数qzonetoken
urllib3.disable_warnings()
target_url = 'https://user.qzone.qq.com/' + self.qq_number
html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)
qzonetoken = re.findall(r'{ try{return "(.+?)";', html.text)
qzonetoken = qzonetoken[0]
# # 获取参数qzonetoken
# urllib3.disable_warnings()
# target_url = 'https://user.qzone.qq.com/' + self.qq_number
# print(target_url)
# html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)
# print(html.text)
# qzonetoken = re.findall(r'{ try{return "(.+?)";', html.text)
# qzonetoken = qzonetoken[0]
# 获取谁在意我数据
target_url = 'https://rc.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=' + self.qq_number + '&do=2&rd=0.32313768189269365&fupdate=1&clean=0&g_tk=' + str(bkn) + '&qzonetoken=' + str(qzonetoken) + '&g_tk=' + str(bkn)
#target_url = 'https://rc.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=' + self.qq_number + '&do=2&rd=0.32313768189269365&fupdate=1&clean=0&g_tk=' + str(bkn) + '&qzonetoken=' + str(qzonetoken) + '&g_tk=' + str(bkn)
target_url = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin={}&do=2&rd=0.6629930546880991&fupdate=1&clean=1&g_tk={}&g_tk={}'.format(self.qq_number, bkn, bkn)
urllib3.disable_warnings()
html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)
@ -692,16 +699,17 @@ class Bot(object):
# bkn由参数skey通过另一个加密函数得到
bkn = hash33_bkn(self.cookies_merge_dict_in_qzone_qq_com['p_skey'])
# 获取参数qzonetoken
urllib3.disable_warnings()
target_url = 'https://user.qzone.qq.com/' + self.qq_number
html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)
qzonetoken = re.findall(r'{ try{return "(.+?)";', html.text)
qzonetoken = qzonetoken[0]
# # 获取参数qzonetoken
# urllib3.disable_warnings()
# target_url = 'https://user.qzone.qq.com/' + self.qq_number
# html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)
# qzonetoken = re.findall(r'{ try{return "(.+?)";', html.text)
# qzonetoken = qzonetoken[0]
# 获取我在意谁数据
target_url = 'https://rc.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=' + self.qq_number + '&do=1&rd=0.9680629025032721&fupdate=1&clean=1&g_tk=' + str(bkn) + '&qzonetoken=' + str(qzonetoken) + '&g_tk=' + str(bkn)
#target_url = 'https://rc.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin=' + self.qq_number + '&do=1&rd=0.9680629025032721&fupdate=1&clean=1&g_tk=' + str(bkn) + '&qzonetoken=' + str(qzonetoken) + '&g_tk=' + str(bkn)
target_url = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?uin={}&do=1&rd=0.6629930546880991&fupdate=1&clean=1&g_tk={}&g_tk={}'.format(self.qq_number, bkn, bkn)
urllib3.disable_warnings()
html = get_html(target_url, self.cookies_merge_dict_in_qzone_qq_com)

View File

@ -12,14 +12,14 @@ def get_html(url,submit_cookies):
# 设置请求头,模拟人工
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
'Referer' : 'http://ui.ptlogin2.qq.com/cgi-bin/login?appid=549000912&s_url=http://qun.qq.com/member.html'
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
'Referer': 'http://ui.ptlogin2.qq.com/cgi-bin/login?appid=549000912&s_url=http://qun.qq.com/member.html'
}
# 屏蔽https证书警告
urllib3.disable_warnings()
# 网页访问,get方式
html = get(url, cookies = submit_cookies, headers=header, verify=False)
html = get(url, cookies=submit_cookies, headers=header, verify=False)
return html
@ -29,13 +29,13 @@ def post_html(url,submit_cookies,submit_data):
# 设置请求头,模拟人工
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36',
'Referer' : 'https://qun.qq.com/member.html'
}
# 屏蔽https证书警告
urllib3.disable_warnings()
# 网页访问,post方式
html = post(url, data=submit_data, cookies = submit_cookies, headers=header, verify=False)
html = post(url, data=submit_data, cookies=submit_cookies, headers=header, verify=False)
return html