本文分享自华为云社区《java完成每日给女友微信发送晨安等微信信息》,作者:穆雄雄 。
前语
听说这个功能最近在抖音上很火,我没有抖音,没有看到。
可是我在掘金和CSDN上看了,相关案例确实许多,可是咱们都是借助于了微信服务号,在我看来,效果很不佳。
其实我本来的初衷是这样的,每天定时给群里推送新闻,这个原因在之前的文章中也提到过,这边就不在细说了,然后完成了给群中推送之后,就想着,能不能每天给指定人发送音讯,网上搜了搜,果然有,各种完成方式五花八门,可是都没看上,于是就自己找了个,自己写。
网上案例
网上最多的或许就是利用微信服务号给推送信息,如图所示:
缺陷如下:
- 需要点进去订阅号才干看到,没哟起到吸引的效果
- 恳求的测试服务号,也不知道多久过期,说停就给你停掉了
- 定制化的需求有的达不到
介于此,我就自己找了一个路子去做,昨晚刚写完,测了测,效果仍是比较不错的。如下图所示:
(有点肉麻~)
完成方式
下面咱们来看看是如何完成的。
预备工作
- 注册智能微秘书账号,花
20
块钱开个会员(20块钱一点都不多) - 注册天行数据的账号,恳求三个接口(晨安寄语、每日新闻、土味情话),也能够自己加入别的有意义的内容,直接恳求接口就行。
- 预备一个微信号,能够用你现在自己的,也能够在恳求一个。
- 预备一个服务器
- 预备一个java项目,放服务器上跑就能够
倘若你的预备工作除4、5之外,都现已做完了,下面咱们来看看如何从代码层面来完成。
完成原理
- [ ] 调用天行数据的
api
,获取自己想要的数据,封装起来 - [ ] 调用只能微秘书的接口,完成给微信老友发送音讯
- [ ] 给控制器
controller
类中增加定时任务,完成定时发送
关键代码如下所示:
1、调用天行数据接口,获取晨安寄语:
/**
* 获取每日晨安寄语
*
*/
public static String getGoodMorning() {
String path = "zaoan/index";
//调用每日简报的接口
String body = HttpUtil
.createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY)
.execute()
.body();
JSONObject jsonObjectResult = JSON.parseObject(body);
Integer code = jsonObjectResult.getInteger("code");
if (code != 200) {
log.error("恳求每日新闻的接口犯错,犯错信息:" + body);
return "一切都是最好的安排~";
}
log.info("恳求每日新闻的接口成功:" + body);
JSONObject resultObject = jsonObjectResult.getJSONObject("result");
return resultObject.getString("content");
}
2、调用天行数据接口,获取土味情话:
/**
* 获取每日土味情话
*
*/
public static String getLoveWords(){
String path = "saylove/index";
//调用每日简报的接口
String body = HttpUtil
.createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY)
.execute()
.body();
JSONObject jsonObjectResult = JSON.parseObject(body);
Integer code = jsonObjectResult.getInteger("code");
if(code!=200){
log.error("恳求每日新闻的接口犯错,犯错信息:"+body);
return "一切都是最好的安排~";
}
JSONObject resultObject = jsonObjectResult.getJSONObject("result");
log.info("恳求每日新闻的接口成功:"+resultObject);
return resultObject.getString("content");
}
3、调用天行数据接口,获取气候预报:
/**
* 获取气候预报
*
*/
public static JSONObject getWeather(){
String path = "tianqi/index";
//调用每日简报的接口
String body = HttpUtil
.createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY+"&type=1&city=370100")
.execute()
.body();
JSONObject jsonObjectResult = JSON.parseObject(body);
Integer code = jsonObjectResult.getInteger("code");
if(code!=200){
log.error("恳求每日新闻的接口犯错,犯错信息:"+body);
return null;
}
return jsonObjectResult.getJSONObject("result");
/*
* {
"code": 200,
"msg": "success",
"result": {
"date": "2022-12-19",
"week": "星期一",
"province": "上海",
"area": "上海",
"areaid": "101020100",
"weather": "晴",
"weatherimg": "qing.png",
"weathercode": "qing",
"real": "3℃",
"lowest": "2℃",
"highest": "9℃",
"wind": "冬风",
"windspeed": "0",
"windsc": "0级",
"sunrise": "06:47",
"sunset": "16:54",
"moonrise": "",
"moondown": "",
"pcpn": "0",
"uv_index": "0",
"aqi": "54",
"quality": "良",
"vis": "18",
"humidity": "48",
"alarmlist": [
],
"tips": "晴天紫外线等级较高,外出留意补水防晒。气候凉,适宜着一到两件羊毛衫、大衣、毛套装、皮夹克等春秋着装;年老体弱者宜着风衣加羊毛衫等厚型春秋着装。空气质量较好,能够参与各类户外活动。疫情防控不松懈,出门请佩带口罩。"
}
}
* */
}
日期处理关键代码
1、获取今日是周几
/**
* 获取汉字的今日周几
* @param dateTime
* @return
* @throws ParseException
*/
public static String getDaysByWeekChina(String dateTime) throws ParseException {
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse(dateTime);
cal.setTime(date);
int day = cal.get(Calendar.DAY_OF_WEEK);
day = day - 1;
//周的汉字
String week = "";
switch (day) {
case 0:
week = "日";
break;
case 1:
week = "一";
break;
case 2:
week = "二";
break;
case 3:
week = "三";
break;
case 4:
week = "四";
break;
case 5:
week = "五";
break;
case 6:
week = "六";
break;
}
return week;
}
2、获取纪念日的天数(两个日期之间的差):
/**
* 得到二个日期间的间隔天数
*
* @param date1
* @param date2
* @return
*/
public static int getDayByTwoDay(String date1, String date2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
Long day = 0L;
try {
java.util.Date date = myFormatter.parse(date1);
java.util.Date mydate = myFormatter.parse(date2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return 0;
}
return day.intValue();
}
完成给指定微信老友推送音讯
/**
* 每天将指定信息推送到微信个人
*/
@Override
public void sendWechatToUser() {
String url = WEI_MI_SHU_API + "/openapi/v1/chat/contact";
WeiZhiMiShuVO weiZhiMiShuVO = new WeiZhiMiShuVO();
//发送文字信息
weiZhiMiShuVO.setType(1);
try {
//拿到发送的音讯列表
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat format_h = new SimpleDateFormat("yyyy-MM-dd");
//今日的日期
String toDate = format_h.format(new Date());
//相恋的日期
String lian = "2022-03-28";
//两个日期相差的天数
int cha = DateUtils.getDayByTwoDay(toDate, lian);
String todayDate = format.format(new Date());
//根据阳历核算农历
Calendar today = Calendar.getInstance();
String week = DateUtils.getDaysByWeekChina(toDate);
today.setTime(DateUtils.chineseDateFormat.parse(todayDate));
DateUtils lunar = new DateUtils(today);
String nongli = lunar.toString();
nongli = nongli.substring(nongli.indexOf("年") + 1);
StringBuilder sb = new StringBuilder();
sb.append("亲爱的老婆~早\n\n")
.append("充满希望的一天又开端了,今日也要一向高兴,不能生我气气~")
.append("\n\n今日是:")
.append(todayDate)
.append(",星期")
.append(week)
.append(",农历")
.append(nongli)
.append("\n")
.append("是咱们相爱的第:")
.append(cha)
.append("天")
.append("\n\n")
;
JSONObject tianqiObject = TianXingApiUtil.getWeather();
sb.append("目前济南气候:")
.append(tianqiObject.getString("weather"))
.append("\n")
.append("当前气温:")
.append(tianqiObject.getString("real"))
.append("\n")
.append("今日最高温度:")
.append(tianqiObject.getString("highest"))
.append("\n")
.append("最低温度:")
.append(tianqiObject.getString("lowest"))
.append("\n")
.append("风向:")
.append(tianqiObject.getString("wind"))
.append("\n")
.append("空气质量:")
.append(tianqiObject.getString("quality"))
.append("\n")
.append("空气质量指数:")
.append(tianqiObject.getString("aqi"))
.append("\n")
.append("小提示:")
.append(tianqiObject.getString("tips"));
//土味情话
sb.append("\n\n")
.append("爱你一日言:")
.append(TianXingApiUtil.getLoveWords())
.append("\n\n【晨安寄语】")
.append(goodMorning());
weiZhiMiShuVO.setContent(sb.toString());
for (String str : SEND_USER) {
JSONObject object = new JSONObject();
object.put("apiKey", WEI_MI_SHU_KEY);
//老友昵称
object.put("name", str);
//老友补白
object.put("alias", str);
object.put("message", weiZhiMiShuVO);
String body = HttpUtil.createPost(url)
.body(JSON.toJSONString(object))
.execute()
.body();
System.out.println("传递的参数是:" + JSON.toJSONString(object));
System.out.println("发送成功了吗?" + body);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
说明:
-
WeiZhiMiShuVO
类能够参考文章:java完成给微信群中定时推送音讯 - 代码中涉及到的常量,都放在了常量类中,
SEND_USER
是要发给微信老友的老友昵称,不是补白哈。 - 智能微秘书接口地址:接口地址
然后咱们在控制器controller
中调用该方法即可完成:
/**
* 发送音讯给指定的人
*/
@GetMapping(value = "/sendWechatToUser")
@Scheduled(cron ="0 0 8 * * ?")
public void sendWechatToUser(){
articleService.sendWechatToUser();
}
cron ="0 0 8 * * ?
是一个corn表达式,表示每天早上8点给指定的微信老友推送音讯。
点击重视,第一时间了解华为云新鲜技术~