From 52699bbd017ffd8a1fa8117e0da2e013978ff7bb Mon Sep 17 00:00:00 2001 From: Haskely Date: Mon, 20 Feb 2017 23:52:03 +0800 Subject: [PATCH 1/4] Python-3 transfer to Python-3 --- weixin.py | 168 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 86 insertions(+), 82 deletions(-) diff --git a/weixin.py b/weixin.py index 0271547..f4cc353 100755 --- a/weixin.py +++ b/weixin.py @@ -1,9 +1,9 @@ #!/usr/bin/env python # coding: utf-8 import qrcode -import urllib -import urllib2 -import cookielib +import urllib.request, urllib.parse, urllib.error +import urllib.request, urllib.error, urllib.parse +import http.cookiejar import requests import xml.dom.minidom import json @@ -16,9 +16,9 @@ import random import multiprocessing import platform import logging -import httplib +import http.client from collections import defaultdict -from urlparse import urlparse +from urllib.parse import urlparse from lxml import html #import pdb @@ -32,7 +32,7 @@ def catchKeyboardInterrupt(fn): try: return fn(*args) except KeyboardInterrupt: - print '\n[*] 强制退出程序' + print('\n[*] 强制退出程序') logging.debug('[*] 强制退出程序') return wrapper @@ -40,7 +40,7 @@ def catchKeyboardInterrupt(fn): def _decode_list(data): rv = [] for item in data: - if isinstance(item, unicode): + if isinstance(item, str): item = item.encode('utf-8') elif isinstance(item, list): item = _decode_list(item) @@ -52,10 +52,10 @@ def _decode_list(data): def _decode_dict(data): rv = {} - for key, value in data.iteritems(): - if isinstance(key, unicode): + for key, value in data.items(): + if isinstance(key, str): key = key.encode('utf-8') - if isinstance(value, unicode): + if isinstance(value, str): value = value.encode('utf-8') elif isinstance(value, list): value = _decode_list(value) @@ -118,10 +118,10 @@ class WebWeixin(object): self.TimeOut = 20 # 同步最短时间间隔(单位:秒) self.media_count = -1 - self.cookie = cookielib.CookieJar() - opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie)) + self.cookie = http.cookiejar.CookieJar() + opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cookie)) opener.addheaders = [('User-agent', self.user_agent)] - urllib2.install_opener(opener) + urllib.request.install_opener(opener) def loadConfig(self, config): if config['DEBUG']: @@ -281,7 +281,7 @@ class WebWeixin(object): PublicUsersList = self.PublicUsersList[:] SpecialUsersList = self.SpecialUsersList[:] - for i in xrange(len(ContactList) - 1, -1, -1): + for i in range(len(ContactList) - 1, -1, -1): Contact = ContactList[i] if Contact['VerifyFlag'] & 8 != 0: # 公众号/服务号 ContactList.remove(Contact) @@ -316,7 +316,7 @@ class WebWeixin(object): ContactCount = dic['Count'] self.GroupList = ContactList - for i in xrange(len(ContactList) - 1, -1, -1): + for i in range(len(ContactList) - 1, -1, -1): Contact = ContactList[i] MemberList = Contact['MemberList'] for member in MemberList: @@ -368,7 +368,7 @@ class WebWeixin(object): '_': int(time.time()), } url = 'https://' + self.syncHost + \ - '/cgi-bin/mmwebwx-bin/synccheck?' + urllib.urlencode(params) + '/cgi-bin/mmwebwx-bin/synccheck?' + urllib.parse.urlencode(params) data = self._get(url) if data == '': return [-1,-1] @@ -391,7 +391,7 @@ class WebWeixin(object): if dic == '': return None if self.DEBUG: - print json.dumps(dic, indent=4) + print(json.dumps(dic, indent=4)) (json.dumps(dic, indent=4)) if dic['BaseResponse']['Ret'] == 0: @@ -539,7 +539,7 @@ class WebWeixin(object): r = requests.post(url, data=data, headers=headers) dic = r.json() if self.DEBUG: - print json.dumps(dic, indent=4) + print(json.dumps(dic, indent=4)) logging.debug(json.dumps(dic, indent=4)) return dic['BaseResponse']['Ret'] == 0 @@ -722,28 +722,28 @@ class WebWeixin(object): msg['message'] = content # 指定了消息内容 - if 'message' in msg.keys(): + if 'message' in list(msg.keys()): content = msg['message'] if groupName != None: - print '%s |%s| %s -> %s: %s' % (message_id, groupName.strip(), srcName.strip(), dstName.strip(), content.replace('
', '\n')) + print('%s |%s| %s -> %s: %s' % (message_id, groupName.strip(), srcName.strip(), dstName.strip(), content.replace('
', '\n'))) logging.info('%s |%s| %s -> %s: %s' % (message_id, groupName.strip(), srcName.strip(), dstName.strip(), content.replace('
', '\n'))) else: - print '%s %s -> %s: %s' % (message_id, srcName.strip(), dstName.strip(), content.replace('
', '\n')) + print('%s %s -> %s: %s' % (message_id, srcName.strip(), dstName.strip(), content.replace('
', '\n'))) logging.info('%s %s -> %s: %s' % (message_id, srcName.strip(), dstName.strip(), content.replace('
', '\n'))) def handleMsg(self, r): for msg in r['AddMsgList']: - print '[*] 你有新的消息,请注意查收' + print('[*] 你有新的消息,请注意查收') logging.debug('[*] 你有新的消息,请注意查收') if self.DEBUG: fn = 'msg' + str(int(random.random() * 1000)) + '.json' with open(fn, 'w') as f: f.write(json.dumps(msg)) - print '[*] 该消息已储存到文件: ' + fn + print('[*] 该消息已储存到文件: ' + fn) logging.debug('[*] 该消息已储存到文件: %s' % (fn)) msgType = msg['MsgType'] @@ -754,13 +754,17 @@ class WebWeixin(object): if msgType == 1: raw_msg = {'raw_msg': msg} self._showMsg(raw_msg) +#自己加的代码-------------------------------------------# + #if self.autoReplyRevokeMode: + # store +#自己加的代码-------------------------------------------# if self.autoReplyMode: ans = self._xiaodoubi(content) + '\n[微信机器人自动回复]' if self.webwxsendmsg(ans, msg['FromUserName']): - print '自动回复: ' + ans + print('自动回复: ' + ans) logging.info('自动回复: ' + ans) else: - print '自动回复失败' + print('自动回复失败') logging.info('自动回复失败') elif msgType == 3: image = self.webwxgetmsgimg(msgid) @@ -776,13 +780,13 @@ class WebWeixin(object): self._safe_open(voice) elif msgType == 42: info = msg['RecommendInfo'] - print '%s 发送了一张名片:' % name - print '=========================' - print '= 昵称: %s' % info['NickName'] - print '= 微信号: %s' % info['Alias'] - print '= 地区: %s %s' % (info['Province'], info['City']) - print '= 性别: %s' % ['未知', '男', '女'][info['Sex']] - print '=========================' + print('%s 发送了一张名片:' % name) + print('=========================') + print('= 昵称: %s' % info['NickName']) + print('= 微信号: %s' % info['Alias']) + print('= 地区: %s %s' % (info['Province'], info['City'])) + print('= 性别: %s' % ['未知', '男', '女'][info['Sex']]) + print('=========================') raw_msg = {'raw_msg': msg, 'message': '%s 发送了一张名片: %s' % ( name.strip(), json.dumps(info))} self._showMsg(raw_msg) @@ -795,13 +799,13 @@ class WebWeixin(object): elif msgType == 49: appMsgType = defaultdict(lambda: "") appMsgType.update({5: '链接', 3: '音乐', 7: '微博'}) - print '%s 分享了一个%s:' % (name, appMsgType[msg['AppMsgType']]) - print '=========================' - print '= 标题: %s' % msg['FileName'] - print '= 描述: %s' % self._searchContent('des', content, 'xml') - print '= 链接: %s' % msg['Url'] - print '= 来自: %s' % self._searchContent('appname', content, 'xml') - print '=========================' + print('%s 分享了一个%s:' % (name, appMsgType[msg['AppMsgType']])) + print('=========================') + print('= 标题: %s' % msg['FileName']) + print('= 描述: %s' % self._searchContent('des', content, 'xml')) + print('= 链接: %s' % msg['Url']) + print('= 来自: %s' % self._searchContent('appname', content, 'xml')) + print('=========================') card = { 'title': msg['FileName'], 'description': self._searchContent('des', content, 'xml'), @@ -831,7 +835,7 @@ class WebWeixin(object): self._showMsg(raw_msg) def listenMsgMode(self): - print '[*] 进入消息监听模式 ... 成功' + print('[*] 进入消息监听模式 ... 成功') logging.debug('[*] 进入消息监听模式 ... 成功') self._run('[*] 进行同步线路测试 ... ', self.testsynccheck) playWeChat = 0 @@ -840,14 +844,14 @@ class WebWeixin(object): self.lastCheckTs = time.time() [retcode, selector] = self.synccheck() if self.DEBUG: - print 'retcode: %s, selector: %s' % (retcode, selector) + print('retcode: %s, selector: %s' % (retcode, selector)) logging.debug('retcode: %s, selector: %s' % (retcode, selector)) if retcode == '1100': - print '[*] 你在手机上登出了微信,债见' + print('[*] 你在手机上登出了微信,债见') logging.debug('[*] 你在手机上登出了微信,债见') break if retcode == '1101': - print '[*] 你在其他地方登录了 WEB 版微信,债见' + print('[*] 你在其他地方登录了 WEB 版微信,债见') logging.debug('[*] 你在其他地方登录了 WEB 版微信,债见') break elif retcode == '0': @@ -858,11 +862,11 @@ class WebWeixin(object): elif selector == '6': # TODO redEnvelope += 1 - print '[*] 收到疑似红包消息 %d 次' % redEnvelope + print('[*] 收到疑似红包消息 %d 次' % redEnvelope) logging.debug('[*] 收到疑似红包消息 %d 次' % redEnvelope) elif selector == '7': playWeChat += 1 - print '[*] 你在手机上玩微信被我发现了 %d 次' % playWeChat + print('[*] 你在手机上玩微信被我发现了 %d 次' % playWeChat) logging.debug('[*] 你在手机上玩微信被我发现了 %d 次' % playWeChat) r = self.webwxsync() elif selector == '0': @@ -879,19 +883,19 @@ class WebWeixin(object): line = line.replace('\n', '') self._echo('-> ' + name + ': ' + line) if self.webwxsendmsg(line, id): - print ' [成功]' + print(' [成功]') else: - print ' [失败]' + print(' [失败]') time.sleep(1) else: if self.webwxsendmsg(word, id): - print '[*] 消息发送成功' + print('[*] 消息发送成功') logging.debug('[*] 消息发送成功') else: - print '[*] 消息发送失败' + print('[*] 消息发送失败') logging.debug('[*] 消息发送失败') else: - print '[*] 此用户不存在' + print('[*] 此用户不存在') logging.debug('[*] 此用户不存在') def sendMsgToAll(self, word): @@ -901,9 +905,9 @@ class WebWeixin(object): id = contact['UserName'] self._echo('-> ' + name + ': ' + word) if self.webwxsendmsg(word, id): - print ' [成功]' + print(' [成功]') else: - print ' [失败]' + print(' [失败]') time.sleep(1) def sendImg(self, name, file_name): @@ -925,18 +929,18 @@ class WebWeixin(object): @catchKeyboardInterrupt def start(self): self._echo('[*] 微信网页版 ... 开动') - print + print() logging.debug('[*] 微信网页版 ... 开动') while True: self._run('[*] 正在获取 uuid ... ', self.getUUID) self._echo('[*] 正在获取二维码 ... 成功') - print + print() logging.debug('[*] 微信网页版 ... 开动') self.genQRCode() - print '[*] 请使用微信扫描二维码以登录 ... ' + print('[*] 请使用微信扫描二维码以登录 ... ') if not self.waitForLogin(): continue - print '[*] 请在手机上点击确认以登录 ... ' + print('[*] 请在手机上点击确认以登录 ... ') if not self.waitForLogin(0): continue break @@ -947,33 +951,33 @@ class WebWeixin(object): self._run('[*] 获取联系人 ... ', self.webwxgetcontact) self._echo('[*] 应有 %s 个联系人,读取到联系人 %d 个' % (self.MemberCount, len(self.MemberList))) - print + print() self._echo('[*] 共有 %d 个群 | %d 个直接联系人 | %d 个特殊账号 | %d 公众号或服务号' % (len(self.GroupList), len(self.ContactList), len(self.SpecialUsersList), len(self.PublicUsersList))) - print + print() self._run('[*] 获取群 ... ', self.webwxbatchgetcontact) logging.debug('[*] 微信网页版 ... 开动') if self.DEBUG: - print self + print(self) logging.debug(self) - if self.interactive and raw_input('[*] 是否开启自动回复模式(y/n): ') == 'y': + if self.interactive and input('[*] 是否开启自动回复模式(y/n): ') == 'y': self.autoReplyMode = True - print '[*] 自动回复模式 ... 开启' + print('[*] 自动回复模式 ... 开启') logging.debug('[*] 自动回复模式 ... 开启') else: - print '[*] 自动回复模式 ... 关闭' + print('[*] 自动回复模式 ... 关闭') logging.debug('[*] 自动回复模式 ... 关闭') if sys.platform.startswith('win'): - import thread - thread.start_new_thread(self.listenMsgMode()) + import _thread + _thread.start_new_thread(self.listenMsgMode()) else: listenProcess = multiprocessing.Process(target=self.listenMsgMode) listenProcess.start() while True: - text = raw_input('') + text = input('') if text == 'quit': listenProcess.terminate() print('[*] 退出微信') @@ -989,15 +993,15 @@ class WebWeixin(object): [name, file] = text[3:].split(':') self.sendMsg(name, file, True) elif text[:3] == 'f->': - print '发送文件' + print('发送文件') logging.debug('发送文件') elif text[:3] == 'i->': - print '发送图片' + print('发送图片') [name, file_name] = text[3:].split(':') self.sendImg(name, file_name) logging.debug('发送图片') elif text[:3] == 'e->': - print '发送表情' + print('发送表情') [name, file_name] = text[3:].split(':') self.sendEmotion(name, file_name) logging.debug('发送表情') @@ -1012,7 +1016,7 @@ class WebWeixin(object): def _run(self, str, func, *args): self._echo(str) if func(*args): - print '成功' + print('成功') logging.debug('%s... 成功' % (str)) else: print('失败\n[*] 退出程序') @@ -1028,7 +1032,7 @@ class WebWeixin(object): for i in mat: BLACK = '\033[40m \033[0m' WHITE = '\033[47m \033[0m' - print ''.join([BLACK if j else WHITE for j in i]) + print(''.join([BLACK if j else WHITE for j in i])) def _str2qr(self, str): print(str) @@ -1046,29 +1050,29 @@ class WebWeixin(object): if not data: return data result = None - if type(data) == unicode: + if type(data) == str: result = data elif type(data) == str: result = data.decode('utf-8') return result def _get(self, url, api=None): - request = urllib2.Request(url=url) + request = urllib.request.Request(url=url) request.add_header('Referer', 'https://wx.qq.com/') if api == 'webwxgetvoice': request.add_header('Range', 'bytes=0-') if api == 'webwxgetvideo': request.add_header('Range', 'bytes=0-') try: - response = urllib2.urlopen(request) + response = urllib.request.urlopen(request) data = response.read() logging.debug(url) return data - except urllib2.HTTPError, e: + except urllib.error.HTTPError as e: logging.error('HTTPError = ' + str(e.code)) - except urllib2.URLError, e: + except urllib.error.URLError as e: logging.error('URLError = ' + str(e.reason)) - except httplib.HTTPException, e: + except http.client.HTTPException as e: logging.error('HTTPException') except Exception: import traceback @@ -1077,24 +1081,24 @@ class WebWeixin(object): def _post(self, url, params, jsonfmt=True): if jsonfmt: - request = urllib2.Request(url=url, data=json.dumps(params)) + request = urllib.request.Request(url=url, data=json.dumps(params)) request.add_header( 'ContentType', 'application/json; charset=UTF-8') else: - request = urllib2.Request(url=url, data=urllib.urlencode(params)) + request = urllib.request.Request(url=url, data=urllib.parse.urlencode(params)) try: - response = urllib2.urlopen(request) + response = urllib.request.urlopen(request) data = response.read() if jsonfmt: return json.loads(data, object_hook=_decode_dict) return data - except urllib2.HTTPError, e: + except urllib.error.HTTPError as e: logging.error('HTTPError = ' + str(e.code)) - except urllib2.URLError, e: + except urllib.error.URLError as e: logging.error('URLError = ' + str(e.reason)) - except httplib.HTTPException, e: + except http.client.HTTPException as e: logging.error('HTTPException') except Exception: import traceback From 03db42d4352b0bbc14f952f721398f4270e51a11 Mon Sep 17 00:00:00 2001 From: Haskely Date: Tue, 21 Feb 2017 03:07:56 +0800 Subject: [PATCH 2/4] Transfer it to Python3 manually MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Really tedious! --- saved/qrcodes/qrcode.jpg | Bin 0 -> 42241 bytes weixin.py | 108 +++++++++++++++++++++------------------ 2 files changed, 59 insertions(+), 49 deletions(-) create mode 100644 saved/qrcodes/qrcode.jpg diff --git a/saved/qrcodes/qrcode.jpg b/saved/qrcodes/qrcode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..862fd9d23fa8900d39ae622571bbc2998100a284 GIT binary patch literal 42241 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 D(IFG7 literal 0 HcmV?d00001 diff --git a/weixin.py b/weixin.py index f4cc353..2ed25d9 100755 --- a/weixin.py +++ b/weixin.py @@ -143,7 +143,10 @@ class WebWeixin(object): 'lang': self.lang, '_': int(time.time()), } - data = self._post(url, params, False) + #r = requests.get(url=url, params=params) + #r.encoding = 'utf-8' + #data = r.text + data = self._post(url, params, False).decode("utf-8") if data == '': return False regx = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)"' @@ -163,7 +166,7 @@ class WebWeixin(object): else: self._str2qr('https://login.weixin.qq.com/l/' + self.uuid) - def _showQRCodeImg(self, os): + def _showQRCodeImg(self, str): url = 'https://login.weixin.qq.com/qrcode/' + self.uuid params = { 't': 'webwx', @@ -174,9 +177,9 @@ class WebWeixin(object): if data == '': return QRCODE_PATH = self._saveFile('qrcode.jpg', data, '_showQRCodeImg') - if os == 'win': + if str == 'win': os.startfile(QRCODE_PATH) - elif os == 'macos': + elif str == 'macos': subprocess.call(["open", QRCODE_PATH]) else: return @@ -188,7 +191,7 @@ class WebWeixin(object): data = self._get(url) if data == '': return False - pm = re.search(r'window.code=(\d+);', data) + pm = re.search(r"window.code=(\d+);", data) code = pm.group(1) if code == '201': @@ -242,13 +245,13 @@ class WebWeixin(object): dic = self._post(url, params) if dic == '': return False - self.SyncKey = dic['SyncKey'] - self.User = dic['User'] + self.SyncKey = dic[b'SyncKey'] + self.User = dic[b'User'] # synckey for synccheck self.synckey = '|'.join( - [str(keyVal['Key']) + '_' + str(keyVal['Val']) for keyVal in self.SyncKey['List']]) + [str(keyVal[b'Key']) + '_' + str(keyVal[b'Val']) for keyVal in self.SyncKey[b'List']]) - return dic['BaseResponse']['Ret'] == 0 + return dic[b'BaseResponse'][b'Ret'] == 0 def webwxstatusnotify(self): url = self.base_uri + \ @@ -256,15 +259,15 @@ class WebWeixin(object): params = { 'BaseRequest': self.BaseRequest, "Code": 3, - "FromUserName": self.User['UserName'], - "ToUserName": self.User['UserName'], + "FromUserName": self.User[b'UserName'].decode(), + "ToUserName": self.User[b'UserName'].decode(), "ClientMsgId": int(time.time()) } dic = self._post(url, params) if dic == '': return False - return dic['BaseResponse']['Ret'] == 0 + return dic[b'BaseResponse'][b'Ret'] == 0 def webwxgetcontact(self): SpecialUsers = self.SpecialUsers @@ -274,8 +277,8 @@ class WebWeixin(object): if dic == '': return False - self.MemberCount = dic['MemberCount'] - self.MemberList = dic['MemberList'] + self.MemberCount = dic[b'MemberCount'] + self.MemberList = dic[b'MemberList'] ContactList = self.MemberList[:] GroupList = self.GroupList[:] PublicUsersList = self.PublicUsersList[:] @@ -283,16 +286,16 @@ class WebWeixin(object): for i in range(len(ContactList) - 1, -1, -1): Contact = ContactList[i] - if Contact['VerifyFlag'] & 8 != 0: # 公众号/服务号 + if Contact[b'VerifyFlag'] & 8 != 0: # 公众号/服务号 ContactList.remove(Contact) self.PublicUsersList.append(Contact) - elif Contact['UserName'] in SpecialUsers: # 特殊账号 + elif Contact[b'UserName'].decode() in SpecialUsers: # 特殊账号 ContactList.remove(Contact) self.SpecialUsersList.append(Contact) - elif '@@' in Contact['UserName']: # 群聊 + elif '@@' in Contact[b'UserName'].decode(): # 群聊 ContactList.remove(Contact) self.GroupList.append(Contact) - elif Contact['UserName'] == self.User['UserName']: # 自己 + elif Contact[b'UserName'] == self.User[b'UserName']: # 自己 ContactList.remove(Contact) self.ContactList = ContactList @@ -302,23 +305,28 @@ class WebWeixin(object): url = self.base_uri + \ '/webwxbatchgetcontact?type=ex&r=%s&pass_ticket=%s' % ( int(time.time()), self.pass_ticket) + List=[{"UserName": g[b'UserName'], "EncryChatRoomId":""} for g in self.GroupList] + for x in List: + x['UserName']=x['UserName'].decode() + + print(1) params = { 'BaseRequest': self.BaseRequest, "Count": len(self.GroupList), - "List": [{"UserName": g['UserName'], "EncryChatRoomId":""} for g in self.GroupList] + "List": List } dic = self._post(url, params) if dic == '': return False # blabla ... - ContactList = dic['ContactList'] - ContactCount = dic['Count'] + ContactList = dic[b'ContactList'] + ContactCount = dic[b'Count'] self.GroupList = ContactList for i in range(len(ContactList) - 1, -1, -1): Contact = ContactList[i] - MemberList = Contact['MemberList'] + MemberList = Contact[b'MemberList'] for member in MemberList: self.GroupMemeberList.append(member) return True @@ -337,18 +345,18 @@ class WebWeixin(object): return None # blabla ... - return dic['ContactList'] + return dic[b'ContactList'].decode() def testsynccheck(self): SyncHost = [ 'webpush.weixin.qq.com', - #'webpush2.weixin.qq.com', + 'webpush2.weixin.qq.com', 'webpush.wechat.com', 'webpush1.wechat.com', 'webpush2.wechat.com', 'webpush.wx.qq.com', 'webpush2.wx.qq.com' - # 'webpush.wechatapp.com' + 'webpush.wechatapp.com' ] for host in SyncHost: self.syncHost = host @@ -367,11 +375,11 @@ class WebWeixin(object): 'synckey': self.synckey, '_': int(time.time()), } - url = 'https://' + self.syncHost + \ - '/cgi-bin/mmwebwx-bin/synccheck?' + urllib.parse.urlencode(params) + url = 'https://' + self.syncHost + '/cgi-bin/mmwebwx-bin/synccheck?' + urllib.parse.urlencode(params) data = self._get(url) if data == '': return [-1,-1] + pm = re.search( r'window.synccheck={retcode:"(\d+)",selector:"(\d+)"}', data) retcode = pm.group(1) @@ -394,8 +402,8 @@ class WebWeixin(object): print(json.dumps(dic, indent=4)) (json.dumps(dic, indent=4)) - if dic['BaseResponse']['Ret'] == 0: - self.SyncKey = dic['SyncKey'] + if dic[b'BaseResponse'][b'Ret'] == 0: + self.SyncKey = dic[b'SyncKey'].decode() self.synckey = '|'.join( [str(keyVal['Key']) + '_' + str(keyVal['Val']) for keyVal in self.SyncKey['List']]) return dic @@ -420,7 +428,7 @@ class WebWeixin(object): data = json.dumps(params, ensure_ascii=False).encode('utf8') r = requests.post(url, data=data, headers=headers) dic = r.json() - return dic['BaseResponse']['Ret'] == 0 + return dic[b'BaseResponse'][b'Ret'] == 0 def webwxuploadmedia(self, image_name): url = 'https://file2.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json' @@ -516,7 +524,7 @@ class WebWeixin(object): data = json.dumps(data_json, ensure_ascii=False).encode('utf8') r = requests.post(url, data=data, headers=headers) dic = r.json() - return dic['BaseResponse']['Ret'] == 0 + return dic[b'BaseResponse'][b'Ret'] == 0 def webwxsendmsgemotion(self, user_id, media_id): url = 'https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendemoticon?fun=sys&f=json&pass_ticket=%s' % self.pass_ticket @@ -541,7 +549,7 @@ class WebWeixin(object): if self.DEBUG: print(json.dumps(dic, indent=4)) logging.debug(json.dumps(dic, indent=4)) - return dic['BaseResponse']['Ret'] == 0 + return dic[b'BaseResponse'][b'Ret'] == 0 def _saveFile(self, filename, data, api=None): fn = filename @@ -642,14 +650,14 @@ class WebWeixin(object): # 直接联系人 for member in self.ContactList: - if member['UserName'] == id: - name = member['RemarkName'] if member[ - 'RemarkName'] else member['NickName'] + if member[b'UserName'].decode() == id: + name = member[b'RemarkName'].decode() if member[ + b'RemarkName'].decode() else member[b'NickName'].decode() # 群友 for member in self.GroupMemeberList: - if member['UserName'] == id: - name = member['DisplayName'] if member[ - 'DisplayName'] else member['NickName'] + if member[b'UserName'].decode() == id: + name = member[b'DisplayName'] if member[ + b'DisplayName'].decode() else member[b'NickName'].decode() if name == '未知群' or name == '陌生人': logging.debug(id) @@ -657,8 +665,8 @@ class WebWeixin(object): def getUSerID(self, name): for member in self.MemberList: - if name == member['RemarkName'] or name == member['NickName']: - return member['UserName'] + if name == member[b'RemarkName'].decode() or name == member[b'NickName'].decode(): + return member[b'UserName'].decode() return None def _showMsg(self, message): @@ -900,9 +908,9 @@ class WebWeixin(object): def sendMsgToAll(self, word): for contact in self.ContactList: - name = contact['RemarkName'] if contact[ - 'RemarkName'] else contact['NickName'] - id = contact['UserName'] + name = contact[b'RemarkName'].decode() if contact[ + b'RemarkName'].decode() else contact[b'NickName'].decode() + id = contact[b'UserName'].decode() self._echo('-> ' + name + ': ' + word) if self.webwxsendmsg(word, id): print(' [成功]') @@ -1056,7 +1064,7 @@ class WebWeixin(object): result = data.decode('utf-8') return result - def _get(self, url, api=None): + def _get(self, url: object, api: object = None) -> object: request = urllib.request.Request(url=url) request.add_header('Referer', 'https://wx.qq.com/') if api == 'webwxgetvoice': @@ -1065,7 +1073,7 @@ class WebWeixin(object): request.add_header('Range', 'bytes=0-') try: response = urllib.request.urlopen(request) - data = response.read() + data = response.read().decode('utf-8') logging.debug(url) return data except urllib.error.HTTPError as e: @@ -1079,20 +1087,22 @@ class WebWeixin(object): logging.error('generic exception: ' + traceback.format_exc()) return '' - def _post(self, url, params, jsonfmt=True): + def _post(self, url: object, params: object, jsonfmt: object = True) -> object: if jsonfmt: - request = urllib.request.Request(url=url, data=json.dumps(params)) + data = json.dumps(params) + data=data.encode() + request = urllib.request.Request(url=url, data=data) request.add_header( 'ContentType', 'application/json; charset=UTF-8') else: - request = urllib.request.Request(url=url, data=urllib.parse.urlencode(params)) + request = urllib.request.Request(url=url, data=urllib.parse.urlencode(params).encode(encoding='utf-8')) try: response = urllib.request.urlopen(request) data = response.read() if jsonfmt: - return json.loads(data, object_hook=_decode_dict) + return json.loads(data.decode('utf-8'), object_hook=_decode_dict) return data except urllib.error.HTTPError as e: logging.error('HTTPError = ' + str(e.code)) From 02a1c539573216e11b84a26c9abc4ac0d0d0d808 Mon Sep 17 00:00:00 2001 From: Haskely Date: Tue, 21 Feb 2017 13:38:54 +0800 Subject: [PATCH 3/4] Transfer to Python3 Successfully tested! --- .gitignore | 3 +- saved/qrcodes/qrcode.jpg | Bin 42241 -> 41486 bytes weixin.py | 109 ++++++++++++++++++++------------------- 3 files changed, 57 insertions(+), 55 deletions(-) diff --git a/.gitignore b/.gitignore index 4f95fc8..7dea058 100644 --- a/.gitignore +++ b/.gitignore @@ -93,4 +93,5 @@ ENV/ # pycharm .idea -*.pyc \ No newline at end of file +*.pyc +saved/qrcodes/qrcode.jpg \ No newline at end of file diff --git a/saved/qrcodes/qrcode.jpg b/saved/qrcodes/qrcode.jpg index 862fd9d23fa8900d39ae622571bbc2998100a284..80262a3c0c73c1e38590117f47ab16f723ec9121 100644 GIT binary patch delta 39959 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�{fNtHGd2HBd*R-*K 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¯Rha__ab?6yXaK`YzT4SC!LsodVE4e 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 ' + name + ': ' + word) if self.webwxsendmsg(word, id): print(' [成功]') @@ -1089,8 +1090,8 @@ class WebWeixin(object): def _post(self, url: object, params: object, jsonfmt: object = True) -> object: if jsonfmt: - data = json.dumps(params) - data=data.encode() + data = (json.dumps(params)).encode() + request = urllib.request.Request(url=url, data=data) request.add_header( 'ContentType', 'application/json; charset=UTF-8') @@ -1102,7 +1103,7 @@ class WebWeixin(object): response = urllib.request.urlopen(request) data = response.read() if jsonfmt: - return json.loads(data.decode('utf-8'), object_hook=_decode_dict) + return json.loads(data.decode('utf-8') )#object_hook=_decode_dict) return data except urllib.error.HTTPError as e: logging.error('HTTPError = ' + str(e.code)) From 28bb790819b9dafe6c6675d002c6852dacc49057 Mon Sep 17 00:00:00 2001 From: Haskely Date: Tue, 21 Feb 2017 13:51:18 +0800 Subject: [PATCH 4/4] Fix bugs --- weixin.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/weixin.py b/weixin.py index 838fdce..7088558 100755 --- a/weixin.py +++ b/weixin.py @@ -641,24 +641,24 @@ class WebWeixin(object): for member in self.SpecialUsersList: if member['UserName'] == id: name = member['RemarkName'] if member[ - b'RemarkName'] else member['NickName'] + 'RemarkName'] else member['NickName'] # 公众号或服务号 for member in self.PublicUsersList: if member['UserName'] == id: name = member['RemarkName'] if member[ - b'RemarkName'] else member['NickName'] + 'RemarkName'] else member['NickName'] # 直接联系人 for member in self.ContactList: if member['UserName'] == id: name = member['RemarkName'] if member[ - b'RemarkName'] else member['NickName'] + 'RemarkName'] else member['NickName'] # 群友 for member in self.GroupMemeberList: if member['UserName'] == id: name = member['DisplayName'] if member[ - b'DisplayName'] else member['NickName'] + 'DisplayName'] else member['NickName'] if name == '未知群' or name == '陌生人': logging.debug(id) @@ -910,7 +910,7 @@ class WebWeixin(object): def sendMsgToAll(self, word): for contact in self.ContactList: name = contact['RemarkName'] if contact[ - b'RemarkName'] else contact['NickName'] + 'RemarkName'] else contact['NickName'] id = contact['UserName'] self._echo('-> ' + name + ': ' + word) if self.webwxsendmsg(word, id):