Java如何調用第三方接口:百度雲文本審覈

隨着中國互聯網的發展,業務需求愈來愈複雜 。全部出現了許多作軟件服務的公司,如: 阿里雲、百度雲、新浪、微信等等公司都推出了一系列的產品服務。這樣給了小型公司帶來福音。讓開發者把精力放在了需求上面。
java

例如:之前的程序員開發一個郵箱發送的郵件的功能,他可能須要本身搭建一個郵箱服務器(麻煩),而如今的開發者只須要找到郵箱服務提供商(如:阿里雲),而後對接他們的服務。
程序員


如何調用調用第三方接口( 本文案例:百度雲文本審覈) web

百度雲AI 接口地址apache

1.找到你須要調用的服務 json

2.選擇使用api

3.建立應用,獲取調用接口的參數 ( 這裏是 API Key ,Sercert Key ,其餘服務商大體差很少)bash

4.找到接入文檔服務器

5.找到接口地址以及請求參數微信

這裏content 參數是咱們提供的須要審覈的內容,access_token 是調用百度API的憑證ui

6.獲取access_token

點擊進去copy 獲取access_token 的Java 代碼

package com.baidu.ai.api.auth;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
/**
 * @做者: tjx
 * @描述:  獲取access_token
 * @建立時間: 建立於17:11 2018/9/7
 **/
public class AuthService {

    /**
     * 獲取權限token
     * @return 返回示例:
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */
    public static String getAuth() {
        // 官網獲取的 API Key 更新爲你註冊的
        String clientId = "百度雲應用的AK";
        // 官網獲取的 Secret Key 更新爲你註冊的
        String clientSecret = "百度雲應用的SK";
        return getAuth(clientId, clientSecret);
    }

    /**
     * 獲取API訪問token
     * 該token有必定的有效期,須要自行管理,當失效時需從新獲取.
     * @param ak - 百度雲官網獲取的 API Key
     * @param sk - 百度雲官網獲取的 Securet Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public static String getAuth(String ak, String sk) {
        // 獲取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type爲固定參數
                + "grant_type=client_credentials"
                // 2. 官網獲取的 API Key
                + "&client_id=" + ak
                // 3. 官網獲取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打開和URL之間的鏈接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 獲取全部響應頭字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍歷全部的響應頭字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定義 BufferedReader輸入流來讀取URL的響應
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回結果示例
             */
            System.err.println("result:" + result);
            JSONObject jsonObject = new JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("獲取token失敗!");
            e.printStackTrace(System.err);
        }
        return null;
    }


}
複製代碼

把建立時候獲取的兩個參數填進去調試下

7.封裝API

7.1 封裝結果Bean

/**
 * Copyright 2018 bejson.com
 */
package com.baidu.ai.api.pojo;
import java.util.List;

/**
 * Auto-generated: 2018-09-07 17:28:44
 *
 * @author bejson.com (i@bejson.com)
 * @website http://www.bejson.com/java2pojo/
 */
public class Pass {

    private double score;
    private List<String> hit;
    private int label;
    public void setScore(double score) {
        this.score = score;
    }
    public double getScore() {
        return score;
    }

    public void setHit(List<String> hit) {
        this.hit = hit;
    }
    public List<String> getHit() {
        return hit;
    }

    public void setLabel(int label) {
        this.label = label;
    }
    public int getLabel() {
        return label;
    }

}複製代碼
/**
 * Copyright 2018 bejson.com
 */
package com.baidu.ai.api.pojo;
import java.util.List;

/**
 * Auto-generated: 2018-09-07 17:28:44
 *
 * @author bejson.com (i@bejson.com)
 * @website http://www.bejson.com/java2pojo/
 */
public class Result {

    private int spam;
    private List<String> review;
    private List<String> reject;
    private List<Pass> pass;
    public void setSpam(int spam) {
        this.spam = spam;
    }
    public int getSpam() {
        return spam;
    }

    public void setReview(List<String> review) {
        this.review = review;
    }
    public List<String> getReview() {
        return review;
    }

    public void setReject(List<String> reject) {
        this.reject = reject;
    }
    public List<String> getReject() {
        return reject;
    }

    public void setPass(List<Pass> pass) {
        this.pass = pass;
    }
    public List<Pass> getPass() {
        return pass;
    }

}複製代碼
/**
 * Copyright 2018 bejson.com
 */
package com.baidu.ai.api.pojo;

/**
 * Auto-generated: 2018-09-07 17:28:44
 *
 * @author bejson.com (i@bejson.com)
 * @website http://www.bejson.com/java2pojo/
 */
public class CheckTextResult {

    private long log_id;
    private Result result;
    public void setLog_id(long log_id) {
        this.log_id = log_id;
    }
    public long getLog_id() {
        return log_id;
    }

    public void setResult(Result result) {
        this.result = result;
    }
    public Result getResult() {
        return result;
    }

}複製代碼

7.2 封裝HttpClient

package com.utis;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
 * @做者: tjx
 * @描述:  http請求
 * @建立時間: 建立於16:37 2018/9/7
 **/
public class HttpUtil {

    public static String doGet(String url, Map<String, String> param) {
        // 建立Httpclient對象
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 建立uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 建立http GET請求
            HttpGet httpGet = new HttpGet(uri);

            // 執行請求
            response = httpclient.execute(httpGet);
            // 判斷返回狀態是否爲200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    public static String doPost(String url, Map<String, String> param) {
        // 建立Httpclient對象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 建立Http Post請求
            HttpPost httpPost = new HttpPost(url);
            // 建立參數列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模擬表單
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");
                httpPost.setEntity(entity);
            }
            // 執行http請求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doPost(String url) {
        return doPost(url, null);
    }

    /**
     * 請求的參數類型爲json
     * @param url
     * @param json
     * @return
     * {username:"",pass:""}
     */
    public static String doPostJson(String url, String json) {
        // 建立Httpclient對象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 建立Http Post請求
            HttpPost httpPost = new HttpPost(url);
            // 建立請求內容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 執行http請求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

}
複製代碼

7.3封裝調用接口

package com.baidu.ai.api;

import com.baidu.ai.api.pojo.CheckTextResult;
import com.baidu.ai.api.pojo.Pass;
import com.baidu.ai.api.pojo.Result;
import com.utis.HttpUtil;
import net.sf.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

/**
 * @做者: tjx
 * @描述: 文本審覈API
 * @建立時間: 建立於17:19 2018/9/7
 **/
public class CheckTextAPI {

    private static final String URL = "https://aip.baidubce.com/rest/2.0/antispam/v2/spam";

    /**
     * @param content 須要審覈的文本
     *
     * @return true 經過 false 失敗
     */
    public boolean check(String content){

        //獲取access_token
        String access_token = AuthService.getAuth();
        Map<String,String> parameters = new HashMap<>();
        //添加調用參數
        parameters.put("access_token",access_token);
        parameters.put("content",content);
        //調用文本審覈接口
        String result = HttpUtil.doPost(URL, parameters);

        // JSON轉換
        JSONObject jsonObj = JSONObject.fromObject(result);
        Map<String, Class> classMap = new HashMap<String, Class>();
        classMap.put("result",Result.class);
        classMap.put("pass",Pass.class);
        classMap.put("bass",CheckTextResult.class);
        CheckTextResult bean = (CheckTextResult)JSONObject.toBean(jsonObj, CheckTextResult.class, classMap);
        //根據API返回內容處理業務邏輯 (這裏簡單模擬,)
        if(bean.getResult().getReject().size() + bean.getResult().getReview().size() > 0){
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println( new CheckTextAPI().check("你好"));
    }
}
複製代碼

結果

市面上的大部分API服務商的接入方式都是這樣的。

相關文章
相關標籤/搜索