还在手动发早安吗?教你用java实现每日给女友微信发送早安

在手,早安,教你用,java,实现,每日,女友,发送 · 浏览次数 : 376

小编点评

**获取今天是周几** * 提取汉字的今天周几 * 每个周的汉字 String week = \"\"; switch (day) { case 0: // 日,... break; case 1: // 一,... break; case 2: // 二,... break; case 3: // 三,... break; case 4: // 四,... break; case 5: // 五,... break; case 6: // 六,... break; } return week; **实现给指定微信好友推送消息** * 每天将指定信息推送到微信个人 * 创建JSONObject对象,包含apiKey、昵称、备注、消息等信息 * 创建Post请求,设置参数和消息体 * 执行请求,输出响应信息 * 打印传递的参数和发送成功的信息 **接口地址** * 接口地址然后我们在控制器controller中调用该方法即可实现: * ``` @GetMapping(value = \"/sendWechatToUser\") @Scheduled(cron =\"0 0 8 * * ?\") public void sendWechatToUser(){ articleService.sendWechatToUser(); } ``` **其他** * WeiZhiMiShuVO类可以参考文章:java实现给微信群中定时推送消息代码中涉及到的常量,都放在了常量类中 * SEND_USER是要发给微信好友的好友昵称,不是备注哈

正文

摘要:教你如何用java实现每日给女友微信发送早安等微信信息。

本文分享自华为云社区《java实现每日给女友微信发送早安等微信信息》,作者:穆雄雄 。

前言

据说这个功能最近在抖音上很火,我没有抖音,没有看到。

但是我在网上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳。

其实我原来的初衷是这样的,每天定时给群里推送新闻,这个原因在之前的文章中也提到过,这边就不在细说了,然后实现了给群中推送之后,就想着,能不能每天给指定人发送消息,网上搜了搜,果然有,各种实现方式五花八门,但是都没看上,于是就自己找了个,自己写。

网上案例

网上最多的可能就是利用微信服务号给推送信息,如图所示:

缺点如下:

  • 需要点进去订阅号才能看到,没哟起到吸引的作用
  • 申请的测试服务号,也不知道多久过期,说停就给你停掉了
  • 定制化的需求有的达不到

介于此,我就自己找了一个路子去做,昨晚刚写完,测了测,效果还是比较不错的。如下图所示:

(有点肉麻~)

实现方式

下面我们来看看是如何实现的。

准备工作

  1. 注册智能微秘书账号,花20块钱开个会员(20块钱一点都不多)
  2. 注册天行数据的账号,申请三个接口(早安寄语、每日新闻、土味情话),也可以自己加入别的有意义的内容,直接申请接口就行。
  3. 准备一个微信号,可以用你现在自己的,也可以在申请一个。
  4. 准备一个服务器
  5. 准备一个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();
 }
 }

说明:

  1. WeiZhiMiShuVO类可以参考文章:java实现给微信群中定时推送消息
  2. 代码中涉及到的常量,都放在了常量类中,SEND_USER是要发给微信好友的好友昵称,不是备注哈。
  3. 智能微秘书接口地址:接口地址

然后我们在控制器controller中调用该方法即可实现:

/**
     * 发送消息给指定的人
     */
 @GetMapping(value = "/sendWechatToUser")
 @Scheduled(cron ="0 0 8 * * ?")
 public void sendWechatToUser(){
 articleService.sendWechatToUser();
 }

cron ="0 0 8 * * ?是一个corn表达式,表示每天早上8点给指定的微信好友推送消息。

 

点击关注,第一时间了解华为云新鲜技术~

与还在手动发早安吗?教你用java实现每日给女友微信发送早安相似的内容:

还在手动发早安吗?教你用java实现每日给女友微信发送早安

摘要:教你如何用java实现每日给女友微信发送早安等微信信息。 本文分享自华为云社区《java实现每日给女友微信发送早安等微信信息》,作者:穆雄雄 。 前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我在网上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳

Apifox:成熟的测试工具要学会自己写接口文档

好家伙, 在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功能, 在接口的测试完成后,它可以一键生成接口文档 下载地址(免费哟): Apifox -

ASP.NET Core Web中使用AutoMapper进行对象映射

前言 在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射库就随之而出了,这些库可以自动完成对象之间的映射,从而减少大量的开发工作量,提高开发工

Python开发中自动化构建项目结构样式

摘要:在项目开发过程中,一个良好的项目结构对于团队的协作和代码的可维护性起着重要作用。通过使用自动生成项目结构文字样式的工具。不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性。 本文分享自华为云社区《【Python】自动化构建项目结构样式》,作者: frica01。 引言 在使用 Py

[转帖]RAID 5写带宽11.7GB/s:当SAS 24G阵列卡嵌入PCIe Switch

https://zhuanlan.zhihu.com/p/576562821 引言:在SAS/SATA RAID卡开始转向Tri-Mode即支持NVMe之后,关于软硬RAID哪个更好的讨论还在继续。而Broadcom和Microchip这两家大厂的手里,正好都掌握着PCIe Switch芯片技术。不

cookie、session,、token,还在傻傻分不清?

摘要:session 和 token 本质上是没有区别的,都是对用户身份的认证机制,只是他们实现的校验机制不一样而已。 本文分享自华为云社区《Session/Cookie/Token 还傻傻分不清?》,作者: 龙哥手记。 相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 toke

Intel Pentium III CPU(Coppermine, Tualatin) L2 Cache Latency, Hardware Prefetch特性调查

这几天,偶然的机会想到了困扰自己和其他网友多年的Intel Pentium III系列处理器缓存延迟(L2 Cache Latency),以及图拉丁核心版本是否支持硬件预取(Hardware Prefetch)问题。 手头的支持图拉丁核心处理器的i815主板还在正常服役中,铜矿和图拉丁核心处理器也都

[转帖]Bash脚本编程学习笔记07:循环结构体

https://www.cnblogs.com/alongdidi/p/bash_loop_construct.html 本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文《Bash脚本编程学习笔记03:算术运算》中我有说明不要使用,不过自己忘记了。大家还

可重入锁思想,设计MQ迁移方案

如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。 这是一种比较特例的场景,需要保证切换的MQ消息不被两端同时消费,并且还需要在一段消费失败后的MQ还可以继

个人数据保全计划:(1) NAS开箱

前言 从几年前第一个硬盘故障导致参赛的文件丢失之后,我就开始意识到数据安全的重要性,开始用各种云盘做备份,当时还不是百度云一家独大,我们也都没意识到网盘备份是极其不靠谱的行为,直到因为某些不可抗力因素,一夜之间所有网盘都宣布停服,这时才意识到,数据始终是掌握在自己手中才安全可控。 随着数据量增大,我