1. 程式人生 > >JAVA如何呼叫API

JAVA如何呼叫API

Java呼叫API很簡單,主要分為三步:①找到要呼叫的API介面②向指定URL新增引數傳送請求③對返回的字串進行處理

我用的API介面是在易源資料上找到的,上面有很多可以免費使用的介面

https://www.showapi.com/


當找好了要使用的API那麼就是傳送請求了,這裡我選擇的是圖靈機器人,我們來看一下它的介面要求:

上面說明了它的介面地址、返回格式以及請求方式

那麼它的請求引數有兩個,其中info是必須的,也就是我們傳送向圖靈機器人要說的的話。

返回是一個JSON字串,這裡我們只需要text的內容即可

 

下面我們具體來呼叫一下,首先新建一個Java工程,並加入以下jar包,

其中前6個是處理JSON字串必須的,最後一個servlet-api是用於傳送http求用的。

然後新建一個名為Talk的Java類,具體程式碼如下

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;


import net.sf.json.JSONObject;

public class Talk {
	
    public static String result(String info) {
    	//介面地址
    	String requestUrl = "http://route.showapi.com/60-27";  
    	//params用於儲存要請求的引數
        Map params = new HashMap();
      //showapi_appid的值,把###替換成你的appid
        params.put("showapi_appid","###");
      //我們請求的字串
        params.put("info",info);
      //數字簽名,###填你的數字簽名,可以在你的個人中心看到
        params.put("showapi_sign","###");
      //呼叫httpRequest方法,這個方法主要用於請求地址,並加上請求引數
        String string = httpRequest(requestUrl,params);
        //處理返回的JSON資料並返回
        JSONObject pageBean = JSONObject.fromObject(string).getJSONObject("showapi_res_body");
    	return pageBean.getString("text");
    }
    
    private static String httpRequest(String requestUrl,Map params) {  
    	//buffer用於接受返回的字元
    	StringBuffer buffer = new StringBuffer();
        try {  
        	//建立URL,把請求地址給補全,其中urlencode()方法用於把params裡的引數給取出來
            URL url = new URL(requestUrl+"?"+urlencode(params));  
            //開啟http連線
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setRequestMethod("GET");  
            httpUrlConn.connect();  
            
            //獲得輸入
            InputStream inputStream = httpUrlConn.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  
            //將bufferReader的值給放到buffer裡
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
            //關閉bufferReader和輸入流
            bufferedReader.close();  
            inputStreamReader.close();  
            inputStream.close();  
            inputStream = null;  
            //斷開連線
            httpUrlConn.disconnect();
            
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        	//返回字串
        return buffer.toString();  
    }  
    
    public static String urlencode(Map<String,Object>data) {
    	//將map裡的引數變成像 showapi_appid=###&showapi_sign=###&的樣子
        StringBuilder sb = new StringBuilder();
        for (Map.Entry i : data.entrySet()) {
            try {
                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
    //測試是否有效
	public static void main(String[] args) {
	
		System.out.println(result("你好啊"));
	}

}

執行結果如下:


至此就完成了API的呼叫