【问题标题】:How to use Bing Translation API?如何使用必应翻译 API?
【发布时间】:2013-01-02 23:56:23
【问题描述】:

我正在尝试使用必应翻译 API,但我很困惑。 似乎有很多可能性(旧的和新的),但我不明白我必须做什么。

有人可以帮帮我吗?

我想发送一个像http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=<AppId>&to=de&text=World 这样的HTTP 请求并获得翻译。从哪里获取 AppId?

到目前为止我做了什么:

  1. 已登录以免费使用 API (https://datamarket.azure.com/dataset/bing/microsofttranslator)
  2. 创建了一个应用程序:https://datamarket.azure.com/developer/applications

现在我有了 Client_ID 和 Client_Secret,还有一个帐户密钥(在此处可见 https://datamarket.azure.com/account

现在该怎么办?

非常感谢或任何帮助!

【问题讨论】:

    标签: api localization bing language-translation microsoft-translator


    【解决方案1】:

    AppID 已弃用。您需要如何执行以下步骤:

    1. https://datamarket.azure.com注册您的clientID、clientSecter
    2. 那么您的代码必须获取访问令牌才能登录 BingTranslator API

    http://msdn.microsoft.com/en-us/library/dd576287.aspx上阅读更多详细信息

    NB Microsoft Translator 已被 Bing Translate 取代,它似乎没有现成的 API。

    【讨论】:

      【解决方案2】:

      点击http://api.microsofttranslator.com 上的链接。 API 采用 appid 参数中的访问令牌。请参阅文档中的“获取访问令牌”部分以了解如何获取该令牌。

      【讨论】:

      • 我已经通读了所有内容,但我还没有找到解决方案......也许我正在监督一些事情。另外,如果我理解 access_token 的权利,您需要在 x 分钟内创建它。我想要一个简单的 appId,它是静态的,我可以简单地将其硬编码到我的应用程序中;)
      【解决方案3】:

      请随意使用此说明(如果您使用的是 php):

      定义您的密钥

      $apis['azure']['id'] = 123456789
      $apis['azure']['key'] = 'abcde123456';
      

      类和函数

      class AccessTokenAuthentication {
          function getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl){
              try {
                  $ch = curl_init();
                  $paramArr = array (
                      'grant_type'    => $grantType,
                      'scope'         => $scopeUrl,
                      'client_id'     => $clientID,
                      'client_secret' => $clientSecret
                  );
                  $paramArr = http_build_query($paramArr);
                  curl_setopt($ch, CURLOPT_URL, $authUrl);
                  curl_setopt($ch, CURLOPT_POST, TRUE);
                  curl_setopt($ch, CURLOPT_POSTFIELDS, $paramArr);
                  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                  $strResponse = curl_exec($ch);
                  $curlErrno = curl_errno($ch);
                  if($curlErrno){
                      $curlError = curl_error($ch);
                      throw new Exception($curlError);
                  }
                  curl_close($ch);
                  $objResponse = json_decode($strResponse);
                  if($objResponse->error){
                      throw new Exception($objResponse->error_description);
                  }
                  return $objResponse->access_token;
              } catch (Exception $e) {
                  echo "Exception-".$e->getMessage();
              }
          }
      }
      class HTTPTranslator {
          function curlRequest($url, $authHeader, $postData=''){
              $ch = curl_init();
              curl_setopt ($ch, CURLOPT_URL, $url);
              curl_setopt ($ch, CURLOPT_HTTPHEADER, array($authHeader,"Content-Type: text/xml"));
              curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
              curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, False);
              if($postData) {
                  curl_setopt($ch, CURLOPT_POST, TRUE);
                  curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
              }
              $curlResponse = curl_exec($ch);
              $curlErrno = curl_errno($ch);
              if ($curlErrno) {
                  $curlError = curl_error($ch);
                  throw new Exception($curlError);
              }
              curl_close($ch);
              return $curlResponse;
          }
          function xmlLanguageCodes($languageCodes) {
              $requestXml = '<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">';
              if(sizeof($languageCodes) > 0){
                  foreach($languageCodes as $codes) {
                      $requestXml .= "<string>$codes</string>";
                  }
              } else {
                  throw new Exception('$languageCodes array is empty.');
              }
              $requestXml .= '</ArrayOfstring>';
              return $requestXml;
          }
      
          function xmlTranslateArray($fromLanguage,$toLanguage,$contentType,$inputStrArr) {
              $requestXml = "<TranslateArrayRequest>".
              "<AppId/>".
              "<From>$fromLanguage</From>". 
              "<Options>" .
                  "<Category xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  "<ContentType xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">$contentType</ContentType>" .
                  "<ReservedFlags xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  "<State xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  "<Uri xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
                  "<User xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" .
              "</Options>" .
              "<Texts>";
                  foreach ($inputStrArr as $inputStr) {
                      $requestXml .= "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">$inputStr</string>";
                  }
              $requestXml .= "</Texts>".
              "<To>$toLanguage</To>" .
              "</TranslateArrayRequest>";
              return $requestXml;
          }
      }
      
      function get_language_names($locale="en") {
          global $list, $apis;
          try {
              $clientID = $apis['azure']['id'];
              $clientSecret = $apis['azure']['key'];
              $authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
              $scopeUrl = "http://api.microsofttranslator.com";
              $grantType = "client_credentials";
              $authObj = new AccessTokenAuthentication();
              $accessToken = $authObj->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
              $authHeader = "Authorization: Bearer ". $accessToken;
              foreach($list['translate'] as $k=>$iso) {
                  $languageCodes[] = $k;
              }
              $url = "http://api.microsofttranslator.com/V2/Http.svc/GetLanguageNames?locale=$locale";
              $translatorObj = new HTTPTranslator();
              $requestXml = $translatorObj->xmlLanguageCodes($languageCodes);
              $curlResponse =$translatorObj->curlRequest($url, $authHeader, $requestXml);
              $xmlObj = simplexml_load_string($curlResponse);
              $i=0;
              foreach($xmlObj->string as $language) {
                  $result[$languageCodes[$i]] = (string)$language;
                  $i++;
              }
              return $result;
          } catch (Exception $e) {
              echo "Exception: " . $e->getMessage() . PHP_EOL;
          }
      }
      
      function get_translate($array, $from, $to, $html=false) {
          global $apis;
          try {
              $clientID = $apis['azure']['id'];
              $clientSecret = $apis['azure']['key'];
              $authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
              $scopeUrl = "http://api.microsofttranslator.com";
              $grantType = "client_credentials";
              $authObj = new AccessTokenAuthentication();
              $accessToken = $authObj->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
              $authHeader = "Authorization: Bearer ". $accessToken;
      
              $fromLanguage = $from;
              $toLanguage = $to;
              $inputStrArr = array_values($array);
              if($html) {
                  $contentType = 'text/html';
                  foreach($inputStrArr as $k=>$item) {
                      $inputStrArr[$k] = htmlentities($inputStrArr[$k]);
                  }
              } else {
                  $contentType = 'text/plain';
              }
      
              $translatorObj = new HTTPTranslator();
              $requestXml = $translatorObj->xmlTranslateArray($fromLanguage,$toLanguage,$contentType,$inputStrArr);
              $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/TranslateArray";
              $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader, $requestXml);
      
              $xmlObj = simplexml_load_string($curlResponse);
              foreach($xmlObj->TranslateArrayResponse as $translatedArrObj){
                  $result[] = (string)$translatedArrObj->TranslatedText;
              }
              return $result;
          } catch (Exception $e) {
              echo "Exception: " . $e->getMessage() . PHP_EOL;
          }
      }
      
      function get_translate_single($input, $from, $to, $html=false) {
          global $apis;
          try {
              $clientID = $apis['azure']['id'];
              $clientSecret = $apis['azure']['key'];
              $authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
              $scopeUrl = "http://api.microsofttranslator.com";
              $grantType = "client_credentials";
              $authObj = new AccessTokenAuthentication();
              $accessToken = $authObj->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
              $authHeader = "Authorization: Bearer ". $accessToken;
      
              $fromLanguage = $from;
              $toLanguage = $to;
              if($html) {
                  $contentType = 'text/html';
                  $input = htmlentities($input);
              } else {
                  $contentType = 'text/plain';
              }
      
              # params
              $params = "text=".urlencode($input)."&to=".$toLanguage."&from=".$fromLanguage;
              $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?".$params;
      
              # object
              $translatorObj = new HTTPTranslator();
              $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader);
      
              # interprets a string of XML into an object.
              $xmlObj = simplexml_load_string($curlResponse);
              foreach((array)$xmlObj[0] as $val){
                  $result = $val;
              }
              return $result;
          } catch (Exception $e) {
              echo "Exception: " . $e->getMessage() . PHP_EOL;
          }
      }
      

      电话

      echo get_translate_single('horse', 'en', 'es'); //this will print 'caballo'
      

      echo get_translate(array('horse', 'house'), 'en', 'es'); //this will print array('caballo', 'casa')
      

      就是这样,玩得开心记得关注terms of service

      【讨论】:

      • 哇,谢谢。这是作品兄弟。但是我收到了这个错误Notice: Undefined property: stdClass::$error in {someplace}
      • @HabibRohman 尝试降低显示错误级别:display_errors(false); error_reporting(0);
      • @FlashThunder 我同意,但这只是开发环境的一个快速(和临时)修复
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多