smtplib_email邮件、itches微信和twilio短信

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))
# 输出每个列表的人数和成员

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

好友的搜索方法为 search_friends (搜索参数匹配)。获取自己的用户信息,返回自己的属性字典:

itchat.search_friends()

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

可以通过好友给自己起的昵称搜索,为了输出整齐些引入pprint模块:

import itchat
import pprint

itchat.auto_login(True)
pprint.pprint(itchat.search_friends(nickName='PythonABC'))
# 搜索昵称是’PythonABC’的好友

如果好友列表里没有昵称是PythonABC的好友,会输出一个空列表;如果有不止一位好友的昵称是PythonABC,那么都会把找到的每个好友信息(字典类型)作为一个元素放进列表里。

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

字典类型的好友信息里几个常用的键值如下,上段代码用到了昵称('NickName': 'PythonABC'):

[{ ……

  'NickName': 'PythonABC',

  ……

  'RemarkName': 'PythonABC马甲'

  ……

  'Sex': 0,

  ……

  'UserName': '@94dd130b7ba496d0385309dcf6426fefe5b5672f1912e8bfc1ecffca77933ed8',

  ……}]

前面那个统计好友里男性、女性和未指明性别的人数的代码里,用到了’Sex’的键值了。PythonABC的’Sex’键值为0,属于没填写性别的。‘Sex’键值为1返回男性,为2返回女性。

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

如果要通过给好友备注的名称搜索好友用备注名'RemarkName': 'PythonABC马甲'搜索:

friend = itchat.search_friends(remarkName='PythonABC马甲')

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

也可以通过用户名'UserName'查找好友:

friend = itchat.search_friends(userName='@94dd130b7ba496d0385309dcf6426fefe5b5672f1912e8bfc1ecffca77933ed8'

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

还有一种搜索参数name=,昵称nickname和备注名remarkname有一个符合要求就可以,比如好友PythonABC:

pprint.pprint(itchat.search_friends(name='PythonABC'))

pprint.pprint(itchat.search_friends(name='PythonABC马甲'))

都可以。

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

无论哪种搜索参数设定,判断是否满足条件对大小写是敏感的,PythonABC写成pythonabc是搜不到的。也要精确吻合,条件设定写成PythonABC是搜不到PythonABC0的。

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg
接下来给一个名单,若名单里的名字是微信好友就约着撸串,否则提示不在好友列表里:

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秒的间距

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

好友PythonABC收到了“今晚去不去撸串?”的微信,而python的运行窗口却出现了“内个,你确定你知道精灵王瑟兰迪尔的微信?翻遍了你的微信好友列表也找不到呀!”

http://pythonabc.org/images/pABCArticles/3.5.5.1.jpg

————————————————---------------------------------扯淡分割线------------------------------------------------------------------------

用一段题外话收尾哈:

前面有个统计男性女性好友个数用到了性别属性,itchat用的关键字是sex,让我想起来一段很糗的往事,说出来让你们乐一乐哈:


很久以前我跑去做义工,学名叫基层领袖(工作性质类似于咱天朝的居委会大妈)。

有天被分配个任务:打电话核实名单上的性别。我那时候英文比现在还烂,鼓起勇气拨电话,电话一接通紧张得不行,磕磕巴巴滴”May I speak XXXX……Hi I am calling from XX resident centre. May I know your ……your……“,天呐,难道是要问"your Sex“

……

逼得没办法我小声问了几个,对方几乎都没听明白,有个还说他要angry,吓得我赶紧把电话挂了。

后来怎么样记不清了,估计是交给别人做了,那时候脸皮薄(现在也张不开嘴,所以英文一直说不好),不知道应该问问其他人应该怎么问性别。现在提起性别,我统统用gender,咳咳咳