Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Bing翻译API?_Api_Localization_Bing_Language Translation_Microsoft Translator - Fatal编程技术网

如何使用Bing翻译API?

如何使用Bing翻译API?,api,localization,bing,language-translation,microsoft-translator,Api,Localization,Bing,Language Translation,Microsoft Translator,我正在尝试使用Bing翻译API,但我感到困惑。 似乎有很多可能性(旧的和新的),但我不明白我必须做什么 有人能帮我吗 我想发送一个HTTP请求,如http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=) 创建了一个应用程序: 现在我有了Client_ID和Client_Secret,还有一个帐户密钥(在这里可见) 现在该怎么办 非常感谢您的帮助 请按照上的链接进行操作。API在appid参数中使用访问令牌。请参阅文档中的“

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

有人能帮我吗

我想发送一个HTTP请求,如
http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=)
  • 创建了一个应用程序:
  • 现在我有了Client_ID和Client_Secret,还有一个帐户密钥(在这里可见)

    现在该怎么办


    非常感谢您的帮助

    请按照上的链接进行操作。API在appid参数中使用访问令牌。请参阅文档中的“获取访问令牌”一节,了解如何获取该令牌。

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


  • 中注册您的clientID、clientSecter
  • 然后,您的代码必须获取登录API的访问令牌
  • 阅读更多详细说明


    注意:Microsoft Translator已被Bing Translation取代,它似乎没有现成的API。

    请随意使用此说明(如果您使用的是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'
    
    类和函数

    $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'
    


    就这样,玩得开心点,记住要遵循规则。

    我已经通读了所有内容,但我还没有找到解决方案。。。也许我在监督一些事情。另外,如果我正确理解访问令牌,您需要在x分钟内创建它。我想要一个简单的appId,它是静态的,我可以简单地将其硬编码到我的应用程序中;)哇,谢谢。这是我的工作,兄弟。但是我得到了这个错误
    注意:未定义的属性:stdClass::$error in{someplace}
    @HabibRohman尝试降低显示错误级别:
    显示错误(false);错误报告(0)@FlashThunder我同意,但这只是对开发环境的一个快速(暂时)修复