使用java調(diào)用騰訊AI接口

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));
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市溜歪,隨后出現(xiàn)的幾起案子若专,更是在濱河造成了極大的恐慌,老刑警劉巖蝴猪,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调衰,死亡現(xiàn)場離奇詭異,居然都是意外死亡自阱,警方通過查閱死者的電腦和手機嚎莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沛豌,“玉大人趋箩,你說我怎么就攤上這事。” “怎么了叫确?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵爬早,是天一觀的道長。 經(jīng)常有香客問我启妹,道長,這世上最難降的妖魔是什么醉旦? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任饶米,我火速辦了婚禮,結(jié)果婚禮上车胡,老公的妹妹穿的比我還像新娘檬输。我一直安慰自己,他們只是感情好匈棘,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布丧慈。 她就那樣靜靜地躺著,像睡著了一般主卫。 火紅的嫁衣襯著肌膚如雪逃默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天簇搅,我揣著相機與錄音完域,去河邊找鬼。 笑死瘩将,一個胖子當(dāng)著我的面吹牛吟税,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姿现,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼肠仪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了备典?” 一聲冷哼從身側(cè)響起异旧,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎提佣,沒想到半個月后泽艘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡镐依,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年匹涮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片槐壳。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡然低,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雳攘,我是刑警寧澤带兜,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站吨灭,受9級特大地震影響刚照,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喧兄,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一无畔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吠冤,春花似錦浑彰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涯保,卻和暖如春诉濒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夕春。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工循诉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人撇他。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓茄猫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親困肩。 傳聞我的和親對象是個殘疾皇子划纽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)锌畸,斷路器勇劣,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 明明不愛比默,卻說那是真愛要和已婚男人做小三。 還想死皮耐臉地給著對方在一起盆犁,明知對方是渣男命咐,還死不放手,被一次次傷害...
    王小雪的秘密花園閱讀 384評論 0 3
  • 我聆聽內(nèi)在和平的指引窜司,并跟隨它行動沛善。今天,我很清楚塞祈,巴阿在引領(lǐng)我的每一步金刁。 通過你帶有愛的念頭和內(nèi)在和平的聲音,去...
    英杰旺姆閱讀 174評論 0 0
  • 北京中聯(lián)互動科技發(fā)展科技有限公司自成立以來议薪,主要從事基礎(chǔ)電信業(yè)務(wù)的運營尤蛮。公司依靠強大的技術(shù)團隊、先進的國際通信技術(shù)...
    hackdl閱讀 318評論 0 3