利用雄雄的小课堂-微信机器人通过自定义接口发送不同形式的内容至群

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。

在这里插入图片描述

前言

最近改造了下机器人,接口改的更加灵活,可以通过自定义接口给自己的社群或者好友中。废弃掉之前的发送接口,简直为开发者的福音;不仅支持java,其他类型的编程语言均可。

机器人目前功能列表

  1. 好友关键词自动通过
  2. 进群欢迎词
  3. 群聊列表查询
  4. 好友列表查询
  5. 接入百度文心大模型
  6. 自定义接口发送文本消息(群/好友/公众号)
  7. 自定义接口发送图片消息(群/好友/公众号)
  8. 自定义接口发送xml消息(群/好友/公众号)
  9. 自定义接口发送h5小卡片消息(群/好友/公众号)
  10. 自定义接口发送小程序卡片(群/好友/公众号)
  11. 自定义接口发送本地文件(群/好友/公众号)
  12. 每日诗词问答
  13. 签到获取星光币
  14. 答题奖励/扣除星光币
  15. 文本消息防撤回功能
  16. 我想买功能(对接拼多多、淘宝客返佣平台,根据关键词搜索商品,可直接下单购买)
  17. 同步给多个群/好友发送消息(应用场景:只需要给机器人发送一条消息,机器人会自动给已经配置了的多个群或好友随机在1-10分钟内将消息转发出去)
  18. 可视化机器人管理平台(群/好友/公众号)
  19. 每日新闻简报推送(群/好友/公众号)
  20. 每日天气信息推送(数据来源:中国中央气象台)(群/好友/公众号)
  21. 每日生活小技巧推送(群/好友/公众号)
  22. 天行数据api接口对接(头条热点、早安心语、彩虹屁、 朋友圈文案)
  23. 指定关键词回答配置(eg:给机器人发:穆雄雄,机器人回复:#小程序:雄雄的工具箱)

接口说明

接口地址(详细接口地址请咨询博主):

/system/object/customApiSendMsg

java中的调用示例:

 /**
     * 给微信机器人中发送信息的公共方法
     */
    public String sendMsgToWechat(String wxid,Integer tag,String appkey,String message){
        String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";
        String path = url + "?tag=" + tag + "&wxid=" + wxid + "&appkey=" + appkey + "&message=" + message;
        String body = HttpUtil.createGet(path)
                .execute()
                .body();
        log.info("给微信群中发送的结果:" + body);
        return body;
    }

备注:

  1. wxid:为接收消息的群或者好友的唯一id,可以从管理平台中看到
  2. tag:为消息类型,0表示发送文字,1表示发送图片 2发送本地文件 3发送H5小卡片 4发送小程序 5发送音乐卡片 6发送xml文件 7发送聊天记录 -1设置百度的appkey和秘钥
  3. appkey:为开发者的appkey,可以在管理平台中查看
  4. message:需要发送的消息,消息格式与发送消息类型tag有关,具体格式分别查看下面的示例

发送文本消息

效果

在这里插入图片描述

  • 文本消息中的#符号,在代码中用/cjj代替
  • 文本消息中的换行,在代码中/cbr代替

示例代码:

 /**
     * (微信机器人)每天早上6点将国内新闻发送至群中
     */
    @GetMapping("/sendAlapiNewsV1")
   // @Scheduled(cron = " 0 0 6 * * ?")
    public void sendAlapiNewsV1() throws UnsupportedEncodingException {
        //请求接口中的数据
        String url = ALAPI_API+"/zaobao?token="+ALAPI_KEY+"&format=json";
        String body = HttpUtil.createGet(url)
                .execute()
                .body();
        JSONObject objectResult = JSON.parseObject(body);
        Integer code = objectResult.getInteger("code");
        JSONObject object = new JSONObject();
        StringBuilder sb = new StringBuilder();
        if (code != 200) {
            log.info("获取新闻失败");
           return;
        }
        SimpleDateFormat formatChina = new SimpleDateFormat("yyyy年MM月dd日");
        // 将今天日期转换为 SimpleDateFormat 格式,并将明天的日期转换为 SimpleDateFormat 格式
        String todayDate = formatChina.format(new Date());
        //根据阳历计算农历
        Calendar today = Calendar.getInstance();
        today.setTime(new Date());
        Date tomorrowDate = today.getTime();
        String dateTomorrow = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(tomorrowDate);
        sb.append("早上好[太阳],今天是:" + todayDate);
        String week = "";
        try {
            week = DateUtils.getDaysByWeekChina(dateTomorrow);
            DateUtils lunar = new DateUtils(today);
            String nongli = lunar.toString();
            nongli = nongli.substring(nongli.indexOf("年") + 1);
            sb.append(",星期")
                    .append(week)
                    .append(",农历")
                    .append(nongli);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        sb.append("。每天三分钟,读懂全世界!祝:工作愉快,生活喜乐!");
        sb.append("/cbr");
        sb.append("/cbr");
        JSONObject dataObject = objectResult.getJSONObject("data");
        //获取微语
        String weiyu = dataObject.getString("weiyu");
        //获取新闻列表
        JSONArray arrayNews = dataObject.getJSONArray("news");
        int index = 1;
        for (Object o : arrayNews) {
            sb.append(o);
            if (index == 7) {
                sb.append("/cjj公众号:雄雄的小课堂");
            }
            sb.append("/cbr");
            index++;
        }
        sb.append("/cbr");
        sb.append(weiyu);
        sb.append("/cbr");
        sb.append("/cbr");
        sb.append("/cjj公众号:雄雄的小课堂,点击关注,可获得最新消息~");
        sb.append("/cbr");
        sb.append("/cjj小程序:小鱼早晚安打卡,养成良好的早睡早起习惯,坚持打卡可兑换现金。");
        sb.append("/cbr");
        sb.append("/cjj小程序:雄雄的工具箱,全站免广告去水印、图像处理、文字处理等");
        //处理url中的特殊字符
        String encodedUrl = URLEncoder.encode(sb.toString(), StandardCharsets.UTF_8.name());
        log.info("发送的新闻信息:" + encodedUrl);
       //调用发送的接口
       String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_TEXT,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
         log.info("发送新闻信息结果:" + result);
    }

发送图片消息

效果

在这里插入图片描述
注意,message的值为图片的地址,或者本地图片路径或者网络直链。

代码示例:

/**
     * (微信机器人)定时发送每日天气图片到微信群中
     */
    @GetMapping("/sendWetherInfoByDaysImg")
    @Scheduled(cron = " 0 1 9 * * ?")
    public void sendWetherInfoByDaysImg() {
        //获取中央气象台每日天气信息
        JSONObject objectZhongYang = collectWebDataUtils.getZYWetherDay();
        //图片信息
        JSONArray imgList = objectZhongYang.getJSONArray("imgArray");
        for (int i = 0; i < imgList.size() - 1; i++) {
            // 生成一个 1-5 秒之间的随机延迟
            Random random = new Random();
            int delay = random.nextInt(5) + 1; // 生成一个 1-10 的随机整数
            try {
                // 等待随机延迟时间,如果需要换成分钟,则乘以60
                Thread.sleep(delay * 1000);
                String imgPath = imgList.get(i).toString();
                //处理url中的特殊字符
                String encodedUrl = URLEncoder.encode(imgPath, StandardCharsets.UTF_8.name());
                String result = sendMsgToWechat(xunXiWxid, XIAOTANGYUAN_REBOT_IMG, XIAOTANGYUAN_REBOT_APPKEY, encodedUrl);
                log.info("发送天气图片信息结果:" + result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

发送本地文件

效果

在这里插入图片描述

代码示例

 /**
     * (微信机器人)定时发送每日天气图片到微信群中
     */
    @GetMapping("/sendWetherInfoByDaysImg")
    @Scheduled(cron = " 0 1 9 * * ?")
    public void sendWetherInfoByDaysImg() {
       sendMsgToWechat(xunXiWxid, XIAOTANGYUAN_REBOT_IMG, XIAOTANGYUAN_REBOT_APPKEY, "D://muxiongxiong.txt");
    }

对,就这么简单。message为本地文件的路径。

发送xml消息

效果

在这里插入图片描述

在这里插入图片描述

代码示例:

@GetMapping("/sendH5")
    public void sendH5(){
        JSONObject object = new JSONObject();
        //标题
        object.put("title","雄雄的小课堂");
        //描述
        object.put("content","这是内容描述");
        //跳转连接
        object.put("jumpUrl","https://www.88688.team");
        //预览图,需要小于200k
        object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
        String result = sendMsgToWechat(testWxid,3,XIAOTANGYUAN_REBOT_APPKEY,object.toString());
        System.out.println("发送情况:"+result);
    }

其中,message的格式为如下json

{
	  "title":"标题",
	  "content":"这是内容描述",
	  "jumpUrl":"https://www.88688.team",
	  "path":"https://blogobs.88688.team/blog/zaobao_logo.png"
}

设置百度的appkey

主要用于百度文心大模型,在群内可以直接使用;

效果

在这里插入图片描述
在这里插入图片描述

代码

 /**
     * 设置百度的key之类的
     */
    @GetMapping("/sendSetBaiDuKey")
    public void sendSetBaiDuKey(){
        JSONObject object = new JSONObject();
        //标题
        object.put("baiduApiKey","你的");
        //描述
        object.put("baiduSecretKey","你的");
        //处理url中的特殊字符
        try{
            String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
            String result = sendMsgToWechat(testWxid,-1,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送小程序卡片

效果

在这里插入图片描述

代码示例

自己根据我的代码,看下封装的json哈,我都有注释,困了,写完赶紧睡觉,我就不写那么详细了。

/**
     * 发送小程序卡片
     */
    @GetMapping("/sendApplet")
    public void sendApplet(){
        JSONObject object = new JSONObject();
        //标题
        object.put("title","雄雄的工具箱");
        //描述
        object.put("content","一款万能免费的工具箱");
        //点击跳转地址:pages/index/index
        object.put("jumpUrl","pages/index/index");
        //预览图,需要小于200k
        object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
        //原始id gh_4a2xxxxx
        object.put("gh","gh_4axxxxxxx");
        //处理url中的特殊字符
        try{
            String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
            String result = sendMsgToWechat(testWxid,4,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送音乐卡片

效果

在这里插入图片描述

代码

/**
     * 发送音乐卡片
     */
    @GetMapping("/sendMusic")
    public void sendMusic(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("name","好汉歌");
        //作者
        object.put("author","刘欢");
        //appid   例如:酷狗/wx79f2c4418704b4f8,网易云/wx8dd6ecd81906fd84,QQ音乐/wx5aa333606550dfd5
        object.put("app","wx5aa333606550dfd5");
        //点击跳转地址
        object.put("jumpUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
        //音乐地址
        object.put("musicUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
        //图片地址,图片必须小于200k
        object.put("imageUrl","https://y.qq.com/music/photo_new/T002R300x300M000001nYpd82yFZOK_1.jpg");
        //处理url中的特殊字符
        try{
            String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
            String result = sendMsgToWechat(testWxid,5,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送xml文件

效果

在这里插入图片描述

代码

/**
     * 发送xml文件
     */
    @GetMapping("/sendXml")
    public void sendXml(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("title","穆雄雄的博客");
        //描述
        object.put("des","公众号:雄雄的小课堂");
        //链接
        object.put("url","https://www.88688.team");
        //封面
        object.put("thumburl","https://blogobs.88688.team/blog/zaobao_logo.png");
        //来源id,如果是公众号,则是gh_eexxxxxx
        object.put("sourceusername","gh_ee62xxxxc6");
        //来源名字
        object.put("sourcedisplayname","雄雄的小课堂");
        //处理url中的特殊字符
        try{
            String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
            String result = sendMsgToWechat(testWxid,6,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

发送聊天记录

效果图

在这里插入图片描述

代码示例

/**
     * 发送聊天记录
     */
    @GetMapping("/sendRecord")
    public void sendRecord(){
        JSONObject object = new JSONObject();
        //歌曲名称
        object.put("title","公众号:雄雄的小课堂");
        JSONArray array = new JSONArray();
        JSONObject arrayObject = new JSONObject();
        arrayObject.put("wxid","wxid_ehfdzccct22");
        arrayObject.put("nickName","雄雄");
        arrayObject.put("timestamp",System.currentTimeMillis());
        arrayObject.put("msg","你说的是啥小程序来着?雄雄的工具箱");
        array.add(arrayObject);
        object.put("data",array);
        //处理url中的特殊字符
        try{
            String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
            String result = sendMsgToWechat(testWxid,7,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
            log.info("发送信息结果:" + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆雄雄

哎,貌似还没开张来着呢~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值