From 0d9850138f6cd2cacc30b00f9c7b0c2384e27c06 Mon Sep 17 00:00:00 2001 From: yjz <273638544@qq.com> Date: Tue, 28 Mar 2017 16:39:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=81=94=E7=B3=BB=E4=BA=BA=E5=88=97=E8=A1=A8=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E7=9B=AE=E5=89=8D=E8=B6=85=E8=BF=872000?= =?UTF-8?q?=E4=BA=BA=EF=BC=8C=E5=BE=AE=E4=BF=A1=E4=BC=9A=E6=8B=86=E5=88=86?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=81=94=E7=B3=BB=E4=BA=BA=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9gitignore=EF=BC=8C=E5=BF=BD=E7=95=A5temp=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + test.py | 1 - wxbot.py | 28 ++++++++++++++++++++-------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 0988619..6f7ac7e 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,4 @@ qr.png /*.jpg *.ini *.un~ +/temp diff --git a/test.py b/test.py index e89b4f1..184a0b3 100644 --- a/test.py +++ b/test.py @@ -22,7 +22,6 @@ def main(): bot = MyWXBot() bot.DEBUG = True bot.conf['qr'] = 'png' - bot.is_big_contact = False #如果确定通讯录过大,无法获取,可以直接配置,跳过检查。假如不是过大的话,这个方法可能无法获取所有的联系人 bot.run() diff --git a/wxbot.py b/wxbot.py index fadaed1..d5f1493 100644 --- a/wxbot.py +++ b/wxbot.py @@ -153,23 +153,35 @@ class WXBot: def get_contact(self): """获取当前账户的所有相关账号(包括联系人、公众号、群聊、特殊账号)""" - if self.is_big_contact: - return False - url = self.base_uri + '/webwxgetcontact?pass_ticket=%s&skey=%s&r=%s' \ + dic_list = [] + url = self.base_uri + '/webwxgetcontact?seq=0&pass_ticket=%s&skey=%s&r=%s' \ % (self.pass_ticket, self.skey, int(time.time())) #如果通讯录联系人过多,这里会直接获取失败 try: - r = self.session.post(url, data='{}') + r = self.session.post(url, data='{}', timeout=180) except Exception as e: - self.is_big_contact = True return False r.encoding = 'utf-8' + dic = json.loads(r.text) + dic_list.append(dic) + + while int(dic["Seq"]) != 0: + print "[INFO] Geting contacts. Get %s contacts for now" % dic["MemberCount"] + url = self.base_uri + '/webwxgetcontact?seq=%s&pass_ticket=%s&skey=%s&r=%s' \ + % (dic["Seq"], self.pass_ticket, self.skey, int(time.time())) + r = self.session.post(url, data='{}', timeout=180) + r.encoding = 'utf-8' + dic = json.loads(r.text) + dic_list.append(dic) + if self.DEBUG: with open(os.path.join(self.temp_pwd,'contacts.json'), 'w') as f: - f.write(r.text.encode('utf-8')) - dic = json.loads(r.text) - self.member_list = dic['MemberList'] + f.write(json.dumps(dic_list)) + + self.member_list = [] + for dic in dic_list: + self.member_list.extend(dic['MemberList']) special_users = ['newsapp', 'fmessage', 'filehelper', 'weibo', 'qqmail', 'fmessage', 'tmessage', 'qmessage', 'qqsync', 'floatbottle', From c5e1efa57bc47dc24b28177b9c26ca0fcea15794 Mon Sep 17 00:00:00 2001 From: yjz <273638544@qq.com> Date: Tue, 28 Mar 2017 17:01:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=B0=83=E7=94=A8get=5Fbig=5Fcontact=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=96=B0=E7=9A=84=E5=88=86=E6=89=B9=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=81=94=E7=B3=BB=E4=BA=BA=E7=9A=84=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E8=8E=B7=E5=8F=96=E8=B6=85=E8=BF=872000=E8=81=94?= =?UTF-8?q?=E7=B3=BB=E4=BA=BA=E7=9A=84=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wxbot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wxbot.py b/wxbot.py index d5f1493..7e38ce5 100644 --- a/wxbot.py +++ b/wxbot.py @@ -710,7 +710,7 @@ class WXBot: with open(os.path.join(self.temp_pwd,'wxid.txt'), 'w') as f: f.write(json.dumps(self.wxid_list)) print "[INFO] Contact list is too big. Now start to fetch member list ." - self.get_big_contact() + #self.get_big_contact() elif msg['MsgType'] == 37: # friend request msg_type_id = 37