使用java调用腾讯AI接口

1.鉴于目前AI比较流行,特别针对JAVA调用腾讯AI接口进行封装,工具中主要包含几个工具类,

1,配置腾讯AI的appid和appkey,现在腾讯AI官网中进行注册,获取appid和appkey

使用springboot,在application.properties中增加以下配置

###############################
#     腾讯ai配置               #
###############################
tencent.appID=你的appID
tencent.appKey=你的appKey

在java类中获取配置

@Configuration
@ConfigurationProperties(prefix = TencentAiConfig.TENCENTAICONFIG_PREFIX)
public class TencentAiConfig {

    // ================================================================
    // Constants
    // ================================================================

    public static final String TENCENTAICONFIG_PREFIX = "tencent";

    // ================================================================
    // Fields
    // ================================================================

    private String appID;
    private String appKey;

    // ================================================================
    // Constructors
    // ================================================================

    // ================================================================
    // Methods from/for super Interfaces or SuperClass
    // ================================================================

    // ================================================================
    // Public or Protected Methods
    // ================================================================


    // ================================================================
    // Getter & Setter
    // ================================================================

    public String getAppID() {
        return appID;
    }

    public void setAppID(String appID) {
        this.appID = appID;
    }

    public String getAppKey() {
        return appKey;
    }

    public void setAppKey(String appKey) {
        this.appKey = appKey;
    }


    // ================================================================
    // Private Methods
    // ================================================================


    // ================================================================
    // Inner or Anonymous Class
    // ================================================================

    // ================================================================
    // Test Methods
    // ================================================================

}

2,sign签名计算

public final class TencentAISignHolder {

    // ================================================================
    // Constants
    // ================================================================

    // ================================================================
    // Fields
    // ================================================================

    private static final TencentAiConfig CONFIG = SpringContextHolder.getBean(TencentAiConfig.class);

    // ================================================================
    // Constructors
    // ================================================================

    // ================================================================
    // Methods from/for super Interfaces or SuperClass
    // ================================================================

    // ================================================================
    // Public or Protected Methods
    // ================================================================

    /**
     * SIGN签名生成算法-JAVA版本 通用。默认参数都为UTF-8适用
     *
     * @param params 请求参数集,所有参数必须已转换为字符串类型
     * @return 签名
     * @throws IOException
     */
    public static String getSignature(Map params) throws IOException {
        Map sortedParams = new TreeMap<>(params);
        Set> entrys = sortedParams.entrySet();
        StringBuilder baseString = new StringBuilder();
        for (Map.Entry param : entrys) {
            if (param.getValue() != null && !"".equals(param.getKey().trim()) &&
                    !"sign".equals(param.getKey().trim()) && !"".equals(param.getValue())) {
                baseString.append(param.getKey().trim()).append("=")
                        .append(URLEncoder.encode(param.getValue().toString(), "UTF-8")).append("&");
            }
        }
        if (baseString.length() > 0) {
            baseString.deleteCharAt(baseString.length() - 1).append("&app_key=")
                    .append(CONFIG.getAppKey());
        }
        try {
            String sign = MD5.md5(baseString.toString());
            System.out.println("sign:" + sign.toUpperCase());
            return sign.toUpperCase();
        } catch (Exception ex) {
            throw new IOException(ex);
        }
    }

    // ================================================================
    // Getter & Setter
    // ================================================================

    // ================================================================
    // Private Methods
    // ================================================================

    // ================================================================
    // Inner or Anonymous Class
    // ================================================================

    // ================================================================
    // Test Methods
    // ================================================================

}

3,http网络请求

网络请求部分使用jodd-http模块,减少工具类封装编码,同时使用GSON进行反序列成对象


            org.jodd
            jodd-http
            4.1.4


            com.google.code.gson
            gson
            2.8.2

响应实体

public class ResponseEntity implements Serializable {

    // ================================================================
    // Constants
    // ================================================================

    private static final long serialVersionUID = 1L;

    // ================================================================
    // Fields
    // ================================================================

    private Integer ret;
    private String msg;
    private T data;


    // ================================================================
    // Constructors
    // ================================================================

    // ================================================================
    // Methods from/for super Interfaces or SuperClass
    // ================================================================

    @Override
    public String toString() {
        return "ResponseEntity{" +
                "ret=" + ret +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }


    // ================================================================
    // Public or Protected Methods
    // ================================================================


    // ================================================================
    // Getter & Setter
    // ================================================================

    public Integer getRet() {
        return ret;
    }

    public void setRet(Integer ret) {
        this.ret = ret;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }


    // ================================================================
    // Private Methods
    // ================================================================


    // ================================================================
    // Inner or Anonymous Class
    // ================================================================

    // ================================================================
    // Test Methods
    // ================================================================

}

http请求方法

public final class HttpRequestUtils {

    // ================================================================
    // Constants
    // ================================================================

    private static final Logger LOGGER = LoggerFactory.getLogger(HttpRequestUtils.class);

    // ================================================================
    // Fields
    // ================================================================

    private static final Gson GSON = SpringContextHolder.getBean(Gson.class);


    // ================================================================
    // Constructors
    // ================================================================

    // ================================================================
    // Methods from/for super Interfaces or SuperClass
    // ================================================================

    // ================================================================
    // Public or Protected Methods
    // ================================================================

    public static  ResponseEntity post(String url, Map param,
                                             Map header) {
        HttpResponse response =
                HttpRequest.post(TencentAPI.NLP_TEXTPOLAR).form(param)
                        .send();
        String resp = response.bodyText();

        Type type = new TypeToken>() {
        }.getType();
        ResponseEntity entity = GSON.fromJson(resp, type);
        return entity;
    }


    // ================================================================
    // Getter & Setter
    // ================================================================

    // ================================================================
    // Private Methods
    // ================================================================


    // ================================================================
    // Inner or Anonymous Class
    // ================================================================

    // ================================================================
    // Test Methods
    // ================================================================

}

4,接口请求测试(情感分析识别接口测试)

    @Test
    public void t1() throws Exception {
        long start = System.currentTimeMillis();
        Map params = new HashMap<>();
        params.put("app_id", tencentAiConfig.getAppID());
        params.put("time_stamp", new Date().getTime() / 1000);
        params.put("nonce_str", Math.random());
        params.put("text", "你好啊");
        params.put("sign", TencentAISignHolder.getSignature(params));
        ResponseEntity entity = HttpRequestUtils.post(
                "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textpolar",
                params, null);
        System.out.println(entity);
        long end = System.currentTimeMillis();
        System.out.println("请求时间:" + (end - start));
    }

你可能感兴趣的:(使用java调用腾讯AI接口)