java实现给微信群中定时推送消息
Posted 穆雄雄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现给微信群中定时推送消息相关的知识,希望对你有一定的参考价值。
大家好,我是雄雄。
前言
上一篇,我们介绍了如何通过调用接口的方式,将每日新闻发送到自己的博客中。我们会发现,将新闻以文章的形式发布,并且相关内容按照markdown
的形式进行格式调整,有需要的可以点击这里查看:如何将每日新闻添加到自己博客中
今天,我们看看如何将每日新闻推送到自己的社群中。
准备工作
- 你可以没有自己的博客,但是你需要跑一个
springboot
的项目(java
环境下,别的语言另说,不过需要在服务器上跑) - 你已经申请了天行数据的【每日新闻简报】接口
- 你项目中引入了
hutool
的maven
,因为需要用它来请求接口 - 本位是以
springboot
项目来介绍的,别的实现方式也基本上一样,大家可以简单做个修改。 - 注册智能微秘书的账号,能够有权限调用
openapi
接口,不然无法实现给群里面发送消息。 - 如果不想用自己的微信号来发送,则还需要准备一个别的微信好。
- 有自己的服务器。
以上准备工作是个基础,如果你是个几年的程序员的话,上面基本上没啥问题,如果有其他问题的,可以私信我,或者评论区留言。
注册智能微秘书
准备工作的1 2 3 4我就不做介绍了,2我在上篇文章中介绍过,现在我们介绍一下4,因为我们要想给微信群或者好友发消息,离不开一个技术wechaty
,而如果我们自己去研究它,不值得,晦涩难懂(我自己去看过)
所以我们借助这个跳板去操作,它就是智能微秘书,它将wechaty
封装了下,我们直接调用它提供的api
即可实现,非常简单。
首先我们打开智能微秘书,地址:这里
然后我们需要拿到这个key
,调用接口的时候需要用到,在个人中心的里面就有
然后接下来我们写后端代码,实现给微信群中发送消息。
代码实现
/**
* 将每日新闻推送到微信群中
* @return
*/
@Override
public void sendWechat(JSONObject contentObject)
String url = WEI_MI_SHU_API + "/openapi/v1/chat/room";
WeiZhiMiShuVO weiZhiMiShuVO = new WeiZhiMiShuVO();
weiZhiMiShuVO.setType(1);
//拿到发送的消息列表
JSONArray array = contentObject.getJSONArray("list");
StringBuilder sb = new StringBuilder("今天是:" + contentObject.getString("todayDate") + ",早安🌞🌞🌞");
int index = 1;
for (Object o : array)
JSONObject item = (JSONObject) o;
//标题加时间
sb.append("\\n")
.append(index)
.append(".")
.append(item.getString("title"))
.append("\\n");
;
/* .append("[")
.append(item.getString("mtime"))
.append("]")
.append("\\n");*/
index++;
sb.append("\\n详情请点击:https://88688.team/articles/")
.append(contentObject.getString("aid"))
.append(" 查看~\\n");
sb.append("\\n【早安寄语】")
.append(goodMorning());
System.out.println("发送的消息为:" + sb.toString());
weiZhiMiShuVO.setContent(sb.toString());
for (String str : SEND_GROUP)
JSONObject object = new JSONObject();
object.put("apiKey", WEI_MI_SHU_KEY);
object.put("roomName", str);
object.put("message", weiZhiMiShuVO);
HttpUtil
.createPost(url)
.body(JSON.toJSONString(object))
.execute()
.body()
;
代码说明:
WEI_MI_SHU_API
是接口地址- 这个接口我传了个
JSONObject
对象过来,里面存放的是新闻的标题列表,时间,然后在接口中对该列表进行遍历。 - 【早安寄语】直接调用天行数据api的接口就行,封装方法一样。
apiKey
为智能微秘书的roomName
是你要发送的群名称message
是发送内容的对象,我这边新建了个实体
WeiZhiMiShuVO
实体的代码如下:
package com.shiyi.vo;
import lombok.Data;
/**
* @author: muxiongxiong
* @date: 2022年12月17日 21:26
* 公众号:雄雄的小课堂
* 博客:https://blog.csdn.net/qq_34137397
* 个人站:https://www.穆雄雄.com
* 个人站:https://www.muxiongxiong.cn
* @Description: 发送群消息的实体类(微秘书)
*/
@Data
public class WeiZhiMiShuVO
/**
* 消息类型:1 文字 2 图片url 3 图片base64 4 url卡片链接
*/
private Integer type;
/**
* 消息内容,如果type为1必填,内容换行使用\\n
*/
private String content;
/**
* type 为2,3,4必填,图片地址,或者文件地址,例如png,jpg或者zip,excel都可以,必须是网络地址
*/
private String url;
/**
* type 为4必填,卡片链接的描述
*/
private String description;
/**
* type 为4必填,卡片链接的缩略图,网络图片地址
*/
private String thumbnailUrl;
/**
* type 为4必填,卡片标题内容
*/
private String title;
然后我们在控制器controller
中,写个接口调用一下该service
即可,定时顺便也加上。
/**
* 获取每日新闻
* @Scheduled 表示定时,每天早上5点执行
* @param
* @return
*/
@GetMapping(value = "/getDaysNews")
@Scheduled(cron ="0 20 5 * * ?")
// @Scheduled(cron ="0/1 * * * * ?")
public ResponseResult getDaysNews()
return articleService.getDaysNews();
这样就实现了每天早上凌晨5.20给微信群众推送消息了。
以上是关于java实现给微信群中定时推送消息的主要内容,如果未能解决你的问题,请参考以下文章