6

我已在 Azure Marketplace 注册,我有一个客户端 ID 和一个客户端“机密”,但到目前为止我尝试的所有操作都会导致“400 Bad Request”错误。非常感谢!

这是我一直在尝试的一个相当基本的代码示例(我已经编辑了客户端 ID 和秘密值)。我在理解 post 变量可以通过 URL 请求传递的情况下进行操作......我希望这是正确的。

$authURL = 'http://datamarket.accesscontrol.windows.net/v2/OAuth2-13&grant_type=client_credentials&client_id={CLIENT_ID VALUE HERE}&client_secret={CLIENT_SECRET VALUE HERE}&scope=http://api.microsofttranslator.com';
$chpre = curl_init();
curl_setopt($chpre, CURLOPT_URL, $authURL );
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$xpre = curl_exec($chpre);

$texttobetranslated = "الذي تقدمه";
$BingURL = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" . $texttobetranslated . "&from=ar&to=en";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $BingURL );
$x = curl_exec($ch);
4

3 回答 3

6

我创建了一个易于使用且易于集成到任何 PHP 项目的 PHP 小类。你可以在这里找到它。这是代码:

  <?php
    class BingTranslation
    {
        public $clientID;
        public $clientSecret;

        public function __construct($cid, $secret)
        {
            $this->clientID = $cid;
            $this->clientSecret = $secret;
        }

        public function get_access_token()
        {   
            //if access token is not expired and is stored in COOKIE
            if(isset($_COOKIE['bing_access_token']))
                return $_COOKIE['bing_access_token'];

            // Get a 10-minute access token for Microsoft Translator API.
            $url = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13';
            $postParams = 'grant_type=client_credentials&client_id='.urlencode($this->clientID).
            '&client_secret='.urlencode($this->clientSecret).'&scope=http://api.microsofttranslator.com';

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postParams);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
            $rsp = curl_exec($ch); 
            $rsp = json_decode($rsp);
            $access_token = $rsp->access_token;

            setcookie('bing_access_token', $access_token, $rsp->expires_in);

            return $access_token;
        }

        public function translate($word, $from, $to)
        {
            $access_token = $this->get_access_token();
            $url = 'http://api.microsofttranslator.com/V2/Http.svc/Translate?text='.$word.'&from='.$from.'&to='.$to;

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:bearer '.$access_token));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
            $rsp = curl_exec($ch); 

            preg_match_all('/<string (.*?)>(.*?)<\/string>/s', $rsp, $matches);

            return $matches[2][0];
        }

        public function translate2($word, $from, $tos)
        {
            //translates 1 word to several languages
            //$tos is array of languages to translate to
            //returns array of translations as $result['en']=>'Hello'

            $access_token = $this->get_access_token();

            $result[$from] = $word;

            foreach($tos as $to)
            {
                $url = 'http://api.microsofttranslator.com/V2/Http.svc/Translate?text=hello&from='.$from.'&to='.$to;

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url); 
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:bearer '.$access_token));
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
                $rsp = curl_exec($ch); 

                preg_match_all('/<string (.*?)>(.*?)<\/string>/s', $rsp, $matches);

                $result[$to] = $matches[2][0];
            }

            return $result;
        }
    }
 ?>
于 2014-01-20T10:14:32.933 回答
0

请将此代码放在您的标题部分..这对我来说非常适合..享受它

<div id='MicrosoftTranslatorWidget' class='Light' style='color:white;background-color:#555555'></div>
<script type='text/javascript'>
setTimeout(function(){{
var s=document.createElement('script');
s.type='text/javascript';
s.charset='UTF-8';
s.src=((location && location.href && location.href.indexOf('https') == 0)?'https://ssl.microsofttranslator.com':'http://www.microsofttranslator.com')+'/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**&ctf=False&ui=true&settings=Manual&from=';
var p=document.getElementsByTagName('head')[0]||document.documentElement;
p.insertBefore(s,p.firstChild); 
}},0);
</script>
于 2016-06-07T09:52:26.170 回答
0

以下是基于必应翻译 API 的最新凭据为我工作的最新代码:

<?php 
$key1 = "??????";  //enter your azure key here
$endpoint = 'https://languagetranslationservice.cognitiveservices.azure.com/sts/v1.0/issuetoken';  //enter your azure end point here
$from = "en";  //Support Languages: https://docs.microsoft.com/en-us/azure/cognitive-services/translator/language-support
$to = "te";
$inputStr = "welcome to paradise";

function getToken($key1, $endpoint)
{
    $ch = curl_init();
    $data_string = json_encode('{body}');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($data_string),
            'Ocp-Apim-Subscription-Key: ' . $key1
        )
    );
    curl_setopt($ch, CURLOPT_URL, $endpoint);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $strResponse = curl_exec($ch);
    curl_close($ch);
    return $strResponse;
}

// function for translation
function curlRequest($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $curlResponse = curl_exec($ch);
    curl_close($ch);
    return $curlResponse;
}

//start translation
$accessToken = getToken($key1, $endpoint);
$params = "text=" . urlencode($inputStr) . "&to=" . $to . "&from=" . $from . "&appId=Bearer+" . $accessToken;
$translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params";
$curlResponse = curlRequest($translateUrl);
$output = simplexml_load_string($curlResponse);
echo $output;
?>
于 2020-04-15T07:14:13.330 回答