JAVAベースの全国天気予報インターフェースの呼び出し例
ステップ1: この記事のURL: https://www.juhe.cn/docs/api/id/39/aid/87
で示されているインターフェース「National Weather Forecast Interface」を選択します。
ステップ2: 各インターフェースは、ユーザーのトークンに相当するパラメータキーを渡す必要があるため、最初のステップでキーを申請する必要があります
step3: ドキュメントを読む!!! Java を勉強したことのある学生は、クラスやメソッドの意図や考え方が分からないときはドキュメントを確認できることを知っています。特にそうでない学生も例外ではありません。英語が得意です 幸いなことに、集約 Web サイトのドキュメントはすべて中国語で書かれているため、Java ソース コードで英語のドキュメントを読むよりもはるかに簡単です。
National Weather Forecast インターフェイスには 6 つのサブインターフェイスがあります。最初のインターフェイス リンクを開いてドキュメントを読むと、都市名または都市 ID パラメーターを渡す必要があることがわかります。このパラメーターは 6 番目のサブインターフェイス (インターフェイス間のパラメーターの呼び出しは (Java のメソッド間の呼び出し) に似ています。つまり、この例では、最初にこのインターフェイスを呼び出して、ネットワーク リソースを要求します。クラス (GET メソッドと POST メソッドを含む)
ステップ4: コードをアップロードします
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>
java.net.URL をインポート;<br>
import java.util.Map;<br>
/**<br>
* ネットワークアクセスツール<br>
* @作者シルク<br>
*<br>
*/<br>
パブリック クラス PureNetUtil {<br>
/**<br>
* * get メソッドは post メソッドを直接呼び出します<br>
* * @param URL ネットワークアドレス<br>
* @return ネットワークデータを返す<br>
*/<br>
パブリック静的文字列 get(文字列 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>
試してみてください {<br>
URL u=新しいURL(url);<br>
conn=(HttpURLConnection) u.openConnection();<br>
StringBuffer sb=null;<br>
If(param!=null){//リクエストパラメータが空でない場合<br>
sb=new StringBuffer();<br>
/*入力および/または出力に URL 接続を使用できます<br> を設定します。
* 出力に URL 接続を使用する場合はフラグを true に設定します<br>
* そうでない場合は false です。*/<br>
//デフォルトは false です。post メソッドはパラメータを書き込む必要があり、true に設定します<br>
conn.setDoOutput(true);<br>
// 投稿メソッドを設定します。デフォルトは get<br> です
conn.setRequestMethod("POST");<br>
//出力ストリームを取得します<br>OutputStream out=conn.getOutputStream();<br>
//出力ストリームを高度な出力ストリームにカプセル化します<br>
BufferedWriter ライター=new BufferedWriter(new OutputStreamWriter(out));<br>
//パラメータをキーと値のペアにカプセル化します<br>
For (map.entry s: param.entryset ()) {<br> <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>
// この開いている接続から読み取る入力ストリームを返します<br>
// 接続から入力ストリームを取得します <br>
入力ストリーム in=conn.getInputStream();<br>
//入力ストリームをカプセル化します<br>
Reader = 新しいbufferedReader (新しい inputStreamReamReader (in));
文字列 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>
}<br>
return sb.tostring()。サブストリング(0、<br>sb.toString().length() - System.getProperty("line.separator").length());<br>
}<br>
} catch (例外 e) {<br>
e.printStackTrace();<br>
nullを返します;<br>
}ついに{<br>
if(conn!=null)//接続を閉じます<br>
conn.disconnect();<br>
}<br>
nullを返します。
}<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>
* キー文字列 Y は申請したキー <br>
* @作者シルク<br>
*<br>
*/<br>
パブリック クラス GetCityList {<br>
/**<br>
* インターフェースを呼び出して都市リストを取得し、すべてのデータを返します<br>
* @return インターフェイスデータを返します<br>
*/<br>
パブリック静的文字列 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>
パブリック静的 String getIDBycityName(String cityName) {<br>
String result=excute();//インターフェースの結果を返し、json形式のデータを取得します<br>
If(結果!=null){<br>
JSONObjectobj=JSONObject.fromObject(結果);<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 (オブジェクト o: Arr) {// ARR のトラバース <br>
// 配列内の json 数値文字列を解析します<br>
Obj = jsonObject.fromobject (o.tostring ());
/*このとき、{"id": "2", "province": "Beijing", "City": "Beijing", "Distrib": "Haidian"}*/<br> などのオブジェクト//検索する必要があるレコードを決定するための手がかりとして都市キーを使用します<br>
result=obj.getString("district");<br>
// 不完全な都市の入力を防止します (蘇州を Suzhou と入力するなど、類似した曖昧なクエリ)
If(result.equals(cityName)||result.contains(cityName)){<br>
result=obj.getString("id");// ID を取得<br>
}<br>
}<br>
}<br>
}<br>
結果を返す
}<br>
パブリック static void main(String[] args) {<br>
System.out.println(getIDBycityName("香港"));<br>
}<br>
}<br>Demo3: 都市名/ID に基づいて天気をクエリするための呼び出し<br>パッケージ juheAPI;<br>
import net.sf.json.JSONObject;
<br>
<br>
/**<br>
* 都市名/IDに基づいて天気を確認します<br>
* @作者シルク<br>
*<br>
*/<br>
パブリック クラス WeatherReportByCity {<br>
/**<br>
* 都市名に基づいて取得します<br>
* * @param市名<br>
* * @return<br>
*/<br>
パブリック静的文字列 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>
※「気温」:「8℃~20℃」 今日の気温<br>
* * @param args<br>
* * @return <br>
*/<br>
パブリック静的 String GetTodayTemperatureByCity(String city) {<br>
文字列 result=excute(city);<br>
If(結果!=null){<br>
JSONObjectobj=JSONObject.fromObject(結果);<br>
/*リターンステータスコードを取得*/<br>
result=obj.getString("resultcode");<br>
/*ステータス コードが 200 の場合、返されたデータは成功です*/<br>
If(result!=null&&result.equals("200")){<br>
result=obj.getString("result");<br>
// 現時点では、結果のデータには複数のキーがあり、キーを走査して属性のペアを取得できます<br>
obj=JSONObject.fromObject(result);<br>//今日の気温に対応するキーは今日です<br>
result=obj.getString("今日");<br>
obj=JSONObject.fromObject(result);<br>
//今日の気温に対応するキーは温度です<br>
result=obj.getString("温度");<br>
結果を返す
}<br>
}<br>
結果を返す
}<br>
パブリック static void main(String[] args) {<br>
System.out.println(GetTodayTemperatureByCity("蘇州"));<br>
}<br>
}<br>Demo4: 天気タイプと表示リストインターフェイスの呼び出し例<br>package juheAPI;
import net.sf.json.JSONArray;<br>
import net.sf.json.JSONObject;<br>
<br>
<br>
/**<br>
* JAVA を呼び出す天気の種類と識別リストのインターフェイスの例<br>
* @作者シルク<br>
*/<br>
パブリック クラス GetWeatherSignAndTypeList {<br>
//インターフェイスアドレス。パラメータとして固定キーを渡すだけなので、定数に設定します<br>
プライベート静的最終文字列 URL= "http://v.juhe.cn/weather/uni?key=***a7558b2e0bedaa19673f74a6809ce";<br>
/**<br>
* ツールクラスを通じてデータを取得します<br>
* * @return<br>
*/<br>
パブリック静的文字列 excute(){<br>
return PureNetUtil.get(URL);//ツールクラスを呼び出してインターフェイスデータを取得します<br>
}<br>
/**<br>
* * 配列を走査して取得します <br>
* @param 天気対応ID<br>
* @return 天気名<br>
*/<br>
パブリック静的 String getWeatherByWid(String wid) {<br>
String result=excute();//インターフェースデータを取得します<br>
If(結果!=null){<br>
JSONObjectobj=JSONObject.fromObject(結果);<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>
// 必要なデータを走査した後に結果が直接返される場合、値がキー (wid) に基づいているかどうか、値が渡されたパラメーターと等しいかどうか <br>
If(obj.getString("wid").equals(wid)){<br>
result=obj.getString("天気");<br>
}<br>
}<br>
}<br>
}<br>
結果を返す
}<br>
パブリック static void main(String[] args) {<br>
System.out.println(getWeatherByWid("10"));<br>
}<br>
}<br>ステップ 5: インターフェースを呼び出すときにステータス コードが 200 ではない場合は、ドキュメントを注意深く参照してください。つまり、ステップ 3: ドキュメントを読んでください。
<br>