微信公众号开发--天气预报(Java版)

来源:互联网 发布:根号在c语言中怎么表示 编辑:程序博客网 时间:2024/05/22 09:04

转载自:
http://www.codeweblog.com/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0%E6%95%B4%E5%90%88%E7%99%BE%E5%BA%A6%E5%A4%A9%E6%B0%94api/
首先需要到百度地图API上申请一个专用key,申请链接为
http://lbsyun.baidu.com/apiconsole/key
这里写图片描述
然后创建一个用于请求天气API的类。

package com.zhenqi.weather;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.List;import com.google.gson.Gson;import com.zhenqi.entity.Results;import com.zhenqi.entity.Status;import com.zhenqi.entity.Weather;public class BaiDuWeather {    private static String api = "http://api.map.baidu.com/telematics/v3/weather?";    private static String output = "json";    private static String ak = "你前面百度地图API上申请的key";    public static String getSend(String str) {        // 将传进来的城市转码        try {            str = URLEncoder.encode(str, "utf-8");        } catch (Exception e) {            e.printStackTrace();        }        // 拼接url        StringBuffer buf = new StringBuffer();        buf.append("location=");        buf.append(str);        buf.append("&output=");        buf.append(output);        buf.append("&ak=");        buf.append(ak);        String param = buf.toString();        // 这是接收百度API返回的内容        String result = "";        String urlName = api + param;        URL realUrl;        try {            realUrl = new URL(urlName);            // 打开和URL之间的连接            URLConnection conn = realUrl.openConnection();            conn.setDoInput(true);            BufferedReader br = new BufferedReader(new InputStreamReader(                    conn.getInputStream(),"UTF-8"));            String line = br.readLine();            while (line != null) {                result += line;                line = br.readLine();            }            br.close();            Gson gson = new Gson();            Status status = gson.fromJson(result, Status.class);            List<Results> results=status.getResults();            StringBuffer bf=new StringBuffer();            for(int i=0;i<results.size();i++){                Results res=results.get(i);                List<Weather> weather_data=res.getWeather_data();                for(int j=0;j<weather_data.size();j++){                    Weather weather=weather_data.get(j);                    String date=weather.getDate();                    String weath=weather.getWeather();                    String temp=weather.getTemperature();                    bf.append(date+" ");                    bf.append(weath+" ");                    bf.append(temp+" ");                    bf.append("\n");                }            }            return bf.toString();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    public static void main(String[] args) {        String json=getSend("广州");        System.out.println(json);    }}

我们请求返回的json数据封装在Javabean对象里。
Weather.java

package com.zhenqi.entity;public class Weather {    private String date;    private String dayPictureUrl;    private String nightPictureUrl;    private String weather;    private String wind;    private String temperature;    //由于篇幅,省略set/get方法,可以使用IDE自动生成它们}

Results.java

package com.zhenqi.entity;import java.util.List;public class Results {    private String currentCity;    private List<Weather> weather_data;    //由于篇幅,省略set/get方法,可以使用IDE自动生成它们}

Status.java

package com.zhenqi.entity;import java.util.List;public class Status{    private String error;    private String status;    private String date;    private List<Results> results;    //由于篇幅,省略set/get方法,可以使用IDE自动生成它们}

而后微信请求消息的servlet中添加如下代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        req.setCharacterEncoding("UTF-8");        resp.setCharacterEncoding("UTF-8");        PrintWriter out = resp.getWriter();        try {            Map<String,String> map = MessageUtil.xmlToMap(req);            String toUserName = map.get("ToUserName");            String fromUserName = map.get("FromUserName");            String msgType = map.get("MsgType");            String content = map.get("Content");                String message = null;            //MessageUtil.MESSAGE_TEXT就是 text            if(MessageUtil.MESSAGE_TEXT.equals(msgType)){                if(content.endsWith("天气")){                    String keyWord = content.replaceAll("天气", "").trim();                    message = MessageUtil.initText(toUserName, fromUserName,BaiDuWeather.getSend(keyWord));                }            }            out.print(message);          }catch (Exception e) {            // TODO: handle exception,            e.printStackTrace();            out.close();        }        }

实现效果如下:
这里写图片描述
扫描下方二维码进行关注。或 微信公众号搜索 你我杂志刊
这里写图片描述

原创粉丝点击