2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python--查看微信好友是否删除自己

python--查看微信好友是否删除自己

时间:2023-04-25 22:57:23

相关推荐

python--查看微信好友是否删除自己

#weixin.py#coding:utf-8# !/usr/bin/env python# coding=utf-8#通过该程序可以发现被删除的好友importosimporturllib, urllib2importreimportcookielibimporttimeimportxml.dom.minidomimportjsonimportsysimportmathDEBUG = FalseMAX_GROUP_NUM = 35 # 每组人数QRImagePath = os.getcwd() + '/qrcode.jpg'tip = 0uuid = ''base_uri = ''redirect_uri = ''skey = ''wxsid = ''wxuin = ''pass_ticket = ''deviceId = 'e000000000000000'BaseRequest = {}ContactList = []My = []defgetUUID():globaluuidurl = 'https://login./jslogin' params = {'appid': 'wx782c26e4c19acffb', 'fun': 'new', 'lang': 'zh_CN', '_': int(time.time()), }request = urllib2.Request(url=url, data=urllib.urlencode(params))response = urllib2.urlopen(request)data = response.read()# print data # window.QRLogin.code = 200; window.QRLogin.uuid = "oZwt_bFfRg=="; regx = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"' pm = re.search(regx, data)code = pm.group(1)uuid = pm.group(2)ifcode == '200':returnTruereturnFalsedefshowQRImage():globaltipurl = 'https://login./qrcode/' + uuidparams = {'t': 'webwx', '_': int(time.time()), }request = urllib2.Request(url=url, data=urllib.urlencode(params))response = urllib2.urlopen(request)tip = 1 f = open(QRImagePath, 'wb')f.write(response.read())f.close()ifsys.platform.find('darwin') >= 0:os.system('open %s' % QRImagePath)elifsys.platform.find('linux') >= 0:os.system('xdg-open %s' % QRImagePath)else:os.system('call %s' % QRImagePath)print'请使用微信扫描二维码以登录'defwaitForLogin():globaltip, base_uri, redirect_uriurl = 'https://login./cgi-bin/mmwebwx-bin/login?tip=%s&uuid=%s&_=%s' % (tip, uuid, int(time.time()))request = urllib2.Request(url=url)response = urllib2.urlopen(request)data = response.read()# print data # window.code=500; regx = r'window.code=(\d+);' pm = re.search(regx, data)code = pm.group(1)ifcode == '201': # 已扫描print'成功扫描,请在手机上点击确认以登录' tip = 0elifcode == '200': # 已登录print'正在登录...' regx = r'window.redirect_uri="(\S+?)";' pm = re.search(regx, data)redirect_uri = pm.group(1) + '&fun=new' base_uri = redirect_uri[:redirect_uri.rfind('/')]elifcode == '408': # 超时pass# elif code == '400' or code == '500':returncodedeflogin():globalskey, wxsid, wxuin, pass_ticket, BaseRequestrequest = urllib2.Request(url=redirect_uri)response = urllib2.urlopen(request)data = response.read()# print data '''<error> <ret>0</ret> <message>OK</message> <skey>xxx</skey> <wxsid>xxx</wxsid> <wxuin>xxx</wxuin> <pass_ticket>xxx</pass_ticket> <isgrayscale>1</isgrayscale></error> ''' doc = xml.dom.minidom.parseString(data)root = doc.documentElementfornodeinroot.childNodes:ifnode.nodeName == 'skey':skey = node.childNodes[0].dataelifnode.nodeName == 'wxsid':wxsid = node.childNodes[0].dataelifnode.nodeName == 'wxuin':wxuin = node.childNodes[0].dataelifnode.nodeName == 'pass_ticket':pass_ticket = node.childNodes[0].data# print 'skey: %s, wxsid: %s, wxuin: %s, pass_ticket: %s' % (skey, wxsid, wxuin, pass_ticket)ifskey == ''orwxsid == ''orwxuin == ''orpass_ticket == '':returnFalse BaseRequest = {'Uin': int(wxuin), 'Sid': wxsid, 'Skey': skey, 'DeviceID': deviceId, }returnTruedefwebwxinit():url = base_uri + '/webwxinit?pass_ticket=%s&skey=%s&r=%s' % (pass_ticket, skey, int(time.time()))params = {'BaseRequest': BaseRequest}request = urllib2.Request(url=url, data=json.dumps(params))request.add_header('ContentType', 'application/json; charset=UTF-8')response = urllib2.urlopen(request)data = response.read()ifDEBUG == True:f = open(os.getcwd() + '/webwxinit.json', 'wb')f.write(data)f.close()# print dataglobalContactList, Mydic = json.loads(data)ContactList = dic['ContactList']My = dic['User']ErrMsg = dic['BaseResponse']['ErrMsg']iflen(ErrMsg) > 0:printErrMsgRet = dic['BaseResponse']['Ret']ifRet != 0:returnFalsereturnTruedefwebwxgetcontact():url = base_uri + '/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s' % (pass_ticket, skey, int(time.time()))request = urllib2.Request(url=url)request.add_header('ContentType', 'application/json; charset=UTF-8')response = urllib2.urlopen(request)data = response.read()ifDEBUG == True:f = open(os.getcwd() + '/webwxgetcontact.json', 'wb')f.write(data)f.close()# print data dic = json.loads(data)MemberList = dic['MemberList']# 倒序遍历,不然删除的时候出问题.. SpecialUsers = ['newsapp', 'fmessage', 'filehelper', 'weibo', 'qqmail', 'fmessage', 'tmessage', 'qmessage','qqsync', 'floatbottle', 'lbsapp', 'shakeapp', 'medianote', 'qqfriend', 'readerapp', 'blogapp','facebookapp', 'masssendapp', 'meishiapp', 'feedsapp', 'voip', 'blogappweixin', 'weixin','brandsessionholder', 'weixinreminder', 'wxid_novlwrv3lqwv11', 'gh_22b87fa7cb3c','officialaccounts', 'notification_messages', 'wxid_novlwrv3lqwv11', 'gh_22b87fa7cb3c', 'wxitil','userexperience_alarm', 'notification_messages']foriinxrange(len(MemberList) - 1, -1, -1):Member = MemberList[i]ifMember['VerifyFlag'] & 8 != 0: # 公众号/服务号 MemberList.remove(Member)elifMember['UserName']inSpecialUsers: # 特殊账号 MemberList.remove(Member)elifMember['UserName'].find('@@') != -1: # 群聊 MemberList.remove(Member)elifMember['UserName'] == My['UserName']: # 自己 MemberList.remove(Member)returnMemberListdefcreateChatroom(UserNames):MemberList = []forUserNameinUserNames:MemberList.append({'UserName': UserName})url = base_uri + '/webwxcreatechatroom?pass_ticket=%s&r=%s' % (pass_ticket, int(time.time()))params = {'BaseRequest': BaseRequest, 'MemberCount': len(MemberList), 'MemberList': MemberList, 'Topic': '', }request = urllib2.Request(url=url, data=json.dumps(params))request.add_header('ContentType', 'application/json; charset=UTF-8')response = urllib2.urlopen(request)data = response.read()# print data dic = json.loads(data)ChatRoomName = dic['ChatRoomName']MemberList = dic['MemberList']DeletedList = []forMemberinMemberList:ifMember['MemberStatus'] == 4: # 被对方删除了 DeletedList.append(Member['UserName'])ErrMsg = dic['BaseResponse']['ErrMsg']iflen(ErrMsg) > 0:printErrMsgreturn(ChatRoomName, DeletedList)defdeleteMember(ChatRoomName, UserNames):url = base_uri + '/webwxupdatechatroom?fun=delmember&pass_ticket=%s' % (pass_ticket)params = {'BaseRequest': BaseRequest, 'ChatRoomName': ChatRoomName, 'DelMemberList': ','.join(UserNames), }request = urllib2.Request(url=url, data=json.dumps(params))request.add_header('ContentType', 'application/json; charset=UTF-8')response = urllib2.urlopen(request)data = response.read()# print data dic = json.loads(data)ErrMsg = dic['BaseResponse']['ErrMsg']iflen(ErrMsg) > 0:printErrMsgRet = dic['BaseResponse']['Ret']ifRet != 0:returnFalsereturnTruedefaddMember(ChatRoomName, UserNames):url = base_uri + '/webwxupdatechatroom?fun=addmember&pass_ticket=%s' % (pass_ticket)params = {'BaseRequest': BaseRequest, 'ChatRoomName': ChatRoomName, 'AddMemberList': ','.join(UserNames), }request = urllib2.Request(url=url, data=json.dumps(params))request.add_header('ContentType', 'application/json; charset=UTF-8')response = urllib2.urlopen(request)data = response.read()# print data dic = json.loads(data)MemberList = dic['MemberList']DeletedList = []forMemberinMemberList:ifMember['MemberStatus'] == 4: # 被对方删除了 DeletedList.append(Member['UserName'])ErrMsg = dic['BaseResponse']['ErrMsg']iflen(ErrMsg) > 0:printErrMsgreturnDeletedListdefmain():opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))urllib2.install_opener(opener)ifgetUUID() == False:print'获取uuid失败'returnshowQRImage()time.sleep(1)whilewaitForLogin() != '200':passos.remove(QRImagePath)iflogin() == False:print'登录失败'returnifwebwxinit() == False:print'初始化失败'returnMemberList = webwxgetcontact()MemberCount = len(MemberList)print'通讯录共%s位好友' % MemberCountChatRoomName = '' result = []foriinxrange(0, int(math.ceil(MemberCount / float(MAX_GROUP_NUM)))):UserNames = []NickNames = []DeletedList = ''forjinxrange(0, MAX_GROUP_NUM):ifi * MAX_GROUP_NUM + j >= MemberCount:breakMember = MemberList[i * MAX_GROUP_NUM + j]UserNames.append(Member['UserName'])NickNames.append(Member['NickName'].encode('utf-8'))print'第%s组...' % (i + 1)print', '.join(NickNames)print'回车键继续...' raw_input()# 新建群组/添加成员ifChatRoomName == '':(ChatRoomName, DeletedList) = createChatroom(UserNames)else:DeletedList = addMember(ChatRoomName, UserNames)DeletedCount = len(DeletedList)ifDeletedCount > 0:result += DeletedListprint'找到%s个被删好友' % DeletedCount# raw_input() # 删除成员 deleteMember(ChatRoomName, UserNames)#todo 删除群组 resultNames = []forMemberinMemberList:ifMember['UserName']inresult:NickName = Member['NickName']ifMember['RemarkName'] != '':NickName += '(%s)' % Member['RemarkName']resultNames.append(NickName.encode('utf-8'))print'---------- 被删除的好友列表 ----------'print'\n'.join(resultNames)print'-----------------------------------'# windows下编码问题修复classUnicodeStreamFilter:def__init__(self, target):self.target = targetself.encoding = 'utf-8' self.errors = 'replace' self.encode_to = self.target.encodingdefwrite(self, s):iftype(s) == str:s = s.decode('utf-8')s = s.encode(self.encode_to, self.errors).decode(self.encode_to)self.target.write(s)ifsys.stdout.encoding == 'cp936':sys.stdout = UnicodeStreamFilter(sys.stdout)if__name__ == '__main__':print'本程序的查询结果可能会引起一些心理上的不适,请小心使用...'print'回车键继续...' raw_input()main()print'回车键结束' raw_input()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。