做一个程序员给女朋友的浪漫礼物吧
整个源码已经开放,可在百度网盘进行下载。
链接: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文件里引入下面类库
com.github.binarywangweixin-java-mp3.3.0com.alibabafastjson1.2.83
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";//模版idpublic 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” />
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 * * " />
写个定时任务提醒该喝水啦,从10-18点,每个小时发送一次
@Scheduled(cron = "0 0 10-18/1 * * ?")public void goodLook() {Pusher.push(openId);}