写点什么

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

  • 2022-12-24
    中国香港
  • 本文字数:5231 字

    阅读完需:约 17 分钟

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

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

前言


据说这个功能最近在抖音上很火,我没有抖音,没有看到。但是我在掘金和 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");    }
复制代码


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 点给指定的微信好友推送消息。


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

发布于: 刚刚阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
还在手动发早安,教你用java实现每日给女友微信发送早安_Java_华为云开发者联盟_InfoQ写作社区