1.鑒于目前AI比較流行污秆,特別針對JAVA調(diào)用騰訊AI接口進行封裝拍屑,工具中主要包含幾個工具類荷辕,
1凿跳,配置騰訊AI的appid和appkey,現(xiàn)在騰訊AI官網(wǎng)中進行注冊疮方,獲取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版本 通用骡显。默認(rèn)參數(shù)都為UTF-8適用
*
* @param params 請求參數(shù)集疆栏,所有參數(shù)必須已轉(zhuǎn)換為字符串類型
* @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網(wǎng)絡(luò)請求
網(wǎng)絡(luò)請求部分使用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>
響應(yīng)實體
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));
}