这篇文章介绍一下如何结合代理服务器使用腾讯AI开放平台提供的文本翻译API。
目录
事前准备
- 事前准备
- 请求参数
- 返回格式
- 示例代码
- 使用示例
- 常见问题
- 结果确认
- 总结
- 参考内容
实现需要申请申请账号,获得如下接入凭证:
- AppID:应用ID
- AppKey:应用密钥
目前免费账号可创建一百个应用,每个应用有不同的AppID和AppKey,详细操作可参看:
- https://liumiaocn.blog.csdn.net/article/details/108374404
代理服务器的设定可参看:
- macOS版squid:https://liumiaocn.blog.csdn.net/article/details/108629944
- Linux版squid:https://blog.csdn.net/liumiaocn/article/details/80586879
文本翻译的功能目前是通过腾讯翻译君提供的,请求的参数信息如下所示:
返回格式就简单的多,状态/翻译内容/翻译后内容,非常容易理解:
腾讯官方给了一个简单的PHP的示例,这个例子中只需要修改AppID、AppKey以及翻译内容就可以进行功能验证了,这里将其稍整理整理为如下php文件,使用格式为:
使用格式:php translate_through_api.ph -u $APP_ID -p $APP_KEY -s “带翻译的内容”
- 代码内容
liumiaocn:php liumiao$ cat translate_through_api.php // 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