2012-05-25 29 views
6

¿Alguien tiene un ejemplo de código PHP sobre cómo usar la API de traducción Bing de Microsoft con su nuevo sistema de solicitud basado en token? Me he registrado en Azure Marketplace, tengo una identificación de cliente y un "secreto" de cliente, pero todo lo que he intentado hasta ahora, no obstante, da como resultado un error de "400 solicitudes incorrectas". ¡Muchas gracias!API de traducción PHP y Bing

Aquí hay una muestra bastante básica del código que he estado intentando (he redactado la identificación del cliente y el valor secreto). Estoy operando con el entendimiento de que las variables posteriores se pueden pasar a través de la solicitud de URL ... Espero que sea correcto.

$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

Hola usuario, en su lugar, ¿por qué no * Mostrar * nosotros lo que has hecho, luego haz preguntas específicas sobre el código y luego podemos ayudarte mejor. Este sitio no se trata realmente de escribir códigos para las personas, sino que es para ayudar cuando están estancados (lo cual es ... solo necesitas publicar tu código :) ¡Buena suerte! – jmort253

+0

Hecho ... ver arriba. – user1408397

+0

¿Necesita pasar el token en la segunda solicitud de curl? http://wangpidong.blogspot.com/2012/04/how-to-use-new-bing-translator-api-with.html – jmort253

Respuesta

6

He createde poco de clase PHP que es fácil de usar y fácil de integrar en cualquier proyecto PHP. Puede encontrarlo here. Este es el código:

<?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 Vea la respuesta, lo he editado. – torayeff

0

Por favor poner este código en su parte de cabecera .. Esto funciona perfecto para Me..Enjoy que

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