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

前言
据说这个功能最近在抖音上很火,我没有抖音,没有看到。
但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳。
其实我原来的初衷是这样的,每天定时给群里推送新闻,这个原因在之前的文章中也提到过,这边就不在细说了,然后实现了给群中推送之后,就想着,能不能每天给指定人发送消息,网上搜了搜,果然有,各种实现方式五花八门,但是都没看上,于是就自己找了个,自己写。
网上案例
网上最多的可能就是利用微信服务号给推送信息,如图所示:

缺点如下:

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

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

(有点肉麻~)
实现方式
下面我们来看看是如何实现的。
准备工作

注册智能微秘书账号,花20块钱开个会员(20块钱一点都不多)
注册天行数据的账号,申请三个接口(早安寄语、每日新闻、土味情话),也可以自己加入别的有意义的内容,直接申请接口就行。
准备一个微信号,可以用你现在自己的,也可以在申请一个。
准备一个服务器
准备一个java项目,放服务器上跑就可以

假使你的准备工作除4、5之外,都已经做完了,下面我们来看看如何从代码层面来实现。
实现原理

调用天行数据的api,获取自己想要的数据,封装起来
调用只能微秘书的接口,实现给微信好友发送消息
给控制器controller类中添加定时任务,实现定时发送

关键代码如下所示:

调用天行数据接口,获取早安寄语:

/**

 * 获取每日早安寄语
 *
 */
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");
}

复制代码

调用天行数据接口,获取土味情话:

/**

 * 获取每日土味情话
 *
 */
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");
}

复制代码

调用天行数据接口,获取天气预报:

/**
 * 获取天气预报
 *
 */
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": "晴天紫外线等级较高,外出注意补水防晒。天气凉,适宜着一到两件羊毛衫、大衣、毛套装、皮夹克等春秋着装;年老体弱者宜着风衣加羊毛衫等厚型春秋着装。空气质量较好,可以参与各类户外活动。疫情防控不松懈,出门请佩戴口罩。"
          }
        }
    * */
}

复制代码
日期处理关键代码

获取今天是周几

/**

 * 获取汉字的今天周几
 * @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;
}

复制代码

获取纪念日的天数(两个日期之间的差):

/**

 * 得到二个日期间的间隔天数
 *
 * @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点给指定的微信好友推送消息。作者:穆雄雄链接:https://juejin.cn/post/717988...来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(后端java)