必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java如何调用第三方接口:百度云文本审核

时间:2019-08-04 14:13:15来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

第三方接口

随着中国互联网的发展,业务需求越来越复杂 。所有出现了许多做软件服务的公司,如: 阿里云、百度云、新浪微信等等公司都推出了一系列的产品服务。这样给了小型公司带来福音。让开发者把精力放在了需求上面。

例如:以前的程序员开发一个邮箱发送的邮件的功能,他可能需要自己搭建一个邮箱服务器(麻烦),而现在的开发者只需要找到邮箱服务提供商(如:阿里云),然后对接他们的服务。

如何调用调用第三方接口( 本文案例:百度云文本审核)

百度云ai 接口地址

1.找到你需要调用的服务

2.选择使用

3.创建应用,获取调用接口的参数 ( 这里是 API Key ,Sercert Key ,其他服务商大致差不多)

4.找到接入文档

5.找到接口地址以及请求参数

这里content 参数是我们提供的需要审核的内容,access_token 是调用百度API的凭证

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 ([email protected])
 * @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 ([email protected])
 * @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 ([email protected])
 * @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服务商的接入方式都是这样的。

相关阅读

强调用户体验时,我们到底在说什么

如果你认为“用户体验就是用户在使用产品后的主观感觉”,那么或许需要进来看看咯。对于互联网行业的从业人员来说,“用户体验”似乎

关于Java中DecimalFormat()方法的调用

关于Java中DecimalFormat()方法的调用 我们可以从各种地方知道DecimalFormat类的使用方法,它的作用是格式化数字。 在此不多赘述,

c语言之递归调用

递归调用,简而言之就是函数调用自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归的原理比较简单,但是想要合理并

windows socket编程中调用recvfrom返回-1(windows erro

windows socket编程中调用recvfrom返回-1(windows error 10014)错误的问题 标签(空格分隔): socket 在windows平台下进行socket编程

【WebService】WebService实现远程调用

一、WebService是什么WebService是一种跨语言跨平台的远程调用技术。所谓跨语言跨平台就是说服务端采用java编写,客户端程序则可以

分享到:

栏目导航

推荐阅读

热门阅读