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<String, Object> params) throws IOException {
Map<String, Object> sortedParams = new TreeMap<>(params);
Set<Map.Entry<String, Object>> entrys = sortedParams.entrySet();
StringBuilder baseString = new StringBuilder();
for (Map.Entry<String, Object> 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进行反序列成对象
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId>
<version>4.1.4</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
响应实体
public class ResponseEntity<T> 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<T> {
// ================================================================
// 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 <T> ResponseEntity<T> post(String url, Map<String, Object> param,
Map<String, Object> header) {
HttpResponse response =
HttpRequest.post(TencentAPI.NLP_TEXTPOLAR).form(param)
.send();
String resp = response.bodyText();
Type type = new TypeToken<ResponseEntity<T>>() {
}.getType();
ResponseEntity<T> 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<String, Object> 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<TextploarEntity> 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));
}