您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java实现每日给女友微信发送早安等微信信息

时间:2022-12-24 11:02:49  来源:稀土掘金  作者:穆雄雄

前言

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

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

网上案例

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

 


 

缺点如下:

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

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

 

(有点肉麻~)

实现方式

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

准备工作

  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");
    }
复制代码
  1. 调用天行数据接口,获取土味情话:
/**
     * 获取每日土味情话
     *
     */
    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");
    }
复制代码
  1. 调用天行数据接口,获取天气预报:

    /**
     * 获取天气预报
     *
     */
    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;
    }
复制代码
  1. 获取纪念日的天数(两个日期之间的差):

 /**
     * 得到二个日期间的间隔天数
     *
     * @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("亲爱的老婆~早nn")
                    .append("充满希望的一天又开始了,今天也要一直开心,不能生我气气~")
                    .append("nn今天是:")
                    .append(todayDate)
                    .append(",星期")
                    .append(week)
                    .append(",农历")
                    .append(nongli)
                    .append("n")
                    .append("是我们相爱的第:")
                    .append(cha)
                    .append("天")
                    .append("nn")

            ;
            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("nn")
                    .append("爱你一日言:")
                    .append(TianXingApiUtil.getLoveWords())
                    .append("nn【早安寄语】")
                    .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点给指定的微信好友推送消息。


作者:穆雄雄
链接:
https://juejin.cn/post/7179886787706224695
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



Tags:Java   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
了解这33个JavaScript概念绝对会让你将来的职业生涯受益无穷。话不多说,直接进入主题!1. 调用栈 调用栈是解释器(如web浏览器中的JavaScript解释器)跟踪其在调用多个函数的脚本...【详细内容】
2022-12-24  Tags: Java  点击:(4)  评论:(0)  加入收藏
前言据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳。其实我原来的初衷...【详细内容】
2022-12-24  Tags: Java  点击:(0)  评论:(0)  加入收藏
日常办公和软件开发除了可以使用Windows系统以外,还可以使用macOS系统,至于具体使用什么系统取决于你入职公司之后公司给你发的什么电脑,如果是MacBookPro那么就使用macOS开...【详细内容】
2022-12-23  Tags: Java  点击:(5)  评论:(0)  加入收藏
作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!一、前言 Java学到什么程度可以找工作?最近总看到类似这样的问题,也有一些工作3年左右的小伙...【详细内容】
2022-12-23  Tags: Java  点击:(14)  评论:(0)  加入收藏
本文讨论了对 HTML 代码可视化文档的需求,并提供了一个免费的 API 解决方案,可将 HTML 字符串转换为 PNG 屏幕截图。 自 20 世纪 80 年代后期的构想以来,超文本标记语言 (HTML)...【详细内容】
2022-12-21  Tags: Java  点击:(10)  评论:(0)  加入收藏
JavaScript奇淫技巧:隐写术本文将用JavaScript实现“图片隐写术”。什么是隐写术?将文本或其它数据写入图片的技术,称为“隐写术”。比如下面这张图中,便隐藏着秘密信息,虽然看起...【详细内容】
2022-12-11  Tags: Java  点击:(17)  评论:(0)  加入收藏
问题Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码:int num = 0;boolean ready = false;// 线程1 执行此方法public void actor1(I_Result r) { if(ready) { r...【详细内容】
2022-12-05  Tags: Java  点击:(19)  评论:(0)  加入收藏
面试题在之前的内容中我们介绍了字符串。同时,也介绍了字符串的拼接操作,并且分析了几种字符串拼接方式的原理。其实在java8中还提供了一种新的字符串操作方式。就是今天我们...【详细内容】
2022-12-02  Tags: Java  点击:(29)  评论:(0)  加入收藏
1、 我代码就加了一行log日志,结果引发了P1的线上事故2、14个SpringBoot优化小妙招,看完后同事说写代码像写诗!3、 干掉 “重复代码”,这三种方式绝了!4、 我在代码里面故意留个...【详细内容】
2022-12-01  Tags: Java  点击:(14)  评论:(0)  加入收藏
摘要:在前不久刚发布的 GitHub 年度报告中,Java 依旧是最受程序员欢迎的编程语言,而想要成为一名优秀的 Java 程序员,这 7 个 GitHub 代码库可能会提供助力。链接:https://java.p...【详细内容】
2022-11-29  Tags: Java  点击:(11)  评论:(0)  加入收藏
▌简易百科推荐
前言据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳。其实我原来的初衷...【详细内容】
2022-12-24  穆雄雄  稀土掘金  Tags:Java   点击:(0)  评论:(0)  加入收藏
日常办公和软件开发除了可以使用Windows系统以外,还可以使用macOS系统,至于具体使用什么系统取决于你入职公司之后公司给你发的什么电脑,如果是MacBookPro那么就使用macOS开...【详细内容】
2022-12-23  ittirneline  今日头条  Tags:Java   点击:(5)  评论:(0)  加入收藏
本文讨论了对 HTML 代码可视化文档的需求,并提供了一个免费的 API 解决方案,可将 HTML 字符串转换为 PNG 屏幕截图。 自 20 世纪 80 年代后期的构想以来,超文本标记语言 (HTML)...【详细内容】
2022-12-21   qaseven   网易号  Tags:Java   点击:(10)  评论:(0)  加入收藏
我们在日常开发中,经常会用到一个系统需要链接多个数据库来实现业务的需求,比如多个系统之间数据调用、两个数据之间同步等等。今天给大家分享使用Hutool-db实现多数据源配...【详细内容】
2022-12-19  IT技术分享社区  今日头条  Tags:hutool-db   点击:(10)  评论:(0)  加入收藏
问题Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码:int num = 0;boolean ready = false;// 线程1 执行此方法public void actor1(I_Result r) { if(ready) { r...【详细内容】
2022-12-05  JAVA旭阳  今日头条  Tags:JAVA   点击:(19)  评论:(0)  加入收藏
面试题在之前的内容中我们介绍了字符串。同时,也介绍了字符串的拼接操作,并且分析了几种字符串拼接方式的原理。其实在java8中还提供了一种新的字符串操作方式。就是今天我们...【详细内容】
2022-12-02  架构师面试宝典  今日头条  Tags:Java8   点击:(29)  评论:(0)  加入收藏
1、 我代码就加了一行log日志,结果引发了P1的线上事故2、14个SpringBoot优化小妙招,看完后同事说写代码像写诗!3、 干掉 “重复代码”,这三种方式绝了!4、 我在代码里面故意留个...【详细内容】
2022-12-01  Happy Eng Class    Tags:Java   点击:(14)  评论:(0)  加入收藏
统计用户在线人数在统计用户在人数的时候,我们用到了监听器,监听器大致分为以下三种: ServletRequestListener:用于监听请求的监听接口 HttpSessionListener:用于监听...【详细内容】
2022-11-18  Java精选  网易号  Tags:Java   点击:(26)  评论:(0)  加入收藏
Java多线程的实现方式Java程序中,常见有4种方式实现多线程①继承Thread类②实现Runnable接口③实现Callable接口④使用Executor框架在JDK5之前,创建线程有2种方式,一种是继承Th...【详细内容】
2022-11-17  Esgoon  今日头条  Tags:Java   点击:(34)  评论:(0)  加入收藏
一、ssh登录服务器1、在终端(这里的终端版本我使用的是 SecureCrt-8.5.4)中输入连接命令ssh root@[ipaddress]。您需要将其中的 ipaddress 替换为您的服务器的公网IP地址。例...【详细内容】
2022-11-14  快乐的芒果mf  今日头条  Tags:欧拉系统   点击:(112)  评论:(0)  加入收藏
站内最新
站内热门
站内头条