您现在的位置是:首页 > 正文

实现每日早安推送

2024-01-30 21:23:10阅读 0

做一个程序员给女朋友的浪漫礼物吧

 整个源码已经开放,可在百度网盘进行下载。

链接:https://pan.baidu.com/s/1HdyWEFKxWbdZGp39HkgDVw 
提取码:uvdc


一花了两个多小时,简单介绍一下怎么做的吧,纯后端java,写的比较随意,仅仅达到了功能要求。

所用知识点
1. springboot实现java后台
2.微信接口测试账号的申请
3.微信模版推送的配置
4.接入百度天气api
5.彩虹屁api或者自己写个情话库
6.每日金句api或者自己写个金句库


一、springboot创建java后台


至于springboot怎么创建java后台,我这里就不再唠叨了,大家百度一下,一大堆的文章。这里只需要重点讲解下以下几点。

1.在pom.xml文件里引入下面类库

        <!--微信模版消息推送三方sdk-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

2.核心推送代码如下

import com.alibaba.fastjson.JSONObject;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;

/**
 * @ClassName Pusher
 * @Description TODO
 * @Author Ljc
 * @Date 2022/8/2 16:03
 */
public class Pusher {
    /**
     * 测试号的appId和secret
     */
    private static String appId = "";

    private static String secret = "XXX";
    //模版id
    public static String templateId = "";

    public static void push(String openId) {
        JSONObject todayWeather = Tianqi.getNanjiTianqi();
        //1,配置
        WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
        wxStorage.setAppId(appId);
        wxStorage.setSecret(secret);
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(wxStorage);
        //2,推送消息
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                .toUser(openId)
                .templateId(templateId)
                //.url("https://30paotui.com/")//点击模版消息要访问的网址
                .build();
        //3,如果是正式版发送模版消息,这里需要配置你的信息
        //        templateMessage.addData(new WxMpTemplateData("name", "value", "#FF00FF"));
        //                templateMessage.addData(new WxMpTemplateData(name2, value2, color2));
        //填写变量信息,比如天气之类的
        templateMessage.addData(new WxMpTemplateData("riqi", todayWeather.getString("date") + "  " + todayWeather.getString("week"), "#00BFFF"));
        templateMessage.addData(new WxMpTemplateData("tianqi", todayWeather.getString("text_day"), "#00BFFF"));
        templateMessage.addData(new WxMpTemplateData("low", todayWeather.getString("low") + "", "#7FFFD4"));
        templateMessage.addData(new WxMpTemplateData("high", todayWeather.getString("high") + "", "#FF6347"));
        templateMessage.addData(new WxMpTemplateData("fengxiang", todayWeather.getString("wd_day") + "", "#8A2BE2"));
        templateMessage.addData(new WxMpTemplateData("fengli", todayWeather.getString("wc_day") + "", "#8B0000"));
        templateMessage.addData(new WxMpTemplateData("caihongpi", CaiHongPi.getCaiHongPi(), "#FF69B4"));
        templateMessage.addData(new WxMpTemplateData("lianai", JiNianRi.getLianAi() + "", "#FF1493"));
        templateMessage.addData(new WxMpTemplateData("shengri", JiNianRi.getShengRi() + "", "#FFA500"));
        templateMessage.addData(new WxMpTemplateData("jinju", CaiHongPi.getJinJu() + "", "#C71585"));
        templateMessage.addData(new WxMpTemplateData("jiehun", JiNianRi.getJieHun() + ""));
        String beizhu = "";
        if (JiNianRi.getJieHun() % 365 == 0) {
            beizhu = "今天是结婚纪念日!";
        }
        if (JiNianRi.getLianAi() % 365 == 0) {
            beizhu = "今天是恋爱纪念日!";
        }
        templateMessage.addData(new WxMpTemplateData("beizhu", beizhu, "#FF0000"));
        try {
            System.out.println(templateMessage.toJson());
            System.out.println(wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage));
        } catch (Exception e) {
            System.out.println("推送失败:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

 二、注册微信测试账号,并实现推送功能

1.微信扫码登录下面网址https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login扫码登录成功后,就会给我们生成微信公号的appid和appsecret。

 2.微信扫码关注 测试号二维码,微信给我们返回我们的openid,这个openid在推送时特别重要。因为你推送肯定要知道推送给 谁啊,就比如你打电话,肯定要知道用户的电话号码吧。这个openid就是我们要推送给那个用户的唯一标示。

3.生成自己的模板

参数需以{{开头,以.DATA}}结尾 ,ex:{{caihongpi.DATA}},代码里面替换就可以了

templateMessage.addData(new WxMpTemplateData("caihongpi",CaiHongPi.getCaiHongPi(),"#FF69B4"));

 4.拿到模板id,用户微信号id,就可以推送消息了

三、丰富功能

1.接入百度天气api

控制台 | 百度地图开放平台 (baidu.com)

注册百度开发者,申请开放百度天气的api。具体如何接入网上教程很多,可以自行百度

1、创建应用

2、在设置中设白名单

2.接入彩虹屁的api或者自己开发一个彩虹屁库

彩虹屁的api:天行数据TianAPI - 开发者API数据平台

网上有一些调用彩虹屁库的api,或者自己写一堆情话放在文件里,读取到内存里,用当前的天数取模就可以了。也可以选择早安心语。

 申请接口即可使用

3.纪念日计算

这里写了个粗略的计算方法,计算还有多少天。

public static int before(String date) {
        int day = 0;
        try {
            long time = simpleDateFormat.parse(date).getTime() - System.currentTimeMillis();
            day = (int) (time / 86400000L);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return day;
    }

 计算已经过去多少天。

 /**
     * 已经过去date多少天
     * @param date
     * @return
     */
    public static int after(String date) {
        int day = 0;
        try {
            long time = System.currentTimeMillis() - simpleDateFormat.parse(date).getTime();
            day = (int) (time / 86400000L);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return day;
    }

4.定时任务

写个定时任务每天早上8点起床的时候推送

  @Scheduled(cron = "0 0 8 * * ?")
    public void goodMorning() {
        Pusher.push(openId);
    }

写个定时任务提醒该喝水啦,从10-18点,每个小时发送一次

@Scheduled(cron = "0 0 10-18/1 * * ?")
    public void goodLook() {
        Pusher.push(openId);
    }

网站文章

  • Linux环境下使用阿里云盘 热门推荐

    Linux环境下使用阿里云盘 热门推荐

    一直有个直播推流的想法,那就是把阿里云盘上的视频资源,在不下载到本地的情况下放在服务器上直播推流,这个时候就需要阿里云盘能能支持Linux环境下使用了。 目前阿里云盘官方还没有推出Linux环境下的版...

    2024-01-30 21:23:03
  • 软件测试常用的oracle语句,Oracle 一些常用的语句记录

    1、oracle数据库锁表查询:select db.object_name,sess.sid,sess.serial#,sess.module,sess.action ,'alter system k...

    2024-01-30 21:22:54
  • 本科阶段的一点总结

    先一点随笔大学转眼过去三年,这几年参加了各种比赛,硬件和软件也都做了一些,也靠这些和还算过得去的成绩拿到了保研名额,不过因为一些原因选择留在了本校直接攻读phd。。。 以后应该是学术向+技术向了,所以在这里开个坑,也算是对自己以后的学习的一个记录吧,主攻的方向该是机器学习和人工智能。 之后的博客也主要在这些方向上更新一些博文,或者有一些比较新颖的想法也会放上来和大家交流,决定读phd后感觉自己的

    2024-01-30 21:22:18
  • 【杂谈】网络修复杂谈

    前言断网,是仅次于断水、断电的危机,对于部分依赖于网络的人来说,可能重要性更加突出。这里主要谈一谈网络修复的方法与一些常见的故障。正题首先要知道怎么修复网络,就需要大致了解网络的运作方式,正如一个能够装机的人要会拆机、能够做网络防御的人要懂得网络攻击的原理。这里主要通过对几个名词的解析来大致描述网络的运作方式。由于这里只打算大致讲一下网络的工作方式,过多的说明可能比不上形象的比喻。

    2024-01-30 21:22:09
  • Linux与Windows共享文件、互传文件

    Linux与Windows共享文件、互传文件

    1.设置共享目录通过虚拟机,把一个windows目录共享,让linux可以访问这个目录2.复制文件夹

    2024-01-30 21:22:02
  • MySQL 事务

    在数据修改之前结果就可以被其他事务查看,不可以解决任何问题。

    2024-01-30 21:21:35
  • android后台如何获取客户端传来的值,Android:使用OkHttp框架与后台通讯、获取数据...

    android后台如何获取客户端传来的值,Android:使用OkHttp框架与后台通讯、获取数据...

    摘要:本文介绍了Android应用如何与服务器通讯的一些机制,并分享了笔者的一些开发经验与技巧,经过具体的代码描述OkHttp框架的使用,适合初学者。前端对于初学者来讲,先后端一手抓很常见,若是你想要...

    2024-01-30 21:21:16
  • 计算机主机板开机原理与维修,主机板损坏电脑会出现什么现象

    计算机主机板开机原理与维修,主机板损坏电脑会出现什么现象

    主机板损坏电脑会出现什么现象以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!主机板损坏电脑会出现什么现象音效卡坏了不造成开...

    2024-01-30 21:21:08
  • Android 平滑和立体翻页效果2

    Android 平滑和立体翻页效果2

    http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/Android launcher 的平滑和立体翻页效果我们这里把 Android launcher 程序的 Workspace 相关的代码抽取出来,以一个比较简单的代码来展示 launcher 程序是如何实现多页以及不同页面之间的切换效果。本示例代

    2024-01-30 21:20:40
  • 配置zabbix邮件报警

    配置zabbix邮件报警

    管理–&gt;报警媒介类型–&gt;Email进行配置,点击更新其中密码不是登录密码,是授权码点击测试查看邮箱修改默认报警模板。

    2024-01-30 21:20:33