itchat模块下的好友获取方法为 itchat.get_friends(update=True),返回完整的好友列表。其中每个好友为一个字典,列表的第一项为本人的账号信息,参数update=True可以更新好友列表并返回。
下面获取好友列表,根据性别进行分类:
import itchat
itchat.auto_login(True) # 扫码登录
female, male, other = [], [], []
# 初始化列表,一条语句替代了三条语句:female = []
# male = []
# other = []
friendList = itchat.get_friends(update=True)[1:]
# itchat.get_friends()获得微信好友列表,第一个成员(索引为0)是自己。[1:]是众好友
for friend in friendList: # 遍历好友列表
gender = friend["Sex"] # 取出微信好友的性别,放进变量gender里
if gender == 1: # gender值为1是男性
male.append(friend['DisplayName']or friend['NickName'])
# 将你自己给好友设置的备注名friend['DisplayName']或好友自己起的微信称呼friend['NickName']添加到男性朋友列表male中
elif gender == 2: # 女性,添加进列表female
female.append(friend['DisplayName']or friend['NickName'])
else: # 没标注性别的放进other列表
other.append(friend['DisplayName']or friend['NickName'])
print('男性朋友{}位,他们是:{}'.format(len(male), male))
print('女性朋友{}位,她们是:{}'.format(len(female), female))
print('没写性别朋友{}位:{}'.format(len(other), other))
# 输出每个列表的人数和成员
好友的搜索方法为 search_friends (搜索参数匹配)。获取自己的用户信息,返回自己的属性字典:
itchat.search_friends()
可以通过好友给自己起的昵称搜索,为了输出整齐些引入pprint模块:
import itchat
import pprint
itchat.auto_login(True)
pprint.pprint(itchat.search_friends(nickName='PythonABC'))
# 搜索昵称是’PythonABC’的好友
如果好友列表里没有昵称是PythonABC的好友,会输出一个空列表;如果有不止一位好友的昵称是PythonABC,那么都会把找到的每个好友信息(字典类型)作为一个元素放进列表里。
字典类型的好友信息里几个常用的键值如下,上段代码用到了昵称('NickName': 'PythonABC'):
[{ ……
'NickName': 'PythonABC',
……
'RemarkName': 'PythonABC马甲'
……
'Sex': 0,
……
'UserName': '@94dd130b7ba496d0385309dcf6426fefe5b5672f1912e8bfc1ecffca77933ed8',
……}]
前面那个统计好友里男性、女性和未指明性别的人数的代码里,用到了’Sex’的键值了。PythonABC的’Sex’键值为0,属于没填写性别的。‘Sex’键值为1返回男性,为2返回女性。
如果要通过给好友备注的名称搜索好友用备注名'RemarkName': 'PythonABC马甲'搜索:
friend = itchat.search_friends(remarkName='PythonABC马甲')
也可以通过用户名'UserName'查找好友:
friend = itchat.search_friends(userName='@94dd130b7ba496d0385309dcf6426fefe5b5672f1912e8bfc1ecffca77933ed8'
还有一种搜索参数name=,昵称nickname和备注名remarkname有一个符合要求就可以,比如好友PythonABC:
pprint.pprint(itchat.search_friends(name='PythonABC'))
和
pprint.pprint(itchat.search_friends(name='PythonABC马甲'))
都可以。
无论哪种搜索参数设定,判断是否满足条件对大小写是敏感的,PythonABC写成pythonabc是搜不到的。也要精确吻合,条件设定写成PythonABC是搜不到PythonABC0的。
接下来给一个名单,若名单里的名字是微信好友就约着撸串,否则提示不在好友列表里:
import itchat
import time
friendList = ['PythonABC', '精灵王瑟兰迪尔']
itchat.auto_login(True)
for nameS in friendList:
friend = itchat.search_friends(name = nameS )
# 搜索名字(昵称或备注名)为nameS的好友,放进friend列表。若没找到,列表为空
if friend: # 列表为空说明在微信好友里没找到指定名称
itchat.send_msg('今晚去不去撸串?', friend[0]['UserName'])
#
else:
print(’内个,你确定你知道’, nameS, '的微信?翻遍了你的微信好友列表也找不到')
time.sleep(.5) # 不敢同时群发防止被封号,两条信息之间有个0.5秒的间距
好友PythonABC收到了“今晚去不去撸串?”的微信,而python的运行窗口却出现了“内个,你确定你知道精灵王瑟兰迪尔的微信?翻遍了你的微信好友列表也找不到呀!”
————————————————---------------------------------扯淡分割线------------------------------------------------------------------------
用一段题外话收尾哈:
前面有个统计男性女性好友个数用到了性别属性,itchat用的关键字是sex,让我想起来一段很糗的往事,说出来让你们乐一乐哈:
很久以前我跑去做义工,学名叫基层领袖(工作性质类似于咱天朝的居委会大妈)。
有天被分配个任务:打电话核实名单上的性别。我那时候英文比现在还烂,鼓起勇气拨电话,电话一接通紧张得不行,磕磕巴巴滴”May I speak XXXX……Hi I am calling from XX resident centre. May I know your ……your……“,天呐,难道是要问"your Sex“
我……
逼得没办法我小声问了几个,对方几乎都没听明白,有个还说他要angry,吓得我赶紧把电话挂了。
后来怎么样记不清了,估计是交给别人做了,那时候脸皮薄(现在也张不开嘴,所以英文一直说不好),不知道应该问问其他人应该怎么问性别。现在提起性别,我统统用gender,咳咳咳