因為要做個天氣應用。須要找個天氣的API。上網上搜了下都是那幾個,並且基本都過時了。百度有個天氣API,只是貌似僅僅能提供當天的。網上提到的中國氣象接口的文章,大都用的時舊API,有的被封了,有的永遠停到了2014年3月24不更新了。
后來找到了中國天氣的新接口,已經升級成氣象數據開放平台了http://openweather.weather.com.cn/。沒有開發人員社區或論壇什么的,僅僅能自己琢磨他的文檔了(感覺沒人維護。。)。
經過幾個疑難點卡住后。總算調通了。
現分享給大家。
1.申請keys
首先注冊賬號。然后填資料等審核(還要身份證。
。。)。話說審核真是慢,我等了一個星期才審核通過,之后就有了自己的Key了,這個請求天氣數據時會用到。
2.申請服務
審核通過后,就能夠去產品中心那申請接口了。眼下有兩種:常規氣象數據接口與基礎氣象數據接口。
差別在於常規的比基礎的城市多。至於價錢么,不要300/年,不要30/年,如今大優惠僅僅需0/年,常規氣象數據接口帶回家:P。
3.研讀API文檔
有JAVA的演示樣例代碼能夠參考,主要包括key加密的內容。能夠直接用,其它請求等須要自己寫。
請求用get,解析用json,沒什么難點,主要是加密這。。。
這個加密之前也沒怎么太上心看,結果看暈了,卡了不少時間。
主要加密由public_key與private_key結合,作為key這個參數,一起傳遞過去。
傳遞URL格式例如以下:
http://open.weather.com.cn/data/?areaid="areaid"&type="type"&date="date"&appid="appid_six"&key="key"
參數介紹:
areaid:城市地區代碼,官方有表格提供。能夠考慮用101010100(北京)
type:請求數據的類型:指數:index_f(基礎接口);index_v(常規接口); 3天預報:forecast_f(基礎接口);forecast_v(常規接口);我用的forecast_v
date:當前時間 格式yyyyMMddHHmm 如201506051423
appid:這是個坑。這塊正式請求時,用的是appid的前六位,我在這卡了非常久。。
。僅僅有作為public_key時才用完整的appid,后邊會說
key:到了這個復雜的東西了。這塊用到三個東西來完畢,首先:
private_key:申請到的那個key
public_key:格式例如以下。與傳遞的URL類似但不同,其一在於沒有key參數,其二在於appid使用的是完整的appid。這非常重要
http://open.weather.com.cn/data/?areaid="areaid"&type="type"&date="date"&appid="appid_full"
然后有個這兩個之后,使用提供的java演示樣例代碼中的standardURLEncoder(public_key。private_key),將公鑰和私鑰結合為key參數
之后基本就能夠收到返回的天氣信息了。
4.解析天氣信息
返回的json信息就不多說了,官方提供的文檔有相應的解釋,就是參數都是c1,c2...fa,fb,fc之類的,太不人性化了。
在這遇到的主要問題是。返回的漢子亂碼。。
。。
預計可能時因為和server端使用的編碼不同,不是utf-8。。
。。。
並且官方啥都沒說。。。。。
沒辦法,我就僅僅能苦逼的一個一個編碼嘗試,用了好多種方法解碼總算是還原為漢字了。方法例如以下:
byte[] converttoBytes = weather.city.getBytes("ISO-8859-1"); String s1 = new String(converttoBytes); System.out.println(s1); weather.city = s1;經過測試,傳來的漢字格式竟然是ISO-8859-1的?(此處如理解有錯誤,請指正)好吧。感覺非常奇葩--!
到這大家基本就都能順利調通了吧,相信小伙伴都沒問題的
項目地址:https://github.com/rsy210/MyWeather
轉載請注明出處哈http://blog.csdn.net/lqc1992/article/details/46375567