当前位置

调用Google Translate API的简易办法,国内也可以

James Qi 在 2020年6月21日 - 14:18 提交

2018年7月记录了一篇《调用Google Translate API生成Drupal翻译.po文件》,当时是按照Translation API Documentation Quickstart 快速入门(基本版) 的指导来做的,需要下载私钥json文件、设置环境变量、安装Github上的php docs samples等,用起来比较麻烦。

而这种运行办法最近总是遇到与Google API服务器之间的访问报错,不是SSL报错就是host无法连接,上周耽误了2天时间来进行各种排查,还找阿里云客服咨询,多个交流来回后也没有找到根本原因,那套php docs samples太复杂了,不好准确定位到底是哪段程序访问哪个网址的时候出的问题。

这个谷歌翻译API的调用对我们的项目来说还是很重要的,不能下周继续耽误了,昨天继续在网上查资料,找到这篇“Google Translate API Tutorial for PHP / Javascript / Java”,2013年的老文章就有介绍用PHP CURL库或者更简单的file_get_contents()来调用Google Translate API的代码例子。

于是我就用简单的代码片段进行测试,访问这个网址:

https://www.googleapis.com/language/translate/v2?key={$api_key}&q=" . rawurlencode($text) . "&target={$target}&source={$source}"

很顺畅就获取到了翻译结果,再去把以前的翻译程序进行了修改,里面添加了一个函数:

/**
 * 函数:调用Google Translate API进行翻译
 * 输入1: $source_text 需要翻译的文本
 * 输入2: $source_language_code 源语言代码
 * 输入3: $target_language_code 目标语言代码
 * 输出: $target_text 翻译出来的文本,如果报错则返回FALSE
 */
function translate($source_text, $source_language_code, $target_language_code) {
  //如果长度大于5000则返回失败
  if (strlen($source_text) >= 5000) {
    echo "source_text too long\n";
    return FALSE;
  }
  $api_key = 'AI................k8';//从google cloud console中设置、获取的API Key
  $url = "https://www.googleapis.com/language/translate/v2?key={$api_key}&q=";
  $url .= rawurlencode($source_text);
  $url .= "&target={$target_language_code}&source={$source_language_code}";
  $response = file_get_contents($url);
  $obj = json_decode($response, true); //true converts stdClass to associative array.
  if($obj != NULL)
  {
    if(isset($obj['error']))
    {
      echo "Error is : ".$obj['error']['message']."\n";
      return FALSE;
    }
    else
    {
      $target_text = $obj['data']['translations'][0]['translatedText'];
    }
  }
  else
  {
    echo "UNKNOW ERROR\n";
    return FALSE;
  }
  return $target_text;
}

再就可以从其它地方调用这个函数,很简单方便,不需要php docs samples中的各种组件了。

我把这个程序放在国外服务器上运行没有问题,但放在国内服务器上运行的时候报错:

PHP Warning:  file_get_contents(): SSL: Connection reset by peer in test.php on line 15
PHP Warning:  file_get_contents(): Failed to enable crypto in test.php on line 15
PHP Warning:  file_get_contents(https://www.googleapis.com/language/translate/v2?key=xxx&q=%E5%A5%BD&target=en&source=zh-CN): failed to open stream: operation failed in test.php on line 15

从报错看应该是被墙阻止了连接,貌似国内就无法使用了,但我更换连接的域名后就解决了,从www.googleapis.com改为translation.googleapis.com,后面URI路径、参数都不需要改变,可以从国内顺利连接、获取正确的翻译内容。

需要留意的是,这种调用办法简单,只要访问一个带有API Key的网址就可以,不需要在服务器上放置json私钥文件、不需要设置服务器环境变量,但也需要考虑安全问题,如果API Key被别人使用,会导致产生大量的费用,可以参考《使用 API 密钥》这篇文章中的内容,对API Key进行安全设置,对于网站来说一般可以设置“HTTP 引荐来源网址”(密钥会公开,改用服务帐号)或者“IP 地址”来进行限制。

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。