itchat4j--用 Java 扩展个人微信号的能力! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yaphone
V2EX    程序员

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

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

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

    项目地址: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     Solana     5619 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 06:31 PVG 14:31 LAX 23:31 JFK 02:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86