python查看微信好友是否删除自己
本文实例为大家分享了python微信好友删除的具体代码,供大家参考,具体内容如下
#weixin.py
#coding:utf-8
#!/usr/bin/envpython
#coding=utf-8
#通过该程序可以发现被删除的好友
importos
importurllib,urllib2
importre
importcookielib
importtime
importxml.dom.minidom
importjson
importsys
importmath
DEBUG=False
MAX_GROUP_NUM=35#每组人数
QRImagePath=os.getcwd()+'/qrcode.jpg'
tip=0
uuid=''
base_uri=''
redirect_uri=''
skey=''
wxsid=''
wxuin=''
pass_ticket=''
deviceId='e000000000000000'
BaseRequest={}
ContactList=[]
My=[]
defgetUUID():
globaluuid
url='https://login.weixin.qq.com/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()
#printdata
#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':
returnTrue
returnFalse
defshowQRImage():
globaltip
url='https://login.weixin.qq.com/qrcode/'+uuid
params={
'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_uri
url='https://login.weixin.qq.com/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()
#printdata
#window.code=500;
regx=r'window.code=(\d+);'
pm=re.search(regx,data)
code=pm.group(1)
ifcode=='201':#已扫描
print'成功扫描,请在手机上点击确认以登录'
tip=0
elifcode=='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
#elifcode=='400'orcode=='500':
returncode
deflogin():
globalskey,wxsid,wxuin,pass_ticket,BaseRequest
request=urllib2.Request(url=redirect_uri)
response=urllib2.urlopen(request)
data=response.read()
#printdata
'''
<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.documentElement
fornodeinroot.childNodes:
ifnode.nodeName=='skey':
skey=node.childNodes[0].data
elifnode.nodeName=='wxsid':
wxsid=node.childNodes[0].data
elifnode.nodeName=='wxuin':
wxuin=node.childNodes[0].data
elifnode.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,
}
returnTrue
defwebwxinit():
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()
#printdata
globalContactList,My
dic=json.loads(data)
ContactList=dic['ContactList']
My=dic['User']
ErrMsg=dic['BaseResponse']['ErrMsg']
iflen(ErrMsg)>0:
printErrMsg
Ret=dic['BaseResponse']['Ret']
ifRet!=0:
returnFalse
returnTrue
defwebwxgetcontact():
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()
#printdata
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)
returnMemberList
defcreateChatroom(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()
#printdata
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:
printErrMsg
return(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()
#printdata
dic=json.loads(data)
ErrMsg=dic['BaseResponse']['ErrMsg']
iflen(ErrMsg)>0:
printErrMsg
Ret=dic['BaseResponse']['Ret']
ifRet!=0:
returnFalse
returnTrue
defaddMember(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()
#printdata
dic=json.loads(data)
MemberList=dic['MemberList']
DeletedList=[]
forMemberinMemberList:
ifMember['MemberStatus']==4:#被对方删除了
DeletedList.append(Member['UserName'])
ErrMsg=dic['BaseResponse']['ErrMsg']
iflen(ErrMsg)>0:
printErrMsg
returnDeletedList
defmain():
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
ifgetUUID()==False:
print'获取uuid失败'
return
showQRImage()
time.sleep(1)
whilewaitForLogin()!='200':
pass
os.remove(QRImagePath)
iflogin()==False:
print'登录失败'
return
ifwebwxinit()==False:
print'初始化失败'
return
MemberList=webwxgetcontact()
MemberCount=len(MemberList)
print'通讯录共%s位好友'%MemberCount
ChatRoomName=''
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:
break
Member=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+=DeletedList
print'找到%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=target
self.encoding='utf-8'
self.errors='replace'
self.encode_to=self.target.encoding
defwrite(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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。