2012-05-25 8 views
6

Hat jemand ein PHP-Codebeispiel zur Verwendung der Microsoft Bing Translation API mit ihrem neuen tokenbasierten Anforderungssystem? Ich habe mich beim Azure Marketplace registriert, ich habe eine Client-ID und einen "geheimen" Client, aber alles, was ich bisher versucht habe, führt trotzdem zu einem "400 Bad Request" -Fehler. Vielen Dank!PHP und Bing-Übersetzung API

Hier ist ein ziemlich einfaches Beispiel des Codes, den ich versucht habe (ich habe die Client ID und Secret Value redigiert). Ich arbeite mit dem Verständnis, dass die Post-Variablen über die URL-Anfrage übergeben werden können ... Ich hoffe, das ist richtig.

$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); 
+0

Hallo Benutzer Perfekt Works stattdessen warum gehst du nicht * Show * Wir haben was Sie getan haben, dann stellen Sie spezifische Fragen über den Code, und dann können wir Ihnen besser helfen. Auf dieser Seite geht es nicht wirklich darum, Code für Leute zu schreiben, sondern dafür, dass sie helfen, wenn sie feststecken (was du bist ... du musst nur deinen Code posten :) Viel Glück! – jmort253

+0

Fertig ... siehe oben. – user1408397

+0

Müssen Sie das Token in die zweite Curl-Anfrage übergeben? http://wangpidong.blogspot.com/2012/04/how-to-use-new-bing-translator-api-with.html – jmort253

Antwort

6

ich wenig PHP-Klasse createde haben, die einfach zu bedienen und einfach zu jedem PHP-Projekt zu integrieren. Sie können es here finden. Dies ist Code:

<?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; 
     } 
    } 
?> 
+0

@kleopatra Siehe die Antwort, ich habe es bearbeitet. – torayeff

0

an Ihrem Kopfteil Setzen Sie diesen Code .. Dieser Für Me..Enjoy es

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