前言:接着上篇登录学习,在itchat扫码登录以后,个人觉得以后不论是统计数据、自动回复、机器人等操作的基础就是联系人信息的检索,本篇就从联系人的搜索开始学习
1、通讯录的获取
上篇登录中讲到,登录以后会调用到get_contact()
函数
如下代码:components/login.py/login
def login(self, enableCmdQR=False, picDir=None, qrCallback=None,
loginCallback=None, exitCallback=None):
...
#就是这里,登录以后,自动获取通讯录联系人(包括保存到通讯录的群聊、公众号)
self.get_contact(True)
...
找到get_contact
方法的实现位置是在components/contact.py/get_contact
先贴出源码
def get_contact(self, update=False):
if not update:
return utils.contact_deep_copy(self, self.chatroomList)
def _get_contact(seq=0):
url = '%s/webwxgetcontact?r=%s&seq=%s&skey=%s' % (self.loginInfo['url'],
int(time.time()), seq, self.loginInfo['skey'])
headers = {
'ContentType': 'application/json; charset=UTF-8',
'User-Agent' : config.USER_AGENT, }
try:
r = self.s.get(url, headers=headers)
except:
logger.info('Failed to fetch contact, that may because of the amount of your chatrooms')
for chatroom in self.get_chatrooms():
self.update_chatroom(chatroom['UserName'], detailedMember=True)
return 0, []
j = json.loads(r.content.decode('utf-8', 'replace'))
return j.get('Seq', 0), j.get('MemberList')
seq, memberList = 0, []
while 1:
seq, batchMemberList = _get_contact(seq)
memberList.extend(batchMemberList)
if seq == 0:
break
chatroomList, otherList = [