Home  >  Article  >  php教程  >  National weather forecast interface call example

National weather forecast interface call example

WBOY
WBOYOriginal
2016-10-12 09:50:011190browse

JAVA-based national weather forecast interface calling example
step1: Select the interface "National Weather Forecast Interface" illustrated in this article url: https://www.juhe.cn/docs/api/id/39/aid/87
step2: Each interface needs to pass in a parameter key, which is equivalent to the user's token, so in the first step you need to apply for a key
step3: Read the documentation!!! Students who have studied Java all know that when we don’t understand the intention and ideas of a class or method, we can check the documentation. This is no exception, and for students who are not particularly good at English Fortunately for me, the documents on the aggregation website are all in Chinese, which should be much easier than reading the English documents in the Java source code.
There are six sub-interfaces under the National Weather Forecast interface. Open the first interface link and read the document and find that you need to pass in a city name or city ID parameter. We can obtain this parameter through the sixth sub-interface (the call of parameters between interfaces is similar to (call between methods in java), that is, it supports city list acquisition. So in the example, we first call this interface. Calling the interface involves requesting network resources. Here I encapsulate a tool class, including GET and POST methods
step4: Upload the code

Demo1: Network access tool class (encapsulating get and post methods)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> * Network access tools<br> * @author silk<br> *<br> ​*/<br> public class PureNetUtil {<br> /**<br> * * The get method directly calls the post method<br> * * @param url network address<br> * @return Return network data<br> ​​*/<br> Public static String get(String url){<br>           return post(url,null);<br> }<br> /**<br> * *Set the post method to obtain network resources. If the parameter is null, it is actually set to the get method<br> * * @param url network address<br> * @param param Request parameter key-value pair<br> * @return Returns the read data<br> ​​*/<br> public static String post(String url,Map param){<br> HttpURLConnection conn=null;<br>                             try URL u=new URL(url);<br>               conn=(HttpURLConnection) u.openConnection();<br>                 StringBuffer sb=null;<br> If(param!=null){//If the request parameter is not empty<br>                 sb=new StringBuffer();<br>                                   /*A URL connection can be used for input and/or output. Set the DoOutput<br> * flag to true if you intend to use the URL connection for output,<br> * false if not. The default is false.*/<br> //The default is false, the post method needs to write parameters, set true<br>                       conn.setDoOutput(true);<br> //Set the post method, the default is get<br>                        conn.setRequestMethod("POST");<br> //Get the output stream<br>OutputStream out=conn.getOutputStream();<br> //Encapsulate the output stream into an advanced output stream<br>                    BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));<br> //Encapsulate parameters into key-value pairs<br> For (map.entry s: param.entryset ()) {<br> <br>                     sb.append(s.getKey()).append("=").append(s.getValue()).append("&");<br>                  }<br> //Write parameters through the output stream<br> Writer.write(sb.deleteCharAt(sb.toString().length()-1).toString());<br>                      writer.close();//Must be closed, otherwise an error of incomplete parameters may occur<br>                  sb=null;<br>              }<br> ​​​​​​conn.connect();//Establish a connection<br>           sb=new StringBuffer();<br> ​​​​​​//Get the connection status code<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>                                 // Get the input stream from the connection <br>                        InputStream in=conn.getInputStream();<br> //Encapsulate the input stream<br> Reader = new bufferedReader (New InputStreamReader (in)); <br>                        String str=null;<br>                 sb=new StringBuffer();<br> //Read data from the input stream<br>                                                                                                                                                                                                               while ((str=reader.readLine())!=null){<br>                     sb.append(str).append(System.getProperty("line.separator"));<br>                  }<br>                               //Close the input stream<br>                    reader.close();<br> If (sb.toString().length() == 0) {<br>                                                                                                                                                                                               }<br>                                                                                                                                                                                                           return sb.toString().substring(0,<br>                    sb.toString().length() - System.getProperty("line.separator").length());<br>             }<br>            } catch (Exception e) {<br>               e.printStackTrace();<br> Return null; <br>           }finally{<br>                   if(conn!=null)//Close the connection<br>                     conn.disconnect();<br>          }<br>                                                                                                                                                                                                               return   null; }<br> <br> }<br>Demo2: Example of calling the interface to get the city listpackage juheAPI; <br> import net.sf.json.JSONArray;<br> import net.sf.json.JSONObject;<br> <br> <br> /**<br> * Get city list<br> * National weather forecast interface calling JAVA example<br> * dtype string N Return data format: json or xml, default json <br> * key string Y the key you applied for <br> * @author silk<br> *<br> ​*/<br> public class GetCityList {<br> /**<br> * Call the interface to get the city list and return all data<br> * @return Return interface data<br> ​​*/<br> Public static String excute(){<br> String url="http://v.juhe.cn/weather/citys?key=***a7558b2e0bedaa19673f74a6809ce";//Interface URL<br> ​​​​ //PureNetUtil is a tool class that encapsulates the get and post methods to obtain network request data<br>            return PureNetUtil.get(url);//Use the get method<br> }<br> /**<br> * After calling the interface to return the data, parse the data and get the corresponding ID based on the input city name<br> * @param cityName city name<br> * @return Return the corresponding ID<br> ​​*/<br> Public static String getIDBycityName(String cityName) {<br>           String result=excute();//Return the interface result and get json format data<br> If(result!=null){<br> ​​​​​​JSONObjectobj=JSONObject.fromObject(result);<br>               result=obj.getString("resultcode");//Get the return status code<br> If(result!=null&&result.equals("200")){//200 indicates successful return of data<br>                  result=obj.getString("result");//Get the json format string array of the city list<br> JSONArray arr=JSONArray.fromObject(result);<br> For (object o: Arr) {// Traversing ARR <br> //Parse a json number string in the array<br> Obj = jsonObject.fromobject (o.tostring ()); /*At this time, objs such as {"id": "2", "province": "Beijing", "City": "Beijing", "Distrib": "Haidian"}*/<br>//Use the city key as a clue to determine the record you need to find<br>                      result=obj.getString("district");<br> // Prevent the input of incomplete cities, such as Suzhou input as Suzhou, similar and vague query <br> If(result.equals(cityName)||result.contains(cityName)){<br>                           result=obj.getString("id");//Get ID<br>                                                                                                                                                                 }<br>                 }<br>              }<br>         }<br> return result }<br> Public static void main(String[] args) {<br> System.out.println(getIDBycityName("Hong Kong"));<br> }<br> }<br>Demo3: Call to query weather based on city name/id<br>package juheAPI; import net.sf.json.JSONObject;<br> <br> <br> /**<br> * Check weather based on city name/id<br> * @author silk<br> *<br> ​*/<br> public class WeatherReportByCity {<br> /**<br> * Get based on city name<br> * * @param cityName<br> * * @return<br> ​​*/<br> Public static String excute(String cityName){<br> String url=//Here is an example of returning json format data, so format=2, taking the city name as an example, cityName is passed in Chinese<br> "http://v.juhe.cn/weather/index?cityname="+cityName+"&key=***a7558b2e0bedaa19673f74a6809ce";<br>           return PureNetUtil.get(url);//Get the return data through the tool class<br> }<br> /**<br> * Get an example of an attribute in the returned data. Here we take getting today’s temperature as an example<br> * "temperature": "8℃~20℃" Today's temperature<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> /*Get the return status code*/<br>               result=obj.getString("resultcode");<br> /*If the status code is 200, the returned data is successful*/<br> If(result!=null&&result.equals("200")){<br>                   result=obj.getString("result");<br>                            // At this time, the data in the result has multiple keys, and the keys can be traversed to get the pair of attributes<br>                         obj=JSONObject.fromObject(result);<br>//The key corresponding to today’s temperature is today<br>                   result=obj.getString("today");<br>                         obj=JSONObject.fromObject(result);<br> //The key corresponding to today’s temperature is temperature<br>                   result=obj.getString("temperature");<br> return result              }<br>         }<br> return result }<br> Public static void main(String[] args) {<br> System.out.println(GetTodayTemperatureByCity("Suzhou"));<br> }<br> }<br>Demo4: Example of calling weather type and display list interface<br>package juheAPI; import net.sf.json.JSONArray;<br> import net.sf.json.JSONObject;<br> <br> <br> /**<br> * Weather type and identification list interface calling JAVA example<br> * @author silk<br> ​*/<br> public class GetWeatherSignAndTypeList {<br> //Interface address, because you only need to pass in a fixed key as a parameter, so set it to a constant<br> Private static final String URL= "http://v.juhe.cn/weather/uni?key=***a7558b2e0bedaa19673f74a6809ce";<br> /**<br> * Get data through tool classes<br> * * @return<br> ​​*/<br> Public static String excute(){<br>           return PureNetUtil.get(URL);//Call the tool class to get the interface data<br> }<br> /**<br> * * Obtain by traversing the array <br> * @param wid weather corresponding id<br> * @return Weather name<br> ​​*/<br> Public static String getWeatherByWid(String wid) {<br>           String result=excute();//Get interface data<br> If(result!=null){<br> ​​​​​​JSONObject obj=JSONObject.fromObject(result);<br>               result=obj.getString("resultcode");<br> /*Get the return status code*/<br> If(result!=null&&result.equals("200")){<br>                                                     /*Get array data*/<br>                   result=obj.getString("result");<br> JSONArray arr=JSONArray.fromObject(result);<br> For (object o: Arr) {// Traversing array <br> Obj = jsonObject.fromobject (o.tostring ()); // If the results are traversed directly after the data you need, the result is returned directly, and whether the value is based on the key (WID), whether the value is equivalent to the passing parameter <br> If(obj.getString("wid").equals(wid)){<br>                         result=obj.getString("weather");<br>                                                                                                                                                                }<br>                 }<br>              }<br>         }<br> return result }<br> Public static void main(String[] args) {<br> System.out.println(getWeatherByWid("10"));<br> }<br> }<br>step5: If the status code is not 200 when calling the interface, carefully refer to the documentation, that is, return to step3: read the documentation! <br>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn