推荐学习书目
› 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 · Feb 28, 2017 · 32231 views
    This topic created in 3541 days ago, the information mentioned may be changed or developed.

    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 ],即可自动受邀入群

    Supplement 1  ·  Feb 28, 2017
    勘误:
    上面的示例代码中有一些错误,原帖已经无法修改,请大家访问 GitHub 页面或 RTD 在线文档查看示例代码。
    49 replies  •  2020-02-21 05:44:17 +08:00
    ZEOH
    ZEOH
    Feb 28, 2017❤️1
    1
    已 star 。

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


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

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