敞开成长之旅!这是我参加「日新方案 12 月更文挑战」的第22天,点击检查活动概况

大家好,我是雄雄。

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

前言

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

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

网上案例

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

java实现每日给女友微信发送早安等微信信息
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");
    }
  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("亲爱的老婆~早\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点给指定的微信老友推送音讯。