搜尋
首頁php教程php手册全國天氣預報介面呼叫範例

基於JAVA的全國天氣預報介面呼叫範例
step1:選擇本文範例的介面"全國天氣預報介面" url:https://www.juhe.cn/docs/api/id/39/aid/87
step2:每個介面都需要傳入一個參數key,相當於使用者的令牌,所以第一步你需要申請一個key
step3:看文檔!!!學過java的同學們都知道,當我們對一個類別或方法不明白其意圖和思想時,我們可以去查看文檔,這裡也不例外,而且對於英文不是特別好的同學來說很幸運的是,聚合網站上的文檔都是中文版本的,比起閱讀java源碼裡的英文文檔應該輕鬆很多.
全國天氣預報接口下面有六個子接口,打開第一個接口鏈接,看文檔發現需要傳入一個城市名或者城市ID參數,這個參數我們可以通過第六個子接口獲取(接口之間參數的調用類似於java中方法之間的呼叫),即支持城市列表獲取.所以示例中我們先調用這個接口.調用接口涉及到請求網絡資源的問題,這裡我封裝了一個工具類,包含GET和POST兩種方法
step4:上程式碼

Demo1:網路存取工具類別(封裝get與post方法)package juheAPI;<br>   <br> import java.io.BufferedReader;<br> import java.io.BufferedWriter;<br> import java.io.InputStream;<br> import java.io.InputStreamReader;<br> import java.io.OutputStream;<br> import java.io.OutputStreamWriter;<br> import java.net.HttpURLConnection;<br> import java.net.URL;<br> import java.util.Map;<br> /**<br>  * 網路存取工具類別<br>  * @author silk<br>  *<br>  */<br> public class PureNetUtil {<br>     /**<br>      * get方法直接呼叫post方法<br>      * @param url 網路位址<br>      * @return 返回網路資料<br>      */<br>     public static String get(String url){<br>         return post(url,null);<br>     }<br>     /**<br>      * 設定post方法取得網路資源,如果參數為null,實際上設定為get方法<br>      * @param url 網路位址<br>      * @param param 請求參數鍵值對<br>      * @return 返回讀取資料<br>      */<br>    public static  String post(String  url,Map   param){<br>         HttpURLConnection conn=null;<br>         try {<br>             URL u=new URL(url);<br>             conn=(HttpURLConnection) u.openConnection();<br>             StringBuffer sb=null;<br>             if(param!=null){//如果請求參數不為空白<br>                 sb=new StringBuffer();<br>                 /*A URL connection can be used for input and/or .                  * flag to true if you intend to use the URL connection for intend to use the URL connection .                  * false if not.  The default is false.*/<br>                 //預設為false,post方法需要寫入參數,設定true<br>                 conn.setDoOutput(true);<br>                 //設定post方法,預設get<br>                 conn.setRequestMethod("POST");<br>                 //取得輸出流<br>                OutputStream out=conn.getOutputStream();<br>                 //輸出流封裝成進階輸出流<br>                 BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));<br>                 //將參數封裝成鍵值對的形式<br>                 for(Map.Entry s:param.entrySet()){<br>                     sb.append(s.getKey()).append("=").append(s.getValue()).append("&");<br>                 }<br>                 //使用參數以輸出流寫入<br>                 writer.write(sb.deleteCharAt(sb.toString().length()-1).toString());<br>                 writer.close();//必須關閉,不然可能出現參數不全的錯誤<br>                 sb=null;<br>             }<br>             conn.connect();//建立連結<br>             sb=new StringBuffer();<br>             //取得連線狀態碼<br>             int recode=conn.getResponseCode();<br>             BufferedReader reader=null;<br>             if(recode==200){<br>                 //Returns an input stream that reads from this open connection<br>                 //以連結存取                 InputStream in=conn.getInputStream();<br>                 //針對輸入流進行封裝<br>                 reader=new BufferedReader(new InputStreamReader(in));<br>                 String str=null;<br>                 sb=new StringBuffer();<br>                 //從輸入流讀取資料<br>                 while((str=reader.readLine())!=null){<br>                     sb.append(str).append(System.getProperty("line.separator"));<br>                 }<br>                 //關閉投入流<br>                 reader.close();<br>                 if (sb.toString().length() == 0) {<br>                     return null;<br>                 }<br>                 return sb.toString().substring(0,<br>                        sb.toString().length() - System.getProperty("line.separator").length() - System.getProperty("line.separator").length());🎟             }<br>         } catch (Exception e) {<br>             e.printStackTrace();<br>             return null;<br>         }finally{<br>             if(conn!=null)//關閉連線<br>                 conn.disconnect();<br>         }<br>         return null;<br>     }<br>   <br> }<br>Demo2:呼叫取得城市清單介面範例package juheAPI;  <br> import net.sf.json.JSONArray;<br> import net.sf.json.JSONObject;<br>  <br>  <br> /**<br>  * 取得城市清單<br>  * 全國天氣預報介面呼叫JAVA範例<br>  *     dtype     string    N    返回資料格式:json或xml,預設json    <br>  *     key        string     Y    您所申請的key    <br>  * @author silk<br>  *<br>  */<br> public class GetCityList {<br>     /**<br>      * 調用取得城市清單介面,傳回所有資料<br>      * @return 返回介面資料<br>      */<br>     public static String excute(){<br>         String url="http://v.juhe.cn/weather/citys?key=***a7558b2e0bedaa19673f74a6809ce";//介面URL<br>         //PureNetUtil是封裝了get和post方法取得網路請求資料的工具類別<br>         return PureNetUtil.get(url);//使用get方法<br>     }<br>     /**<br>      * 調用介面返回資料後,解析資料,依輸入城市名得到對應ID<br>      * @param cityName 城市名稱<br>      * @return 回傳對應ID<br>      */<br>     public static String getIDBycityName(String cityName) {<br>         String result=excute();//返回介面結果,取得json格式資料<br>         if(result!=null){<br>             JSONObject obj=JSONObject.fromObject(result);<br>             result=obj.getString("resultcode");//取得回傳狀態碼<br>             if(result!=null&&result.equals("200")){//200表示成功回傳資料<br>                 result=obj.getString("result");//取得城市清單的json格式字串陣列<br>                 JSONArray arr=JSONArray.fromObject(result);<br>                 for(Object o:arr){//對arr進行遍歷<br>                     //將陣列中的一個json個數字串進行解析<br>                     obj=JSONObject.fromObject(o.toString());<br>                     /*此時obj如 {"id":"2","province":"北京","city":"北京","district":"海淀"}*/<br>","district":"海淀"                    //以city此key為線索判斷所需尋找的這項紀錄<br>                     result=obj.getString("district");<br>                     //以已輸入城市名不全,如蘇州市輸入為蘇州,類似與模糊查詢<br>                     if(result.equals(cityName)||result.contains(cityName)){<br>                         result=obj.getString("id");//取得ID<br>                         return result;<br>                     }<br>                 }<br>             }<br>         }<br>         return result;<br>     }<br>     public static void main(String[] args) {<br>         System.out.println(getIDBycityName("香港"));<br>     }<br> }Demo3:呼叫依城市名/id查詢天氣package juheAPI;<br>  <br> import net.sf.json.JSONObject;<br>  <br>  <br> /**<br>  * 依城市名/id查詢天氣<br>  * @author silk<br>  *<br>  */<br> public class WeatherReportByCity {<br>     /**<br>      * 依城市名取得<br>      * @param cityName<br>      * @return<br>      */<br>     public static String excute(String cityName){<br>         String url=//此處以返回json格式資料範例,所以format=2,以根據城市名稱為例,cityName傳入中文<br>                 "http://v.juhe.cn/weather/index?cityname="+cityName+"&key=***a7558b2e0bedaa19673f74a6809ce";<br>         return PureNetUtil.get(url);//透過工具類別取得回傳資料<br>     }<br>     /**<br>      * 取得返回資料中的一個屬性範例,此處以取得今日溫度為例<br>      * "temperature": "8℃~20℃"     今日溫度<br>      * @param args<br>      * @return <br>      */<br>     public static String GetTodayTemperatureByCity(String city) {<br>         String result=excute(city);<br>         if(result!=null){<br>             JSONObject obj=JSONObject.fromObject(result);<br>             /*取得返回狀態碼*/<br>             result=obj.getString("resultcode");<br>             /*如果狀態碼是200說明回傳資料成功*/<br>             if(result!=null&&result.equals("200")){<br>                 result=obj.getString("result");<br>                 //此時result中資料有多個key,可對其key進行遍歷,得到對個屬性<br>                 obj=JSONObject.fromObject(result);<br>                //現今溫度對應的key為today<br>                 result=obj.getString("today");<br>                 obj=JSONObject.fromObject(result);<br>                 //今天溫度對應當key為temperature<br>                 result=obj.getString("temperature");<br>                 return result;<br>             }<br>         }<br>         return result;<br>     }<br>     public static void main(String[] args) {<br>         System.out.println(GetTodayTemperatureByCity("蘇州"));<br>     }<br> }Demo4:呼叫天氣種類及表示列表介面範例package juheAPI;<br>  <br> import net.sf.json.JSONArray;<br> import net.sf.json.JSONObject;<br>  <br>  <br> /**<br>  * 天氣種類及識別列表介面呼叫JAVA範例<br>  * @author silk<br>  */<br> public class GetWeatherSignAndTypeList {<br>     //介面位址,因為只需要傳入一個固定的key為參數,所以設為常數<br>     private static final String URL= "http://v.juhe.cn/weather/uni?key=***a7558b2e0bedaa19673f74a6809ce";<br>     /**<br>      * 透過工具類別取得資料<br>      * @return<br>      */<br>     public static String excute(){<br>         return PureNetUtil.get(URL);//呼叫工具類別取得介面資料<br>     }<br>     /**<br>      * 利用遍歷陣列的方式取得<br>      * @param wid天氣對應id<br>      * @return 天氣名稱<br>      */<br>     public static String getWeatherByWid(String wid) {<br>         String result=excute();//取得介面資料<br>         if(result!=null){<br>             JSONObject obj=JSONObject.fromObject(result);<br>             result=obj.getString("resultcode");<br>             /*取得返回狀態碼*/<br>             if(result!=null&&result.equals("200")){<br>                 /*取得陣列資料*/<br>                 result=obj.getString("result");<br>                 JSONArray arr=JSONArray.fromObject(result);<br>                 for(Object o:arr){//遍歷陣列<br>                     obj=JSONObject.fromObject(o.toString());<br>                     //如在需要的資料後直接回傳結果,依key(wid)使用value判斷是否等於傳入參數<br>                     if(obj.getString("wid").equals(wid)){<br>                         result=obj.getString("weather");<br>                        return result;<br>                     }<br>                 }<br>             }<br>         }<br>         return result;<br>     }<br>     public static void main(String[] args) {<br>         System.out.println(getWeatherByWid("10"));<br>     }<br> }step5:呼叫介面時候如果狀態碼不是200,仔細參考文檔說明,也就是回傳step3:看文檔!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)