摘要:教你如何用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();}

实现给指定微信好友推送消息

 /*** 每天将指定信息推送到微信个人*/@Overridepublic 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实现每日给女友微信发送早安相关推荐

  1. 不注册微服务号如何使用Java实现每日给女友微信发送早安等信息?

    前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到. 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳. 其实我原来的初衷是这样的,每天定时给 ...

  2. java实现每日给女友微信发送早安等微信信息

    大家好,我是雄雄. 前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到. 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳. 其实我原来的初衷 ...

  3. 企业微信每日给女友推送早安,5分钟快速部署,腾讯云部署版本,每日定时发送,天气,鸡汤,纪念日等信息,可自定义通知提醒名称,聊天界面可置顶,内容可查图片。

    企业微信每日给女朋友推送早安,5分钟快速部署,每日定时发送,天气,鸡汤,纪念日等信息,可自定义通知提醒名称,聊天界面可置顶,内容可查图片. 先看效果 直接开搞 准备工作 1.企业id 2.企业应用se ...

  4. 还在手动发包?手把手教你 Jenkins 自动化部署SpringBoot

    大家好,我是一航! 程序员每天的工作,几乎都是围绕着开发.打包.发布.测试这些点循环往复,但这些过程中,有很大一部分重复性的苦力活,不仅消耗了我们大量的时间,但有不得不做:纯手工去集成.部署,既苦力, ...

  5. 都9012年了,你还在手动部署代码吗(二)

    前言 在写完基于 Webhooks 的"第一篇<都9012年了,你还在手动部署代码吗>"之后,有同学评论到"至少你得用个 docker 啊"&quo ...

  6. 归纳推理测试没做完_朋友买了1斤紫菜,2年还没吃完,我教他这样做,2个月就吃完了...

    朋友买了1斤紫菜,2年还没吃完,我教他这样做,2个月就吃完了 紫菜成熟啦,这段时间回老家,都会看到紫菜养殖户脸上挂着笑容,因为今年的紫菜收成还不错.回家就为了拿紫菜,因为紫菜成熟的季节,朋友圈都在卖紫 ...

  7. 微信 发送图片 服务器上,公安提醒:微信发照片,千万别传原图”!5个步骤教你隐藏位置信息...

    原标题:公安提醒:微信发照片,千万别传"原图"!5个步骤教你隐藏位置信息 你与陌生人之间,可能只是一张照片的距离.有时候一张"原图"照片,分分钟就暴露了你的信息 ...

  8. excel修改列名_听说你还在手动合并Excel,看看这个吧!?

    Excel合并的应用场景 工作中,常常遇到将多个Excel进行合并的任务.例如,将各位参会人员的报名表合并成一张总的参会人员表,或是将不同客户的需求明细合并为一种总表. 常规的做法是新建一个空白的Ex ...

  9. 日了。这个竟然还不让发

    我们发原创的带网址 www.uuwiwi.com还不让发. 现在不知道博客好了没有 www.uuwiwi.com . 在则就是 bet365这些 入 www.bet365.com不能发!!!

最新文章

  1. LCA 求 树中两个点的距离
  2. HashMap实现中文分词器
  3. python中numpy是什么_什么是NumPy?
  4. mysql中文时间转换,MySQL 当中 日期 字符串 时间戳互转
  5. DWM1000 收发RXLED TXLED控制代码修改
  6. [ACM] hdu 2177 取(2堆)石子游戏(威佐夫博弈)
  7. 9.判断回文数(力扣leetcode) 博主可答疑该问题
  8. 基于qgis和arcgis进行CAD转GIS操作
  9. 苹果锁屏 android,全网超火的苹果动态锁屏,安卓也能设置了,还有超多样式随意切换...
  10. xss基础认证钓鱼代码收集
  11. 《提问的智慧》 - 懒人的脑图
  12. 【读书笔记】《曾国藩的正面与侧面(三)》
  13. mysql commit阶段,MySQL 基本架构与日志两阶段提交
  14. 2022年全球市场混合筒仓总体规模、主要生产商、主要地区、产品和应用细分研究报告
  15. mac新建文件夹快捷键
  16. 您是否在找这样的软件:
  17. xsplit PHP扩展
  18. Python判断能否组成三角形
  19. 数据结构,为何是工程师最重要的基本功?
  20. linux复制/移动ls |head -n 10 |xargs -i cp -r {} /target文件夹中前10个文件

热门文章

  1. 发布/部署相关技术概念普及
  2. Wordpress搭建社交型小游戏网站10大步骤
  3. 圆梦,手写了个操作系统
  4. 为何16寸的笔记本电脑开始兴起?
  5. Charles配置https
  6. 小程序地图实现+地图标点+获取实时定位
  7. Nvidia MX150安装Tensorflow-GPU版,Pycharm使用Keras
  8. 201009128_Dawning_配置Jboss常见问题
  9. 激励自己的短句文案乾坤未定你我皆是黑马
  10. 数学建模学习(88):飞蛾扑火算法(WFO)寻优