Urinx / WeixinBot

网页版微信API,包含终端版微信及微信机器人
Apache License 2.0
7.21k stars 1.98k forks source link

todo #8

Closed BillBillBillBill closed 8 years ago

BillBillBillBill commented 8 years ago

不知道接下来要写哪些地方呢?建议把要改进的列个todo list,大家可以一起贡献代码

———— 20160614 ———— by sbilly: 用下管理权,close 封贴。以后发帖同学还请每个需求单独开贴。

Urinx commented 8 years ago

好嘞,我把我想到的加到readme上,大家还有什么想到的也可以加上去或是在这里提出来。

0x0f3r commented 8 years ago

windows下有编码问题。。

kH0d0r commented 8 years ago

微信网页版天生不支持红包啊。。哎。。。。

能不能专门收集记录别人撤回的消息呢。。。这样把程序部署到服务器上,定期去收割别人撤回的内容233333

更:

嗯,其实把这些功能改成插件的形式更好了。。。

0x0f3r commented 8 years ago

@kH0d0r 楼上回的。。多研究研究微信红包也可以收集提醒,撤回的消息只需要监控消息是否撤回然后重读记录就可以,另外插件形式是啥,不懂,一个py搞定的还插件,麻烦。

sharpdeep commented 8 years ago
class UnicodeStreamFilter:

    def __init__(self, target):
        self.target = target
        self.encoding = 'utf-8'
        self.errors = 'replace'
        self.encode_to = self.target.encoding

    def write(self, s):
        if type(s) == str:
            s = s.decode('utf-8')
        s = s.encode(self.encode_to, self.errors).decode(self.encode_to)
        self.target.write(s)

if sys.stdout.encoding == 'cp936':
    sys.stdout = UnicodeStreamFilter(sys.stdout)

这段代码可以解决win的编码问题。

另外win下CMD不能打印出二维码,可以用os.startfile打开

0x0f3r commented 8 years ago

自己撤回的消息和自己发的语音都会记录,加个检查吧。。

reverland commented 8 years ago

表情消息是区别对待的?

有的是图片,有的就显示

[Received a sticker. View on phone]

Toto233 commented 8 years ago

这个是要在Python3中运行么。。 可以加个定时发信息的功能。我媳妇单位就要求每天几点定时发每日金句之类的功能。。看到这个仿佛看到了曙光。。我之前从别的地方看到过 微信找删好友的代码。原来源自你这。加过发信息功能。总返回错误码1。很奇怪。

Urinx commented 8 years ago

@Toto233 2.7下运行。呃,不是源自我 :cold_sweat: ,我这个是在 微信找出删除好友 之后写的,之前我也看了那个。

Toto233 commented 8 years ago

这几天测试这些功能导致微信一直把我建讨论组的功能屏蔽。。

Toto233 commented 8 years ago

text = raw_input('输入指令:').decode(sys.stdin.encoding).encode('utf-8') 这段我电脑上这么写才能够正确 解析输入的中文。

sharpdeep commented 8 years ago

添加一个requirements文件吧,方便安装依赖

sbilly commented 8 years ago

还是各自写 issue 吧。都放在这里,做了或者没做都不好处理。

yong9900 commented 8 years ago

有没有可能添加发送语言或视频给朋友或群啊?从api看好像根本不支持?有什么办法搞定吗?

fanly commented 8 years ago

@yong9900 你有什么最新的办法搞定吗?我也在想怎么解决。。。。

hongtu commented 8 years ago

做个web端控制的更方便,websocket开销很小正合适

reverland commented 8 years ago

@yong9900 发文件可以发语音视频?

reverland commented 8 years ago

@hongtu 有人做userscript有人做chrome扩展了

hongtu commented 8 years ago

@reverland 方便来个地址吗,谢谢

reverland commented 8 years ago

@hongtu 我得问问他再回复

stonexer commented 8 years ago

@hongtu 我这儿倒是有两个web端的项目可以看看。

https://github.com/stonexer/wechatBot 网页版微信机器人 https://github.com/spacelan/weixin-bot-chrome-extension Chrome插件版

reverland commented 8 years ago

@stonexer 膜orz,好厉害

yannisxu commented 8 years ago

自动添加好友

reverland commented 8 years ago

https://github.com/lu4kyd0y/WeChat-Cloud-Robot 微信云端机器人框架

ebhrz1 commented 8 years ago

为什么grouplist没有被保存下来呢 似乎每一次只有在收到群消息的时候才查询一次 直接打印grouplist的每个元素都为空 但是在getGroupId里就可以

yong9900 commented 8 years ago

@fanly @reverland 想做到向在手机端一样发语言和视频。但查遍了web api,好像根本就不知持。 附件可以,但不直观,没有想视频一样的preview。

sbilly commented 8 years ago

@ebhrz1 在 init 过程中只有加到通讯录的联系人和微信群才会被读取,遇到了没有在通讯录中的微信群,只能重新查。

burning-git commented 8 years ago

有人知道 调用 webwxinit 这个 接口 时,总是 提示"BaseResponse": { "Ret": 1101, "ErrMsg": "" 获取不到 数据,,请问 是 什么原因呢??

bigboy44 commented 8 years ago

我是python新手,历经千辛万苦终于在linux系统上成功运行weixin.py,我觉得要是有一个指引的doc就更好了。然后就是各平台的兼容性,win10上面无论如何使用python2.7.11都无法正确运行weixin.py。谢谢大神耐心指导。

ebhrz1 commented 8 years ago

@sbilly 但是我在getGroupName之后再查看仍然没有。python没有var_dump有点不习惯233333

ebhrz1 commented 8 years ago

@bigboy44 你倒是把错误信息贴出来啊。很可能是缺了什么库

jimmy0017 commented 8 years ago

希望建议:邀请别人加入群。

bigboy44 commented 8 years ago

@ebhrz1 并没有缺少什么库。 error ku

xo0 commented 8 years ago

一直运行不成功,是什么问题 麻烦大神帮解下 装了一个ubuntu上也运行不了 这是windows上的错误

d:>python weixin.py [] 微信网页版 ... 开动 2016-03-23 18:28:00 DESKTOP-OTSEM80 root[9164] DEBUG [] 寰俊缃戦〉鐗?... 寮€鍔?[0m [] 正在获取 uuid ... 成功 2016-03-23 18:28:22 DESKTOP-OTSEM80 root[9164] DEBUG [] 姝e湪鑾峰彇 uuid ... ... 鎴愬姛 [] 正在获取二维码 ... 成功 2016-03-23 18:28:22 DESKTOP-OTSEM80 root[9164] DEBUG [] 寰俊缃戦〉鐗?... 寮€鍔?[0m 2016-03-23 18:28:22 DESKTOP-OTSEM80 root[9164] DEBUG Saved file: d:\saved\qrcodes\qrcode.jpg [] 请使用微信扫描二维码以登录 ... 2016-03-23 18:28:27 DESKTOP-OTSEM80 root[9164] DEBUG https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip=1&uuid=oYUma7Mqvw==&=1458728905 2016-03-23 18:28:28 DESKTOP-OTSEM80 root[9164] DEBUG https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip=0&uuid=oYUma7Mqvw==&_=1458728907 [_] 正在登录 ... 2016-03-23 18:28:28 DESKTOP-OTSEM80 root[9164] DEBUG https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AdYjaOoMYlEUGEu_l6Gh5vb_@qrticket_0&uuid=oYUma7Mqvw==&lang=zh_CN&scan=1458728906&fun=new 成功 2016-03-23 18:28:28 DESKTOP-OTSEM80 root[9164] DEBUG [] 姝e湪鐧诲綍 ... ... 鎴愬姛 [] 微信初始化 ... 成功 2016-03-23 18:28:29 DESKTOP-OTSEM80 root[9164] DEBUG [] 寰俊鍒濆鍖?... ... 鎴愬姛 [] 开启状态通知 ... 成功 2016-03-23 18:28:30 DESKTOP-OTSEM80 root[9164] DEBUG [] 寮€鍚姸鎬侀€氱煡 ... ... 鎴愬姛 [] 获取联系人 ... https://wx.qq.com/cgi-bin/mmwebwx-bin 成功 2016-03-23 18:28:35 DESKTOP-OTSEM80 root[9164] DEBUG [] 鑾峰彇鑱旂郴浜?... ... 鎴愬姛 [] 应有 1115 个联系人,读取到联系人 1115 个 [] 共有 11 个群 | 593 个直接联系人 | 1 个特殊账号 | 509 公众号或服务号 [] 获取群 ... 成功 2016-03-23 18:28:41 DESKTOP-OTSEM80 root[9164] DEBUG [] 鑾峰彇缇?... ... 鎴愬姛 2016-03-23 18:28:41 DESKTOP-OTSEM80 root[9164] DEBUG [] 寰俊缃戦〉鐗?... 寮€鍔?[0m 2016-03-23 18:28:41 DESKTOP-OTSEM80 root[9164] DEBUG ========================= [#] Web Weixin [#] Debug Mode: False [#] Uuid: oYUma7Mqvw== [#] Uin: 391924395 [#] Sid: jegR64c0LB7s8S6p [#] Skey: @crypt_9ce4ce2c_0331b08e6dd9a763f018a23f5dbdb9ef [#] DeviceId: e471538950487586

[#] PassTicket: XL2wtByoWa9fDL5zctl8t2Lx20gMnG%2B3pb%2BwkNDX96Xv6XZYY37W9gp2Dn9RxHAf

[] 自动回复模式 ... 关闭 2016-03-23 18:28:41 DESKTOP-OTSEM80 root[9164] DEBUG [] 鑷姩鍥炲妯″紡 ... 鍏抽棴 Traceback (most recent call last): File "weixin.py", line 946, in Traceback (most recent call last): File "", line 1, in webwx.start() File "D:\Python27\lib\multiprocessing\forking.py", line 381, in main File "weixin.py", line 25, in wrapper self = load(from_parent) File "D:\Python27\lib\pickle.py", line 1384, in load return fn(args) File "weixin.py", line 809, in start return Unpickler(file).load() File "D:\Python27\lib\pickle.py", line 864, in load listenProcess.start() File "D:\Python27\lib\multiprocessing\process.py", line 130, in start dispatchkey File "D:\Python27\lib\pickle.py", line 886, in load_eof self._popen = Popen(self) File "D:\Python27\lib\multiprocessing\forking.py", line 277, in init raise EOFError EOFError dump(process_obj, to_child, HIGHEST_PROTOCOL) File "D:\Python27\lib\multiprocessing\forking.py", line 199, in dump ForkingPickler(file, protocol).dump(obj) File "D:\Python27\lib\pickle.py", line 224, in dump self.save(obj) File "D:\Python27\lib\pickle.py", line 331, in save self.save_reduce(obj=obj, rv) File "D:\Python27\lib\pickle.py", line 425, in save_reduce save(state) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 655, in save_dict self._batch_setitems(obj.iteritems()) File "D:\Python27\lib\pickle.py", line 687, in _batch_setitems save(v) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\multiprocessing\forking.py", line 67, in dispatcher self.save_reduce(obj=obj, rv) File "D:\Python27\lib\pickle.py", line 401, in save_reduce save(args) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 554, in save_tuple save(element) File "D:\Python27\lib\pickle.py", line 331, in save self.save_reduce(obj=obj, rv) File "D:\Python27\lib\pickle.py", line 425, in save_reduce save(state) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 655, in save_dict self._batch_setitems(obj.iteritems()) File "D:\Python27\lib\pickle.py", line 687, in _batch_setitems save(v) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 731, in save_inst save(stuff) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 655, in save_dict self._batch_setitems(obj.iteritems()) File "D:\Python27\lib\pickle.py", line 687, in _batch_setitems save(v) File "D:\Python27\lib\pickle.py", line 331, in save self.save_reduce(obj=obj, *rv) File "D:\Python27\lib\pickle.py", line 425, in save_reduce save(state) File "D:\Python27\lib\pickle.py", line 286, in save f(self, obj) # Call unbound method with explicit self File "D:\Python27\lib\pickle.py", line 655, in save_dict self._batch_setitems(obj.iteritems()) File "D:\Python27\lib\pickle.py", line 687, in _batch_setitems save(v) File "D:\Python27\lib\pickle.py", line 306, in save rv = reduce(self.proto) TypeError: can't pickle thread.lock objects

-----------------------------------------------------------不缺什么库 d:>python -m pip list beautifulsoup4 (4.4.1) colorama (0.3.7) coloredlogs (5.0) humanfriendly (1.44.5) logging (0.4.9.6) lxml (3.5.0) mysql-python (1.2.5) pip (8.1.1) py2exe (0.6.9) qrcode (5.2.2) requests (2.9.1) requests-toolbelt (0.6.0) setuptools (18.2) six (1.10.0) wheel (0.29.0)

kaizhuQin commented 8 years ago

怎么可以找出@自己的消息

whahuzhihao commented 8 years ago

问个跟协议无关的问题 https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage 这个地址不加fun=new的时候会301 有什么方法能在官方网页下让他强制走fun=new呢 --- 更新 已经跳过这个步骤了。。在electron下抓包,可以从init接口以及cookie里获取到sid uin skey。不需要走这个接口了。

zhonghaoling commented 8 years ago

Not work now for weixin haven't support this API。现在支持视频发送了吗?先把视频保存本地,然后本地发送出去?

ammrwu commented 8 years ago

群发不知道如何掌握频率,老是返回1205或者-1,谁知道如何处理?

monkeybad commented 8 years ago

找到了发送微信表情的方法,补充代码在这里,管理员请关注下,建议可以升级下weixin.py

使用方法:替换weixin.py文件运行,表情发送命令 e->[昵称或ID]:[文件路径] 文件可以是jpg或gif weixin.py.zip

monkeybad commented 8 years ago

管理员有空整理下文档吧,求加入刚才提到的对emotion的支持。

Urinx commented 8 years ago

@monkeybad 好的,我会加上的 👍

zhonghaoling commented 8 years ago

@Urinx 监听进程异常:urlopen error [Errno 104] Connection reset by peer???

wujiyu115 commented 8 years ago

windows 下:multiprocessing的问题pickle.PicklingError: Can't pickle <type 'thread.lock'>: it's not found as thread.lock , mac 下面测试没问题

iOSwang commented 8 years ago

能把思路分享下么

kingkf commented 8 years ago

发送分享链接

JasLin commented 8 years ago

可以封装一下 暴露接口方法出来写业务代码,要不在做业务代码的时候,只能重写方法.

huangming commented 8 years ago

你好,我想对这个项目做py3适配,适配的过程中运行到进行同步线路测试 ... ', self.testsynccheck这里每次都出错,想请教一下哪里的问题。 #修改的地方

下面是运行的错误: [_] 进行同步线路测试 ... _get data=window.synccheck={retcode:"1100",selector:"0"} synccheck data=window.synccheck={retcode:"1100",selector:"0"} <class 'str'> _get data=window.synccheck={retcode:"1100",selector:"0"} synccheck data=window.synccheck={retcode:"1100",selector:"0"} <class 'str'> _get data=window.synccheck={retcode:"1100",selector:"0"} synccheck data=window.synccheck={retcode:"1100",selector:"0"} <class 'str'> _get data=window.synccheck={retcode:"1100",selector:"0"} synccheck data=window.synccheck={retcode:"1100",selector:"0"} <class 'str'> _get data=window.synccheck={retcode:"1100",selector:"0"} synccheck data=window.synccheck={retcode:"1100",selector:"0"} <class 'str'> Process Process-1: Traceback (most recent call last): File "H:\win10\Python35\lib\multiprocessing\process.py", line 254, in _bootstrap self.run() File "H:\win10\Python35\lib\multiprocessing\process.py", line 93, in run self._target(_self._args, *_self._kwargs) File "E:\OneDrive\python\WeixinBot_py3\weixin.py", line 814, in listenMsgMode self.run('[] 进行同步线路测试 ... ', self.testsynccheck) File "E:\OneDrive\python\WeixinBot_py3\weixin.py", line 995, in _run if func(_args): File "E:\OneDrive\python\WeixinBot_py3\weixin.py", line 347, in testsynccheck [retcode, selector] = self.synccheck() File "E:\OneDrive\python\WeixinBot_py3\weixin.py", line 368, in synccheck data = self._get(url) File "E:\OneDrive\python\WeixinBot_py3\weixin.py", line 1038, in _get response = urllib2.urlopen(request) File "H:\win10\Python35\lib\urllib\request.py", line 162, in urlopen return opener.open(url, data, timeout) File "H:\win10\Python35\lib\urllib\request.py", line 465, in open response = self._open(req, data) File "H:\win10\Python35\lib\urllib\request.py", line 483, in _open '_open', req) File "H:\win10\Python35\lib\urllib\request.py", line 443, in _call_chain result = func(_args) File "H:\win10\Python35\lib\urllib\request.py", line 1283, in https_open context=self._context, check_hostname=self._check_hostname) File "H:\win10\Python35\lib\urllib\request.py", line 1240, in do_open h.request(req.get_method(), req.selector, req.data, headers) File "H:\win10\Python35\lib\http\client.py", line 1083, in request self._send_request(method, url, body, headers) File "H:\win10\Python35\lib\http\client.py", line 1128, in _send_request self.endheaders(body) File "H:\win10\Python35\lib\http\client.py", line 1079, in endheaders self._send_output(message_body) File "H:\win10\Python35\lib\http\client.py", line 911, in _send_output self.send(msg) File "H:\win10\Python35\lib\http\client.py", line 854, in send self.connect() File "H:\win10\Python35\lib\http\client.py", line 1237, in connect server_hostname=server_hostname) File "H:\win10\Python35\lib\ssl.py", line 376, in wrap_socket _context=self) File "H:\win10\Python35\lib\ssl.py", line 747, in init self.do_handshake() File "H:\win10\Python35\lib\ssl.py", line 983, in do_handshake self._sslobj.do_handshake() File "H:\win10\Python35\lib\ssl.py", line 633, in do_handshake match_hostname(self.getpeercert(), self.server_hostname) File "H:\win10\Python35\lib\ssl.py", line 296, in match_hostname % (hostname, ', '.join(map(repr, dnsnames)))) ssl.CertificateError: hostname 'webpush1.wechatapp.com' doesn't match either of 'webpush1.wechat.com', 'webpush.wechat.com', 'login.web.wechat.com', 'webpush.web.wechat.com', 'webpush2.wechat.com', 'webpush.web2.wechat.com', 'file.web2.wechat.com', 'web1.wechat.com', 'file.web.wechat.com', 'loginpoll.wechat.com', 'web2.wechat.com', 'login.wechat.com', 'login.web2.wechat.com', 'res.wechat.com', 'web.wechat.com'

Toto233 commented 8 years ago

@jimmy0017 邀请入群功能我做了一个,基本上是根据这个做的,会遇到的坑就是,加完人之后,那个群组虽然存在,但是并不会显示出来。必须要在那个群里说句话才能显示。

https://github.com/Toto233/pythonStuff/blob/master/wechatAddGroup.py

sunfanteng commented 8 years ago

请问现在能不能做到机器人发送图片或者语音?看了好多开源项目都没有实现这一块。

reverland commented 8 years ago

@sunfanteng 可以做到,因为web微信可以上传文件。 但是web微信对图像文件的解析比较奇怪,有时候会莫名把图片处理成表情