V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Youfou
V2EX  ›  Python

wxpy: 优雅的微信个人号 机器人/API,用 Python 玩微信

  •  
  •   Youfou ·
    youfou · 2017-02-28 01:25:12 +08:00 · 30477 次点击
    这是一个创建于 2822 天前的主题,其中的信息可能已经有所发展或是发生改变。

    wxpy: 用 Python 玩微信

    优雅的微信个人号 机器人 /API ,基于 itchat ,全面优化接口,更有 Python 范儿

    用来干啥

    一些常见的场景

    • 控制路由器、智能家居等具有开放接口的玩意儿
    • 跑脚本时自动把日志发送到你的微信
    • 加群主为好友,自动拉进群中
    • 充当各种信息查询
    • 转发消息
    • 逗人玩
    • ...
    # 脑洞太大的就不提了...
    

    总而言之,可用来实现各种微信个人号的自动化操作

    轻松安装

    使用 Python 3.x

    pip3 install -U wxpy
    

    简单上手

    登陆微信:

    # 导入模块
    from wxpy import *
    # 初始化机器人,扫码登陆
    robot = Robot()
    

    找到好友:

    # 搜索名称含有 "游否" 的男性深圳好友
    my_friend = robot.friends().search('游否', sex=MALE, city="深圳")[0]
    

    发送消息:

    # 发送文本给好友
    robot.my_friend.send('Hello WeChat!')
    # 发送图片
    robot.my_friend.send_image('my_picture.jpg')
    

    自动响应各类消息:

    # 打印来自其他好友、群聊和公众号的消息
    @robot.register()
    def print_others(msg):
      print(msg)
    
    # 回复 my_friend 的消息 (优先匹配后注册的函数!)
    @robot.register(my_friend)
    def reply_my_friend(msg):
      return 'received: {} ({})'.format(msg.text, msg.type)
    
    # 开始监听和自动处理消息
    robot.start()
    

    模块特色

    • 全面对象化接口,调用更优雅
    • 默认多线程响应消息,回复更快
    • 附带 共同好友、图灵机器人 等实用组件
    • 覆盖大部分常用功能:
      • 发送文本、图片、视频、语音、文件
      • 通过关键词或用户属性搜索 好友、群聊、群成员 等
      • 获取好友 /群成员昵称、备注、性别、地区
      • 加好友,建群,邀请进群,踢出群

    了解更多

    说明文档: http://wxpy.readthedocs.io

    加入讨论

    GitHub: https://github.com/youfou/wxpy


    加入微信交流群 (真的是群哦)

    • 加以下微信,填写验证 [ wxpy ],即可自动受邀入群

    第 1 条附言  ·  2017-02-28 18:51:26 +08:00
    勘误:
    上面的示例代码中有一些错误,原帖已经无法修改,请大家访问 GitHub 页面或 RTD 在线文档查看示例代码。
    49 条回复    2020-02-21 05:44:17 +08:00
    ZEOH
        1
    ZEOH  
       2017-02-28 01:45:42 +08:00   ❤️ 1
    已 star 。

    以前也想做一个类似可以挂群里的机器人,但是微信必须保持手机同时在线不然会掉,有点烦。
    wjm2038
        2
    wjm2038  
       2017-02-28 01:46:21 +08:00 via Android
    已 star 感觉不错⊙▽⊙
    Youfou
        3
    Youfou  
    OP
       2017-02-28 01:47:49 +08:00
    @ZEOH 这个确实无解,反正我是拿备用机登的…
    laobubu
        4
    laobubu  
       2017-02-28 02:02:48 +08:00 via Android
    诶等等,真的可以发送语音了么?我记得 itchat 还有各路利用网页端 API 开发的都不支持耶。
    Youfou
        5
    Youfou  
    OP
       2017-02-28 02:13:19 +08:00
    @laobubu 抱歉,才发现文档错了,不支持语音发送,只能接收语音…
    帖子已经无法修改,已在 doc source 中修
    unique
        6
    unique  
       2017-02-28 02:14:36 +08:00
    不错,之前做了 java 版的但是功能不全, star
    popbones
        7
    popbones  
       2017-02-28 06:19:10 +08:00 via iPhone
    已 star
    bearqq
        8
    bearqq  
       2017-02-28 07:35:07 +08:00 via Android
    @ZEOH 我一直以为是 api 限制呢,原来是要手机在线。。
    v1024
        9
    v1024  
       2017-02-28 07:39:50 +08:00 via iPhone
    mark
    tamama
        10
    tamama  
       2017-02-28 10:27:44 +08:00
    赞。已 star
    stranbird
        11
    stranbird  
       2017-02-28 10:32:15 +08:00
    登入好像有些问题哦


    ```
    json.decoder.JSONDecodeError: Unterminated string starting at: line 6505 column 13 (char 120732)
    ```
    Youfou
        12
    Youfou  
    OP
       2017-02-28 10:40:20 +08:00
    @stranbird 看上去是在解析一个很长的 JSON … 这个问题会反复出现吗?
    不介意的话可以贴下完整的 traceback 哈。
    hydyy
        13
    hydyy  
       2017-02-28 10:46:14 +08:00
    wxpy -> 微信 pao 友
    Light3
        14
    Light3  
       2017-02-28 11:03:13 +08:00
    微信 py 666
    kaishi123
        15
    kaishi123  
       2017-02-28 11:06:27 +08:00
    微信屁眼……
    feibilanceon
        16
    feibilanceon  
       2017-02-28 11:09:54 +08:00 via iPhone
    我这里有一些 itchat 的用例,有一些只需要修改变量就可以直接使用了,比如直接加群主填写特定验证信息自动邀请加群的。
    https://github.com/discountry/itchat-examples
    希望楼主有空研究研究怎么处理红包或其他特殊类消息。
    spice630
        17
    spice630  
       2017-02-28 11:24:34 +08:00
    顺道发个 go 版本的
    https://github.com/songtianyi/wechat-go

    我自己用来撩骚,开开车 发发 gif, 美剧更新提醒等等 :)
    https://github.com/songtianyi/go-aida
    chenqh
        18
    chenqh  
       2017-02-28 11:31:12 +08:00
    这个是个人微信?
    我第一眼还以为是微信公众号呢
    chenqh
        19
    chenqh  
       2017-02-28 11:32:01 +08:00
    如果能 py2 就好了。。
    Youfou
        20
    Youfou  
    OP
       2017-02-28 11:47:36 +08:00
    @feibilanceon wxpy 就是基于 itchat 开发的,是它的一层接口封装,希望提供更好用的接口哈
    Youfou
        21
    Youfou  
    OP
       2017-02-28 11:49:30 +08:00
    @chenqh 正好试试 Python 3 吧,我也是用了两年 py2 后下决心升级到 3 的,还是有不少提升的
    chenqh
        22
    chenqh  
       2017-02-28 11:55:07 +08:00
    @Youfou 对 py3 ,不是很感兴趣,因为我现在好多东西不会做,py3 只是添加了一个异步,如何高性能而已
    HanSonJ
        23
    HanSonJ  
       2017-02-28 12:04:52 +08:00
    搭车发个 PHP 版本的 https://www.v2ex.com/t/335534
    davidqw
        24
    davidqw  
       2017-02-28 12:15:17 +08:00
    py 交易利器
    Youfou
        25
    Youfou  
    OP
       2017-02-28 12:23:14 +08:00
    @bearqq 可以搞个双开 APP ,一天开一下小号就行
    无责任推荐双开工具: http://parallel-app.com/
    Youfou
        26
    Youfou  
    OP
       2017-02-28 12:52:15 +08:00
    @chenqh 既然用的还不多,可以考虑直接切到 3 嘛,将来会有更多项目迁移到 3 ,很多新项目也是直接从 3 开始
    bearqq
        27
    bearqq  
       2017-02-28 12:55:13 +08:00
    @Youfou 嗯 我就是用的他双开,只是习惯性的用完就杀掉了,所以过两三天 bot 就没反应了
    linzhi
        28
    linzhi  
       2017-02-28 14:29:43 +08:00
    关注~
    Youfou
        29
    Youfou  
    OP
       2017-02-28 19:28:12 +08:00
    发现这个帖子都是收藏,回复很少,自己顶顶…😢
    jimmy66
        30
    jimmy66  
       2017-02-28 20:39:37 +08:00
    厉害了。。。真心的
    Youfou
        31
    Youfou  
    OP
       2017-02-28 21:41:35 +08:00
    再顶~ 顺带说下,二维码中的小机器人已经开启了被调戏功能…
    s349116973
        32
    s349116973  
       2017-02-28 22:01:36 +08:00 via iPhone
    我也想写一个,问一下,好友信息是怎么拿到的?是通过抓包解析协议,然后拿到信息的吗?有知道的能告诉我吗?
    feibilanceon
        33
    feibilanceon  
       2017-02-28 22:13:29 +08:00 via iPhone
    s349116973
        34
    s349116973  
       2017-02-28 22:57:40 +08:00 via iPhone
    @feibilanceon 谢谢,果然是要抓包,我目前就是还不知道如何通过 tcpdump/wireshark 抓包,然后把信息实时更新到自己的程序里,谢谢。
    mingyun
        35
    mingyun  
       2017-02-28 23:44:14 +08:00
    厉害了,加人,加群还能自动化,好玩
    Youfou
        36
    Youfou  
    OP
       2017-02-28 23:44:40 +08:00
    @s349116973 抓包不是只抓数据,而是通过观察流量摸索协议,有了协议,就可以通过自己的方式获取数据啦
    eoo
        37
    eoo  
       2017-03-01 00:30:23 +08:00 via Android
    @s349116973 网页抓包 还是直接用浏览器的开发者工具吧
    eoo
        38
    eoo  
       2017-03-01 00:33:30 +08:00 via Android
    @Youfou 我也弄了个 WebQQ 不过 tody.ml/webqq/ 用来做广西联通流量自动充值。
    gladuo
        39
    gladuo  
       2017-03-01 01:34:56 +08:00
    朋友圈的功能不知道什么时候弄得到
    phithon
        40
    phithon  
       2017-03-01 01:46:13 +08:00
    赞,已 star
    nujabse
        41
    nujabse  
       2017-03-01 08:39:51 +08:00 via Android
    已 star
    Citrus
        42
    Citrus  
       2017-03-01 09:09:52 +08:00 via iPhone
    好奇,基于 itchat 的优化为何没 pr 回去呀?
    Youfou
        43
    Youfou  
    OP
       2017-03-01 09:48:45 +08:00
    @Citrus 导入 itchat ,而不是直接修改 itchat 的代码。而且也修改了很多接口,很难合入原项目,所以才另立项目呢。
    watchdb
        44
    watchdb  
       2017-03-01 10:19:42 +08:00 via iPhone
    另外结合 hug 可实现 api 接口了,这样通用性更好,可以给其他服务调用,非常简洁
    Youfou
        45
    Youfou  
    OP
       2017-03-01 11:33:47 +08:00
    @watchdb 哈哈我去了解下 hug ,业余 Pythoner
    Youfou
        46
    Youfou  
    OP
       2017-03-01 13:08:49 +08:00
    @gladuo 这个还真无解, Web 微信一直没有朋友圈功能。考虑到产品定位,估计以后也不会有…
    watchdb
        47
    watchdb  
       2017-03-01 13:48:02 +08:00 via iPhone   ❤️ 1
    @Youfou 同样业余,我是做 java ,封装成 api 几行代码就搞定了,一条消息可以群发给多个人的实现方法
    @hug.get('/send_msg')
    def private_msg(content, username:hug.types.text="filehelper"):
    nameArr = username.split()
    name = '';
    for i in range(len(nameArr)):
    name = nameArr[i]
    print("users:{name} content : {content}".format(**locals()))
    itchat.send_msg(content, toUserName=name)
    return '{"result":1}'
    Youfou
        48
    Youfou  
    OP
       2017-03-01 15:50:53 +08:00
    @watchdb 最近正好在想怎么通过 web 来方便远程登陆 /控制微信机器人
    w3cfeder
        49
    w3cfeder  
       2020-02-21 05:44:17 +08:00
    有其他协议的研究么?网上看了其他其他协议,都需要收费。我想找一个其他协议的开源代码,参考一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5392 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:13 · PVG 17:13 · LAX 01:13 · JFK 04:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.