中國氣象網 氣象數據開放平台 API用法 (Android)


因為要做個天氣應用。須要找個天氣的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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM