国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

中國天氣網 API

2019-11-06 07:46:00
字體:
來源:轉載
供稿:網友

中國天氣網 API

《真正的中國天氣api接口xml, json》詳解


前言

某天想寫個天氣軟件,于是上網找找有沒有免費的天氣 API 。發現許多的API不是收費,就是不能用了(心塞塞)。最后找到這篇文章 真正的中國天氣api接口xml,json(求加精) … 心里那個高興啊,終于找到一個能用的天氣 API 了。 用瀏覽器試了一下,確實不錯,作者曬出的API都是能用的。于是便寫代碼搗鼓解析 API 返回的 xml


問題

代碼如下

public class WeatherApiDataGetter { public static void main(String[] args) { // xmlContent 用來存儲 API 返回的 xml 中的所有內容 StringBuilder xmlContent = new StringBuilder(); try { // 將 API 地址包裝成 URL // 101010100 是北京的城市代碼 URL weatherUrl = new URL("http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100"); // 獲取 URL 連接 URLConnection urlConnection = weatherUrl.openConnection(); // 獲取 URL 連接的輸入流對象,以 UTF-8 的編碼格式打開流, // 并包裝成 BufferedReader 對象以提高讀取速率 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(), "UTF-8") ); // 讀取流中的所有內容 String line; while ((line = bufferedReader.readLine()) != null) { xmlContent.append(line); } } catch (IOException e) { e.PRintStackTrace(); } // 輸出 xml 中的所有內容 System.out.println(xmlContent); }}

結果 這里寫圖片描述 沒錯,亂碼

好吧,我們換一種編碼試試,換成 GBK 編碼

// 獲取 URL 連接的輸入流對象,以 GBK 的編碼格式打開流,// 并包裝成 BufferedReader 對象以提高讀取速率BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(), "GBK"));

結果 這里寫圖片描述 還是不行誒

好吧,我們再試一種編碼吧,這次是 Unicode 編碼

// 獲取 URL 連接的輸入流對象,以 Unicode 的編碼格式打開流,// 并包裝成 BufferedReader 對象以提高讀取速率BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(), "Unicode"));

結果 這里寫圖片描述 糾結…… 為什么瀏覽器可以,我直接讀取又不可以?一定是我的大家方式不對


探索

既然瀏覽器可以查看 API 返回的 xml ,那肯定用了什么特殊的方法

我們來嘗試著研究一下

首先,從瀏覽器打開 API 網址 http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100

其次,我們打開瀏覽器后按 F12 打開瀏覽器的開發者工具(我這里用的是360極速瀏覽器,可能其他的瀏覽器快捷鍵不一樣)。 再次,點擊 NetWord 選項。這個選項可以記錄瀏覽器在打開網頁時的所有的行為。 然后,我們刷新一下網址,這樣就能把瀏覽器的行為記錄下來了

結果 這里寫圖片描述

很好,瀏覽器做的事很簡單,先選擇第一個。看名字就知道,這個是我們剛剛打開的網址。 選擇右邊的 Headers ,我們一行一行地研究,于是發現這行

Content-Encoding:gzip

原來 API 返回的是 gzip 格式的文件,這樣就終于知道自己獲取的流為什么亂碼了。

了解更多關于瀏覽器 F12Netword 選項

模擬瀏覽器登陸 - 百度搜索

關于 gzip 格式的簡單介紹

gzip 小結

解決

我們重新改改代碼,把流對象用 GZIPInputStream 包裝一下

// 獲取 URL 連接的輸入流對象,然后包裝成 GZIPInputStream 對象,// 再包裝成 BufferedReader 對象以提高讀取速率BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( new GZIPInputStream(urlConnection.getInputStream())/*, "UTF-8"*/ // 實測可以不指定編碼方式 ));

結果 這里寫圖片描述 嗯,這下總算是正確了

后記

剩下的就是解析了 xml 了。 另外,城市代碼可以參考如下網址

城市ID列表

實測部分城市不可用。具體可以自己一個一個去試,當然也可以下載下面的示例

下載包含以下內容的示例

通過城市代碼獲取 xml 文本解析 xml 內容所有可用城市列表
上一篇:動態多態

下一篇:各大OJ題目分類

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景洪市| 绵竹市| 龙门县| 浦东新区| 江阴市| 昆山市| 阿尔山市| 台东市| 腾冲县| 万荣县| 静安区| 文山县| 商都县| 扎兰屯市| 建德市| 通辽市| 黔南| 深州市| 崇明县| 平邑县| 广宗县| 绥阳县| 尚志市| 定日县| 垦利县| 永兴县| 永胜县| 屏东市| 台中市| 南涧| 楚雄市| 庆云县| 旅游| 土默特右旗| 金秀| 辰溪县| 绥芬河市| 茌平县| 工布江达县| 阆中市| 苗栗市|