V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yaphone
V2EX  ›  程序员

itchat4j--用 Java 扩展个人微信号的能力!

  •  
  •   yaphone · 2017-05-14 18:33:34 +08:00 · 4051 次点击
    这是一个创建于 2510 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前已经发布过一次,这次重新发布是因为增加了多个接口,项目结构也做了较大调整,

    项目地址:itchat4j,该项目长期维护更新,欢迎 star、fork、pull requests、issue。

    来源

    itchat 是一个非常优秀的开源微信个人号接口,使用 Python 语言开发,提供了简单易用的 API,可以很方便地对个人微信号进行扩展,实现自动回复,微信挂机机器人等,一直在关注这个项目,基于 itchat 开发过一个小项目,用来控制我的树莓派来播放音乐,效果还不错。

    一直想实现一个 java 版本的 itchat,由于工作太忙导致一拖再拖,这段时间稍微空闲了一些,仔细阅读了 itchat 的源码,终于完成了一个基础版本,由于主要灵感来源于 itchat 项目,所以这个项目的就暂时定名为itchat4j吧。

    项目介绍

    itchat 是一个开源的微信个人号接口,使用 Python 调用微信从未如此简单。使用短短的几十行代码,你就可以完成一个能够处理所有信息的微信机器人。当然,itchat 的使用远不止一个机器人,更多的功能等着你来发现,如今微信已经成为了个人社交的很大一部分,希望这个项目能够帮助你扩展你的个人的微信号、方便自己的生活。(引自 itchat 项目)

    你可以轻松将itchat4j其集成在你个人的 Java 应用中,无论是 SpringMVC、桌面程序还是嵌入式程序,只要使用的 JDK 是 1.6 以上的版本,都可以轻松接入。玩法很多,请打开你的脑洞,比如这些:

    • Just for fun,把个人微信号扩展为"公众号",在朋友面前装个 X 吧。
    • 集成在你的个人应用( SpringMVC、Serverlet、GUI )中,为应用提供更强的服务能力。
    • 部署在你的服务器上,将监控信息、日志发送到你的微信号。
    • 微信机器人,专业陪聊工具
    • 控制树莓派、智能家居、智能硬件等具有开放接口的设备
    • Anything you want ...

    API 说明

    项目在不断更新中,API 会有变动,请以具体代码为准

    目前在package cn.zhouyafeng.itchat4j.api包中有两个静态类,即MessageToolsWechatTools,目前对外暴露的方法有:

    1.获取好友列表 WechatTools.getContactList()

    此方法会返回好友昵称列表,其函数声明为:

    public static List<String> getContactList()
    

    2.获取群列表 WechatTools.getGroupIdList()

    群列表与好友列表不同,在登陆后群列表其实是空的,只有主动发送消息或者收到一条群消息时,才能获取到这个群的信息,群列表会记录这个群的 id,其格式为@@d052d34b9c9228830363013ee53deb461404f80ea353dbdd8fc9391cbf5f1c46。调用此方法会返回已知的群列表。其声明函数为:

    public static List<String> getGroupIdList()
    

    3. 根据好友昵称发送文本消息,MessageTools.sendMsgByNickName(String text, String nickName)

    此方法根据用户昵称发送文本消息,注意,用户需在你的好友列表里,否则发送失败,如果你的好友列表里有存在昵称一样的多个用户,则只会给第一个匹配的好友发送消息。方法接受两个参数,text为要发送的文本消息,nickName为要发送消息的好友昵称,成功发送时返回 true,失败返回 false。其函数声明为:

    public static boolean sendMsgByNickName(String text, String nickName)
    

    4.根据 ID 发送文本消息,MessageTools.sendMsgById(String text, String id)

    根据 ID 发送文本消息,发送者 ID 可以从msg里通过msg.getString("FromUserName")获取,格式为@@d052d34b9c9228830363013ee53deb461404f80ea353dbdd8fc9391cbf5f1c46(群消息)或@a257b99314d8313862cd44ab02fe0f81(非群消息),调用此方法可向指定 id 发送消息。其函数声明为:

    public static void sendMsgById(String text, String id)
    

    5.根据好友昵称发送图片消息,MessageTools.sendPicMsgByNickName(String nickName, String filePath)

    此方法根据好友昵称发送图片消息,filePath为图片文件路径,如D:/itchat4j/pic/test.jpg,成功返回 true,失败返回 false。其函数声明为:

    public static boolean sendPicMsgByNickName(String nickName, String filePath)
    

    6.根据 ID 发送图片消息,MessageTools.sendPicMsgByUserId(String userId, String filePath)

    此方法根据好友 ID 发送图片消息,filePath为图片文件路径,如D:/itchat4j/pic/test.jpg`,成功返回 true,失败返回 false。其函数声明为:

    public static boolean sendPicMsgByUserId(String userId, String filePath)
    

    7.根据好友昵称发送文件消息,MessageTools.sendFileMsgByNickName(String nickName, String filePath)

    此方法根据好友昵称发送文件消息,文件可以为多种类型,如 txt、PDF、小视频、语音、excel、docx 等,发送时请保证文件后缀名正确。成功返回 true,失败返回 false。其函数声明为:

    public static boolean sendPicFileByNickName(String nickName, String filePath)
    

    8.根据 ID 发送文件消息,MessageTools.sendFileMsgByNickName(String nickName, String filePath)

    此方法根据好友昵称发送文件消息,成功返回 true,失败返回 false。其函数声明为:

    public static boolean sendFileMsgByUserId(String userId, String filePath)
    

    TODO List 即将支持 /正在开发

    • 根据 userId 获取用户的详细信息
    • 获取群成员列表
    • 拉人进群功能

    如何使用

    项目在不断更新中,导入后的项目结构会有变动

    itchat4j 是一个 Maven 项目,下载源码后,可以以 Maven 项目的形式导入,导入后的项目结构如下图:

    itchat4j 项目结构

    src/main/java 是 itchat4j 的项目源码,在 src/test/java 目录下有两个小 Demo:一个是基本功能的小示例,当前,itchat4j 可以处理四类基本信息,文本、语音、图片和小视频,该示例在收到文本信息后自动回复,回复内容为收到的文本,当收到图片、语音、小视频时可以保存到指定的目录;一个是微信接入图灵机器人的小例子,如下图。

    微信机器人使用截图

    微信机器人

    控制台收到的消息

    问题和建议

    本项目长期更新、维护,功能不断扩展与完善中,欢迎 star。

    项目使用过程中遇到问题,欢迎随时反馈。

    任何问题或者建议都可以在 Issue 中提出来,也可以加入 QQ 群讨论:636365179

    10 条回复    2017-05-15 14:18:29 +08:00
    YzSama
        1
    YzSama  
       2017-05-14 19:43:29 +08:00 via iPhone
    赞。不过我已经用上 weixin-tools。😂
    yaphone
        2
    yaphone  
    OP
       2017-05-14 22:11:21 +08:00
    @YzSama weixin-tools 也是个人微信号工具吗?
    mingyun
        3
    mingyun  
       2017-05-14 23:11:24 +08:00
    不会 java 感觉还是 Python 版的方便
    @YzSama weixin-tools 是?
    YzSama
        4
    YzSama  
       2017-05-15 08:31:04 +08:00 via iPhone
    @yaphone
    @mingyun
    github 上面 weixin-java-tools。
    PythoneerDev6
        5
    PythoneerDev6  
       2017-05-15 10:30:42 +08:00
    实用性没有 Python 好。
    fisher335
        6
    fisher335  
       2017-05-15 10:48:28 +08:00
    这段时间 web 微信的接口不太稳定,应该是企鹅注意到这种情况了,估计要下手了。
    zacard
        7
    zacard  
       2017-05-15 13:54:50 +08:00
    不错
    yaphone
        8
    yaphone  
    OP
       2017-05-15 14:17:32 +08:00 via Android
    @PythoneerDev6 嗯,确实没有 Python 版的 itchat 方便,但是适用场景不一样嘛😊
    yaphone
        9
    yaphone  
    OP
       2017-05-15 14:18:17 +08:00 via Android
    @fisher335 最近确实不太稳定,不知道什么原因
    yaphone
        10
    yaphone  
    OP
       2017-05-15 14:18:29 +08:00 via Android
    @zacard 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.