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