因爲本身閒着的時候寫了一個微信公衆平臺的小應用 也參考了不少別人的源碼 再此感謝那些被我參考過的大神們
html
本着開源的精神 http://git.oschina.net/bddiudiu/wechat_Spring 個人項目也開源了 大部分都是參考了 智雲同窗的項目 java
項目目前部署與新浪SEA 訪問地址 http://diuwx.sinaapp.com git
好了 很少說微信的這個項目 咱們來說一下 如何整合百度的API一塊兒進來 順便也給本身往後留下一些痕跡json
首先咱們查看百度車聯網的API頁面 咱們找到咱們須要的天氣接口 同時咱們也申請一個ak key 具體申請KEY這裏就不說了api
獲得KEY 以及 api的url和各類參數 咱們開始將百度的天氣接口整合進咱們的項目微信
百度的這個接口,咱們要在項目中模擬一次http提交.app
既然這樣 那咱們就看一下他的url提交地址微信公衆平臺
http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=yourkey
看一下地址咱們就會看出來,這個url須要拼接3個參數.工具
location 咱們須要查詢的城市url
output 返回給咱們的數據格式
ak 咱們的 ak key
固然他還有別的參數 咱們這裏暫時不用.
好 知道了url以後咱們在項目中新建一個工具類 咱們就叫他baiduutil.java
而後咱們新建3個參數
private static String api = "http://api.map.baidu.com/telematics/v3/weather?"; private static String output = "json"; private static String ak = "your key";
而後 咱們寫一個方法 就是向百度提交url
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())); String line = br.readLine(); while (line != null) { result += line; line = br.readLine(); } br.close(); return result; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
以上的代碼將會返回來一段json數據.固然若是你的output是xml你獲得的就是xml格式的.
下面咱們就須要解析這返回來的json數據
{ "error":0, "status":"success", "date":"2014-05-09", "results":[ { "currentCity":"\u5317\u4eac", "weather_data":[ { "date":"\u5468\u4e94(\u4eca\u5929, \u5b9e\u65f6\uff1a19\u2103)", "dayPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/day\/yin.png", "nightPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/night\/yin.png", "weather":"\u9634", "wind":"\u5fae\u98ce", "temperature":"20 ~ 14\u2103" }, { "date":"\u5468\u516d", "dayPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/day\/zhenyu.png", "nightPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/night\/xiaoyu.png", "weather":"\u9635\u96e8\u8f6c\u5c0f\u96e8", "wind":"\u5fae\u98ce", "temperature":"19 ~ 11\u2103" }, { "date":"\u5468\u65e5", "dayPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/day\/xiaoyu.png", "nightPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/night\/qing.png", "weather":"\u5c0f\u96e8\u8f6c\u6674", "wind":"\u5fae\u98ce", "temperature":"19 ~ 10\u2103" }, { "date":"\u5468\u4e00", "dayPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/day\/qing.png", "nightPictureUrl":"http:\/\/api.map.baidu.com\/images\/weather\/night\/qing.png", "weather":"\u6674", "wind":"\u5fae\u98ce", "temperature":"28 ~ 14\u2103" } ] } ] }
以上就是百度返回給咱們的json格式.
咱們使用Gson來解析.
首先新建3個類
class Status{ private String error; private String status; private String date; private List<Results> results; } class Results{ private String currentCity; private List<Weather> weather_data; } class Weather{ private String date; private String dayPictureUrl; private String nightPictureUrl; private String weather; private String wind; private String temperature; }
並生成get/set方法.
而後 咱們使用Gson來解析 傳進來的JSON字符串是 json
Gson gson = new Gson(); Status status = gson.fromJson(json, Status.class);
而後下面就是本身去獲取 status裏面的內容 而後返回到 微信公衆平臺