欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

腾讯AI开放平台使用尝试:代理后的文本翻译API使用方式

程序员文章站 2022-07-13 16:37:26
...

这篇文章介绍一下如何结合代理服务器使用腾讯AI开放平台提供的文本翻译API。


事前准备

实现需要申请申请账号,获得如下接入凭证:

  • AppID:应用ID
  • AppKey:应用**

目前免费账号可创建一百个应用,每个应用有不同的AppID和AppKey,详细操作可参看:

代理服务器的设定可参看:


请求参数

文本翻译的功能目前是通过腾讯翻译君提供的,请求的参数信息如下所示:
腾讯AI开放平台使用尝试:代理后的文本翻译API使用方式

返回格式

返回格式就简单的多,状态/翻译内容/翻译后内容,非常容易理解:
腾讯AI开放平台使用尝试:代理后的文本翻译API使用方式


示例代码

腾讯官方给了一个简单的PHP的示例,这个例子中只需要修改AppID、AppKey以及翻译内容就可以进行功能验证了,这里将其稍整理整理为如下php文件,使用格式为:

使用格式:php translate_through_api.ph -u $APP_ID -p $APP_KEY -s “带翻译的内容”

  • 代码内容
liumiaocn:php liumiao$ cat translate_through_api.php 
<?php
// getReqSign :根据 接口请求参数 和 应用** 计算 请求签名
// 参数说明
//   - $params:接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)
//   - $appkey:应用**
// 返回数据
//   - 签名结果
function getReqSign($params /* 关联数组 */, $appkey /* 字符串*/)
{
    // 1. 字典升序排序
    ksort($params);

    // 2. 拼按URL键值对
    $str = '';
    foreach ($params as $key => $value)
    {
        if ($value !== '')
        {
            $str .= $key . '=' . urlencode($value) . '&';
        }
    }

    // 3. 拼接app_key
    $str .= 'app_key=' . $appkey;

    // 4. MD5运算+转换大写,得到请求签名
    $sign = strtoupper(md5($str));
    return $sign;
}

// doHttpPost :执行POST请求,并取回响应结果
// 参数说明
//   - $url   :接口请求地址
//   - $params:完整接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)
// 返回数据
//   - 返回false表示失败,否则表示API成功返回的HTTP BODY部分
function doHttpPost($url, $params)
{
    $curl = curl_init();

    $response = false;
    do
    {
        // 1. 设置HTTP URL (API地址)
        curl_setopt($curl, CURLOPT_URL, $url);

        // 2. 设置HTTP HEADER (表单POST)
        $head = array(
            'Content-Type: application/x-www-form-urlencoded'
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $head);

        // 3. 设置HTTP BODY (URL键值对)
        $body = http_build_query($params);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $body);

        // 4. 调用API,获取响应结果
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_NOBODY, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_PROXY, $proxy_host);
	curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port);
        $response = curl_exec($curl);
        if ($response === false)
        {
            $response = false;
            break;
        }

        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        if ($code != 200)
        {
            $response = false;
            break;
        }
    } while (0);

    curl_close($curl);
    return $response;
}

$options = "u:p:s:";
$opts = getopt ( $options );

// 获得环境变量
$proxy_host = getenv('PROXY_HOSTNAME');
$proxy_port = getenv('PROXY_PORT');

// 设置请求数据
$appid  = $opts['u'];
$appkey = $opts['p'];
$transcontent = $opts['s'];
$params = array(
    'app_id'     => "$appid",
    'source'     => 'zh',
    'target'     => 'en',
    'text'       => "$transcontent",
    'time_stamp' => strval(time()),
    'nonce_str'  => strval(rand()),
    'sign'       => '',
);
$params['sign'] = getReqSign($params, $appkey);

// 执行API调用
$url = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate';
$response = doHttpPost($url, $params);
echo $response;
?>
liumiaocn:php liumiao$ 

使用示例

现在所有东西都已就绪,让我们来期待一***意事前要做如下准备

  • export APP_ID=所使用的AppID值
  • export APP_KEY=所使用的AppKey值
  • export PROXY_HOSTNAME=192.168.31.242
  • export PROXY_PORT=3128

常见问题

如果出现如下问题提示:

PHP Notice:  curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in

对应方法可根据其提示的那样,将示例代码中的true设定为2即可,也可以设定为false进行关闭。

  • 设定代理服务器的方式:在代码中添加如下内容即可
curl_setopt($curl, CURLOPT_PROXY, "代理IP");
curl_setopt($curl, CURLOPT_PROXYPORT, "代理端口");
curl_setopt($curl, CURLOPT_PROXYUSERPWD, "代理用户:代理密码");

结果确认

liumiaocn:php liumiao$ php translate_through_api.php -u $APP_ID -p $APP_KEY -s "黄沙百战穿金甲"
{
  "ret": 0,
  "msg": "ok",
  "data": {
	  "source_text": "黄沙百战穿金甲",
	  "target_text": "Serbia has worn his helmets and armour through a hundred wars."
  }
}
liumiaocn:php liumiao$ 

总结

使用php的curl模块可以很容易地设定代理服务器,这样即使服务在内网也可以通过代理进行穿透了。

参考内容

https://ai.qq.com/doc/nlptrans.shtml