首页 > 编程语言 >微信公众号推送每日天气(Java版)

微信公众号推送每日天气(Java版)

时间:2024-10-12 09:52:08浏览次数:6  
标签:set Java String get 微信 import new 推送 data

准备工作

公众号必须经过企业认证,个人公众号的无法使用 这是

获取到微信公众号的appId、secret

网址贴这儿了:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

image

还有测试的模板

image

申请每日一言,我这里使用的彩虹屁,地址:https://www.tianapi.com/apiview/181#apicode

申请之后 每天可以免费调用100次接口,这个Key保存好,一会儿要用

image

接下来申请 聚合数据,获取天气信息,每天免费调用50次 网址: https://dashboard.juhe.cn/data/index/my

image

这个Key保存好,一会儿要用

前期工作准备完,正式开始

	导入微信推送maven依赖
	<dependency>
		<groupId>com.github.binarywang</groupId>
		<artifactId>weixin-java-miniapp</artifactId>
		<version>4.1.0</version>
	</dependency>

创建个Util类 WeatherUtil

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class WeatherUtil {

    //微信小程序
    private static String appId = "你的appId";
    private static String secret = "你的secret";
    //彩虹屁Key
    private static String caiHongPiKey = "你申请的key";
    //聚合Key
    public static String juHeKey = "你申请的key";

    public static void main(String[] args) throws Exception {
        getWeather2();
    }

    /**
     * 彩虹屁 https://www.tianapi.com/apiview/181#apicode
     * 每天免费获取100次接口调用
     * @return 一条彩虹屁的文案
     * @throws Exception
     */
    public static String caiHongPi() throws Exception {
        String tianapi_data = "";
        //调用的key
        String key = caiHongPiKey;
        try {
            URL url = new URL( "https://apis.tianapi.com/caihongpi/index?key=" + key);
            HttpURLConnection  conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setDoOutput(true);
            conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
            OutputStream outputStream = conn.getOutputStream();
            outputStream.flush();
            outputStream.close();
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader (inputStream, StandardCharsets.UTF_8);
            BufferedReader bufferedReader = new BufferedReader (inputStreamReader);
            StringBuilder tianapi = new StringBuilder();
            String temp = null;
            while ( null != (temp = bufferedReader.readLine())){
                tianapi.append(temp);
            }
            //结果
            tianapi_data = tianapi.toString();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 解析 JSON 响应
        JsonObject jsonObject = JsonParser.parseString(tianapi_data).getAsJsonObject();
        // 提取 result 对象
        JsonObject result = jsonObject.getAsJsonObject("result");

        // 获取 city 和 realtime 数据
        String content = result.get("content").getAsString();
        return content;
    }


    /**
     * 聚合数据,获取天气信息,每天免费调用50次   网址: https://dashboard.juhe.cn/data/index/my
     * @return 数据map
     * @throws Exception
     */
    public static Map<String, String> juHeWeather() throws Exception {
        //调用的key
        String apiKey = juHeKey;
        String apiUrl = "http://apis.juhe.cn/simpleWeather/query";

        HashMap<String, String> map = new HashMap<>();
        map.put("key", apiKey);
        //城市 具体到城市,我家邯郸的,就以邯郸为例了
        map.put("city", "邯郸");

        URL url = new URL(String.format(apiUrl + "?key=" + apiKey + "&city=邯郸"));
        BufferedReader in = new BufferedReader(new InputStreamReader((url.openConnection()).getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // 解析 JSON 响应
        String jsonResponse = response.toString();
        JsonObject jsonObject = JsonParser.parseString(jsonResponse).getAsJsonObject();

        // 提取 result 对象
        JsonObject result = jsonObject.getAsJsonObject("result");

        // 获取 city 和 realtime 数据
        String city = result.get("city").getAsString();
        JsonObject realtime = result.getAsJsonObject("realtime");
        String temperature = realtime.get("temperature").getAsString();
        String humidity = realtime.get("humidity").getAsString();
        String info = realtime.get("info").getAsString();
        String direct = realtime.get("direct").getAsString();
        String power = realtime.get("power").getAsString();

        String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
// 正常返回结果,未获取全部信息   {"reason":"查询成功!","result":{"city":"邯郸","realtime":{"temperature":"22","humidity":"29","info":"晴","wid":"00","direct":"东南风","power":"2级","aqi":"43"},"future":[{"date":"2024-10-10","temperature":"13\/22℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"东北风转南风"},{"date":"2024-10-11","temperature":"12\/26℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"南风转西南风"},{"date":"2024-10-12","temperature":"14\/26℃","weather":"多云转阴","wid":{"day":"01","night":"02"},"direct":"南风"},{"date":"2024-10-13","temperature":"14\/25℃","weather":"多云转晴","wid":{"day":"01","night":"00"},"direct":"南风"},{"date":"2024-10-14","temperature":"13\/28℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"南风"}]},"error_code":0}

        // 打印结果

        Map<String,String> resultMap = new HashMap<>();
        resultMap.put("today",today);
        resultMap.put("city",city);
        resultMap.put("temperature",temperature);
        resultMap.put("humidity",humidity);
        resultMap.put("info",info);
        resultMap.put("direct",direct);
        resultMap.put("power",power);

        return resultMap;
    }

    /**
     * 微信小程序
     * @throws Exception
     */
    public static void getWeather2() throws Exception {
        // 配置微信小程序的配置存储 appid,secret
        WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
        wxMaConfig.setAppid(appId);
        wxMaConfig.setSecret(secret);

        // 创建微信小程序服务实例
        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(wxMaConfig);

        // 获取 access_token
        String accessToken = wxMaService.getAccessToken();
        System.out.println("Access Token: " + accessToken);


        // 组装要发送的数据
        JSONObject body = new JSONObject();
        // 要推给谁
        body.set("touser", "微信用户id,可以配置多个");
        // 模板ID
        body.set("template_id", "你申请的模板id");
        String content = caiHongPi();
        Map<String, String> weatherInfo = juHeWeather();


        // 创建消息和内容,这里可以自己定义,对应好模板就行
        JSONObject data = new JSONObject();
        data.set("today", new JSONObject().set("value", weatherInfo.get("today")));
        data.set("city", new JSONObject().set("value", weatherInfo.get("city")));
        data.set("temperature", new JSONObject().set("value", weatherInfo.get("temperature")));
        data.set("humidity", new JSONObject().set("value",weatherInfo.get("humidity")));
        data.set("info", new JSONObject().set("value", weatherInfo.get("info")));
        data.set("direct", new JSONObject().set("value", weatherInfo.get("direct")));
        data.set("power", new JSONObject().set("value", weatherInfo.get("power")));
        data.set("content", new JSONObject().set("value", content));

        //上面对应的模板
//        日期:{{today.DATA}}
//        城市:{{city.DATA}}
//        当前温度:{{temperature.DATA}}
//        当前湿度:{{humidity.DATA}}
//        天气信息:{{info.DATA}}
//        风向:{{direct.DATA}}
//        风力:{{power.DATA}}
//        每日一句:{{content.DATA}}

        body.set("data", data);
		//实现推送到用户消息
        String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken, body.toString());
        //返回内容:{"errcode":0,"errmsg":"ok","msgid":3673554580824145925}  对应的消息id
        System.out.println(post);

    }

  //最后调用 getWeather2() 该方法就

标签:set,Java,String,get,微信,import,new,推送,data
From: https://www.cnblogs.com/promiseforyou/p/18459052

相关文章

  • Java在图片上写字生成新图片的代码实现
    引言在图像处理领域,有时我们需要在图片上添加文字,以生成带有特定信息的新图片。Java作为一种功能强大的编程语言,提供了多种库和工具来实现这一需求。本文将详细介绍如何使用Java在图片上写字,并生成一张新的图片。准备工作在开始编写代码之前,我们需要确保已经安装了Java开......
  • taozige/Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码
    云快充协议+云快充1.5协议+云快充1.6+云快充协议开源代码+云快充底层协议+云快充桩直连+桩直连协议+充电桩协议+云快充源码介绍云快充协议+云快充1.5协议+云快充1.6+云快充协议开源代码+云快充底层协议+云快充桩直连+桩直连协议+充电桩协议+云快充源码软件架构1、提供云快......
  • 【Java】创建对象的几种方式
    【Java】创建对象的几种方式合集-Java基础(11)1.【Java】Integer包装类缓存(cache)05-092.【java】Java之关于基本数据类型和引用数据类型的存放位置05-093.【java】ArrayList和LinkedList的区别05-104.【java】【集合类】HashMap与HashTable的区别05-105.【Java】的四种引用......
  • java计算机毕业设计管易tms运输智能监控管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在现代物流行业中,运输管理系统的智能化与高效化已成为提升企业竞争力的关键因素之一。随着电子商务和快递业务的迅猛发展,货物运输量急剧增加,传统的人......
  • java计算机毕业设计电子导游系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,人们对于旅游体验的需求日益多样化和个性化。传统的导游方式已难以满足现代游客对于信息获取、行程规划及互动体验的需求。在此......
  • java计算机毕业设计M站内容管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,各类在线服务平台应运而生,为用户提供便捷、高效的服务体验。M站内容管理系统作为一种专门为管理网站内容设计的系统,其重要......
  • java+vue计算机毕设高教教师考核系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今高等教育快速发展的背景下,高校教师作为知识传授与科研创新的重要力量,其工作表现与贡献评估显得尤为关键。传统的高校教师考核方式往往依赖于纸......
  • java+vue计算机毕设个人事务管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和个人生活节奏的加快,个人事务管理变得越来越复杂和繁琐。传统的纸质记录或简单的电子文档管理方式已难以满足现代人对于高效......
  • java+vue计算机毕设高校教师科研文献管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校教师科研活动日益频繁,产生的科研文献数量急剧增加。传统的文献管理方式,如纸质存档、简单的电子文档存储等,已难以满足当前......
  • 深入解析Spring AI框架:在Java应用中实现智能化交互的关键
    今天我们的SpringAI源码分析主题即将结束。我已经对自己感兴趣的基本内容进行了全面的审视,并将这些分析分享给大家。如果你对这个主题感兴趣,可以阅读以下几篇文章。每篇文章都层层递进,深入探讨相关内容。考虑到长文可能让大家感到疲惫,我采用了逐步推进的方式,确保每一篇都简明易懂......