6

Azure Marketplace に登録し、クライアント ID とクライアント "シークレット" を持っていますが、これまでに試したことはすべて "400 Bad Request" エラーになります。どうもありがとう!

これは、私が試したコードのかなり基本的なサンプルです (クライアント ID とシークレット値を編集しました)。投稿変数は 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 に答える