关键词:
公众号推送早安问候以及天气预报(JAVA)
① 概述
功能点
-
每天早上可以给指定的微信用户推送消息,经过公众号
-
可以使用第三方接口丰富推送的消息内容
- 百度天气api:添加天气信息推送
- 天行数据api:添加美句、彩虹屁等语句推送
- 通过后台计算纪念日推送
- …
-
效果图
技术栈点
- spring boot实现后台
- 微信测试账号的申请
- 微信模版推送的配置
- 对接百度天气api
- 对接彩虹屁api
- 对接优美句子api
源码开放
② 注册微信测试账号,编辑推送模板
-
使用微信扫码登录此网站https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login就能得到一个微信公众号测试号
-
推送消息需要用到的信息
-
用户扫码关注得到用户的id
-
编辑消息模板
-
此步骤的模板id、用户微信号id、以及自己的appID、appsecret是后续推送所需要用到的
③ 使用spring boot 做后台开发,并且与第三方对接
使用第三方接口——控制台 | 百度地图开放平台 (baidu.com)
-
在百度地图开放平台注册账号,并且到控制台中的应用创建一个应用(其中应用AK是推送需要使用到的)
-
设置ip白名单为0.0.0.0/0
使用第三方接口——天行数据TianAPI - 开发者API数据平台
spring boot后台开发
-
创建spring boot项目,创建教程
-
导入需要的依赖
<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.3.0</version> </dependency> </dependencies>
-
编写对接百度天气api 的工具类
天气的实体类
/** * @author cVzhanshi * @create 2022-08-04 2215 */ @Data @AllArgsConstructor @NoArgsConstructor public class Weather String wd_night; String date; String high; String week; String text_night; String wd_day; String low; String wc_night; String text_day; String wc_day; // 当前天气 String text_now; // 当前温度 String temp; // 风级大小 String wind_class; // 风向 String wind_dir;
/** * @author cVzhanshi * @create 2022-08-04 22:02 */ public class WeatherUtils public static void main(String[] args) System.out.println(getWeather()); public static Weather getWeather() RestTemplate restTemplate = new RestTemplate(); Map<String,String> map = new HashMap<String,String>(); map.put("district_id","320583"); // 地方行政代码 map.put("data_type","all");//这个是数据类型 map.put("ak","自己的应用AK"); String res = restTemplate.getForObject( "https://api.map.baidu.com/weather/v1/?district_id=district_id&data_type=data_type&ak=ak", String.class, map); JSONObject json = JSONObject.parseObject(res); JSONArray forecasts = json.getJSONObject("result").getJSONArray("forecasts"); List<Weather> weathers = forecasts.toJavaList(Weather.class); JSONObject now = json.getJSONObject("result").getJSONObject("now"); Weather weather = weathers.get(0); weather.setText_now(now.getString("text")); weather.setTemp(now.getString("temp")); weather.setWind_class(now.getString("wind_class")); weather.setWind_dir(now.getString("wind_dir")); return weather;
-
编写对接天行数据(彩虹屁)api的工具类
/** * @author cVzhanshi * @create 2022-08-04 22:58 */ public class CaiHongPiUtils public static String getCaiHongPi() String httpUrl = "http://api.tianapi.com/caihongpi/index?key=接口的key"; BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); try URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setRequestMethod("GET"); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) sbf.append(strRead); sbf.append("\\r\\n"); reader.close(); result = sbf.toString(); catch (Exception e) e.printStackTrace(); JSONObject jsonObject = JSONObject.parseObject(result); JSONArray newslist = jsonObject.getJSONArray("newslist"); String content = newslist.getJSONObject(0).getString("content"); return content; public static Map<String,String> getEnsentence() String httpUrl = "http://api.tianapi.com/ensentence/index?key=接口的key"; BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); try URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setRequestMethod("GET"); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) sbf.append(strRead); sbf.append("\\r\\n"); reader.close(); result = sbf.toString(); catch (Exception e) e.printStackTrace(); JSONObject jsonObject = JSONObject.parseObject(result); JSONArray newslist = jsonObject.getJSONArray("newslist"); String en = newslist.getJSONObject(0).getString("en"); String zh = newslist.getJSONObject(0).getString("zh"); Map<String, String> map = new HashMap<>(); map.put("zh",zh); map.put("en",en); return map;
-
编写计算纪念日的工具类
public class JiNianRiUtils public static int getLianAi() return calculationLianAi("2022-12-11"); public static int getBirthday_Jo() try return calculationBirthday("2009-03-09"); catch (ParseException e) e.printStackTrace(); return 0; public static int getBirthday_Hui() try return calculationBirthday("2020-01-11"); catch (ParseException e) e.printStackTrace(); return 0; // 计算生日天数 public static int calculationBirthday(String clidate) throws ParseException SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); Calendar cToday = Calendar.getInstance(); // 存今天 Calendar cBirth = Calendar.getInstance(); // 存生日 cBirth.setTime(myFormatter.parse(clidate)); // 设置生日 cBirth.set(Calendar.YEAR, cToday.get(Calendar.YEAR)); // 修改为本年 int days; if (cBirth.get(Calendar.DAY_OF_YEAR) < cToday.get(Calendar.DAY_OF_YEAR)) // 生日已经过了,要算明年的了 days = cToday.getActualMaximum(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR); days += cBirth.get(Calendar.DAY_OF_YEAR); else // 生日还没过 days = cBirth.get(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR); // 输出结果 if (days == 0) return 0; else return days; // 计算天数 public static int calculationLianAi(String date) DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); int day = 0; try long time = System.currentTimeMillis() - simpleDateFormat.parse(date).getTime(); day = (int) (time / 86400000L); catch (ParseException e) e.printStackTrace(); return day;
-
编写推送类
/** * @author cVzhanshi * @create 2022-08-04 21:09 */ public class Pusher public static void main(String[] args) push(); private static String appId = "xx"; private static String secret = "xx"; public static void push() //1,配置 WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage(); wxStorage.setAppId(appId); wxStorage.setSecret(secret); WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxStorage); //2,推送消息 WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() .toUser("用户微信id") .templateId("消息模板id") .build(); //3,如果是正式版发送模版消息,这里需要配置你的信息 Weather weather = WeatherUtils.getWeather(); Map<String, String> map = CaiHongPiUtils.getEnsentence(); templateMessage.addData(new WxMpTemplateData("riqi",weather.getDate() + " "+ weather.getWeek(),"#00BFFF")); templateMessage.addData(new WxMpTemplateData("tianqi",weather.getText_now(),"#00FFFF")); templateMessage.addData(new WxMpTemplateData("low",weather.getLow() + "","#173177")); templateMessage.addData(new WxMpTemplateData("temp",weather.getTemp() + "","#EE212D")); templateMessage.addData(new WxMpTemplateData("high",weather.getHigh()+ "","#FF6347" )); templateMessage.addData(new WxMpTemplateData("windclass",weather.getWind_class()+ "",
公众号微信推送天气教程,自动定时推送java版开发者教程and纯小白教程(代码片段) ...备2.面向开发者3.面向小白4.联系作者通用准备1.1申请微信公众号点击跳转申请得到这个页面:滑到下面,扫码关注公众号新增模板,【中文】的可以改,xxx.DATA不能改,但可以移动位置。first.DATA城市:city.DATA实... 查看详情
微信公众号推送天气教程,自动定时推送java版开发者和小白详细教程(代码片段)
...开目录:1.通用准备2.面向开发者通用准备1.1申请微信公众号点击跳转申请得到这个页面:滑到下面,扫码关注公众号新增模板,【中文】的可以改,xxx.DATA不能改,但可以移动位置。first.DATA城市:city.DATA实 查看详情
微信公众测试号推送天气(最近超火的小玩意)给女友一个满满的爱(代码片段)
...人一个不一样的浪漫1.前期准备1.1下载项目:1.2微信公众测试号申请1.3在记事本记录数据1.3.1记录appID和appsecret数据1.3.2记录template_id数据1.3.3记录user数据1.3.4记录tianxing_API2.安装依赖1.前期准备1.1下载项目:下载:百度... 查看详情
微信公众测试号推送天气(最近超火的小玩意)给女友一个满满的爱(代码片段)
...人一个不一样的浪漫1.前期准备1.1下载项目:1.2微信公众测试号申请1.3在记事本记录数据1.3.1记录appID和appsecret数据1.3.2记录template_id数据1.3.3记录user数据1.3.4记录tianxing_API2.安装依赖1.前期准备1.1下载项目:下载:百度... 查看详情
最能打动人心的早安问候「温馨甜蜜」
打动人心的早安问候 任何人收到早安都是一件非常甜蜜的事情,当早上醒来打开手机看到你发来了温馨的早安问候,我相信任何人都会晃动一下自己的内心。那么我们如何把早安问候这件事情做到最能打动人心... 查看详情
微信消息推送神器pushplus介绍,让消息推送更简单(代码片段)
...实现了一些有意思的小功能。如设备报警消息推送、每日天气预报和大盘资讯简报推送等,使用的是微信官方的api。后台使用golang做了个简单的服务,操作使用上是有点儿麻烦。原生实现微信消息推送需要申请公众号、... 查看详情
微信每日早安推送(代码片段)
七夕到啦,做一个程序员给女朋友的浪漫礼物吧。整个源码已经开放,GitHub地址:ydzhao-reyes/weixin-tuisong(github.com)一个摸鱼的下午,简单介绍一下怎么做的吧,纯后端java,写的比较随意,仅仅达到了功能... 查看详情
简单使用java实现微信公众号推送模板消息
原文链接: https://blog.csdn.net/qq_41936224/article/details/108076005以下例子是简单的使用Java代码实现微信公众号推送模板消息,不包含跳转到小程序网页代码1、pom.xml文件中添加依赖<!--lombok--><depend 查看详情
微信公众测试号推送天气(最近超火的小玩意)给女友一个满满的爱(代码片段)
...人一个不一样的浪漫1.前期准备1.1下载项目:1.2微信公众测试号申请1.3在记事本记录数据1.3.1记录appID和appsecret数据1.3.2记录template_id数据1.3.3记录user数据1.3.4记录tianxing_API2.安装依赖1.前期准备1.1下载项目:下载:百度... 查看详情
java对接微信公众号模板消息推送(代码片段)
...c;又很凑巧让我来完成:首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 不过请注意这一点ok,我们继续:再来完成公众号的基 查看详情
微信消息推送神器pushplus介绍,让消息推送更简单(代码片段)
...实现了一些有意思的小功能。如设备报警消息推送、每日天气预报和大盘资讯简报推送等,使用的是微信官方的api。后台使用golang做了个简单的服务,操作使用上是有点儿麻烦。原生实现微信消息推送需要申请公众号、... 查看详情
微信消息推送神器pushplus介绍,让消息推送更简单(代码片段)
...实现了一些有意思的小功能。如设备报警消息推送、每日天气预报和大盘资讯简报推送等,使用的是微信官方的api。后台使用golang做了个简单的服务,操作使用上是有点儿麻烦。原生实现微信消息推送需要申请公众号、... 查看详情
小红书程序员七夕礼物-微信每日早安推送简单部署一键启动(代码片段)
本文来自 小红书大佬七夕节的礼物 原版大佬的代码,配置有些分散,我将其统一转移到了配置文件中,方便配置。打包部署遇到了些问题,这边修改了一下。也增加了docker启动,简化部署。后面将介绍如何... 查看详情
公众号开发之wx-tools+springboot应用实战-音乐爬虫推送[java](代码片段)
天啦噜!微信公众号开发如此简单!竟然是因为……当然是因为wx-tools啦!springboot+wx-tools实践!音乐爬虫推送公众号DEMOGitHub地址:wx-tools最终DEMO源码地址:music_collector先理一下大概的开发步骤:创建一个... 查看详情
java微信公众号消息推送(从零开始)(代码片段)
1.前期准备1.首先需要的是一个能正常运营的微信公众号或者订阅号,根据微信公众平台,使用已授权的用户登录,获取对应的appId和开发者密码appSecret得到appId和AppSecret是为了后续调用微信官方接口必不可少的参数... 查看详情
java对接微信公众号模板消息推送
...务需求,又很凑巧让我来完成:首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 不过请注意这一点 ok,我们继续:再来完成公众号的基本配置: ... 查看详情
微信公众号推送的图文消息里面的正文可以插入html标签吗?比如iframea
参考技术A微信公众号推送的图文消息里面的正文可以插入标签吗?比如iframea首先,公众号的图文编辑是不能编辑代码的,不过,可以使用第三方的编辑工具编辑一些漂亮的图文,然后复制到公众号的信息!其次,即便使用上述... 查看详情
java实现每日给女友微信发送早安等微信信息(代码片段)
...不佳。其实我原来的初衷是这样的,每天定时给群里推送新闻,这个原因在之前的文章中也提到过,这边就不在细说了,然后实现了给群中推送之后,就想着,能不能每天给指定人发送消息,网上搜了... 查看详情