您的位置:首页 > 移动开发 > 微信开发

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

2017-09-19 20:28 316 查看
转载自:

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();
}
}


实现效果如下:



扫描下方二维码进行关注。或 微信公众号搜索 你我杂志刊

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息