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

全國天氣預報介面呼叫範例

Oct 12, 2016 am 09:50 AM

基於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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

了解Python編程的入門級程式碼範例 了解Python編程的入門級程式碼範例 Jan 04, 2024 am 10:50 AM

了解Python程式設計的入門程式碼範例Python是一種簡單易學,功能強大的程式語言。對於初學者來說,了解Python程式設計的入門級程式碼範例是非常重要的。本文將為您提供一些具體的程式碼範例,幫助您快速入門。列印HelloWorldprint("HelloWorld")這是Python中最簡單的程式碼範例。 print()函數用於將指定的內容輸出

Go語言程式設計實例:Web開發中的程式碼範例 Go語言程式設計實例:Web開發中的程式碼範例 Mar 04, 2024 pm 04:54 PM

《Go語言程式設計實例:Web開發中的程式碼範例》隨著網路的快速發展,Web開發已成為各行業中不可或缺的一部分。作為一門功能強大且效能優越的程式語言,Go語言在Web開發中越來越受到開發者們的青睞。本文將透過具體的程式碼範例,介紹如何利用Go語言進行Web開發,讓讀者更能理解並運用Go語言來建立自己的Web應用。 1.簡單的HTTP伺服器首先,讓我們從一個

PHP 變數的實際應用:10 個實際使用範例 PHP 變數的實際應用:10 個實際使用範例 Feb 19, 2024 pm 03:00 PM

PHP變數儲存程式運行期間的值,對於建立動態且互動的WEB應用程式至關重要。本文將深入探討php變量,並透過10個真實的範例展示它們的實際應用。 1.儲存使用者輸入$username=$_POST["username"];$passWord=$_POST["password"];此範例從表單提交中提取使用者名稱和密碼,並將其儲存在變數中以供進一步處理。 2.設定配置值$database_host="localhost";$database_username="username";$database_pa

Java實作簡單的冒泡排序程式碼 Java實作簡單的冒泡排序程式碼 Jan 30, 2024 am 09:34 AM

Java冒泡排序最簡單的程式碼範例冒泡排序是一種常見的排序演算法,它的基本想法是透過相鄰元素的比較和交換來將待排序序列逐步調整為有序序列。以下是一個簡單的Java程式碼範例,示範如何實作冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

如何使用PHP編寫庫存管理系統中的庫存分倉管理功能代碼 如何使用PHP編寫庫存管理系統中的庫存分倉管理功能代碼 Aug 06, 2023 pm 04:49 PM

如何使用PHP編寫庫存管理系統中的庫存分倉管理功能碼庫存管理是許多企業中不可或缺的一部分。對於擁有多個倉庫的企業來說,庫存分倉管理功能尤其重要。透過合理管理和追蹤庫存,企業可以實現不同倉庫之間的庫存調撥,優化營運成本,改善協同效率。本文將介紹如何使用PHP編寫庫存分倉管理功能的程式碼,並為您提供相關的程式碼範例。一、建立資料庫在開始編寫庫存分倉管理功能的程式碼之

華為雲端邊緣運算對接指南:Java程式碼範例快速實作接口 華為雲端邊緣運算對接指南:Java程式碼範例快速實作接口 Jul 05, 2023 pm 09:57 PM

華為雲端邊緣運算對接指南:Java程式碼範例快速實現介面隨著物聯網技術的快速發展和邊緣運算的興起,越來越多的企業開始關注邊緣運算的應用。華為雲端提供了邊緣運算服務,為企業提供了高可靠的運算資源和便利的開發環境,使得邊緣運算應用更容易實現。本文將介紹如何透過Java程式碼快速實現華為雲端邊緣運算的介面。首先,我們需要準備好開發環境。確保你已經安裝了Java開發工具包(

從入門到精通:Go語言中常用資料結構的程式碼實現 從入門到精通:Go語言中常用資料結構的程式碼實現 Mar 04, 2024 pm 03:09 PM

標題:從入門到精通:Go語言中常用資料結構的程式碼實作資料結構在程式設計中起著至關重要的作用,它是程式設計的基礎。在Go語言中,有許多常用的資料結構,掌握這些資料結構的實作方式對於成為優秀的程式設計師至關重要。本文將介紹Go語言中常用的資料結構,並給出對應的程式碼範例,幫助讀者從入門到精通這些資料結構。 1.數組(Array)數組是一種基本的資料結構,是一組相同類型

指導與範例:學習Java選擇排序演算法的實現 指導與範例:學習Java選擇排序演算法的實現 Feb 18, 2024 am 10:52 AM

Java選擇排序法程式碼編寫指南及範例選擇排序是一種簡單直觀的排序演算法,其想法是每次從未排序的元素中選擇最小(或最大)的元素進行交換,直到所有元素排序完成。本文將提供選擇排序的程式碼編寫指南,並附上具體的Java範例程式碼。演算法原理選擇排序的基本原理是將待排序數組分為已排序和未排序兩部分,每次從未排序部分選擇最小(或最大)的元素,將其放到已排序部分的末尾。重複上述

See all articles