2012-05-25 11 views
6

Qualcuno ha un esempio di codice PHP su come utilizzare l'API di traduzione Microsoft Bing con il nuovo sistema di richiesta basato su token? Mi sono registrato con Azure Marketplace, ho un ID cliente e un client "segreto", ma tutto ciò che ho provato finora produce comunque un errore "400 Bad Request". Grazie mille!API di traduzione PHP e Bing

Ecco un esempio piuttosto semplice del codice che ho provato (ho corretto l'ID client e il valore segreto). Sto operando con la comprensione che le variabili del post possono essere passate attraverso la richiesta dell'URL ... Spero che sia corretto.

$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

Ciao utente, invece, perché non * spettacolo * noi cosa hai fatto, poi fai domande specifiche sul codice e poi possiamo aiutarti meglio. Questo sito non è veramente dedicato alla scrittura di codice per le persone, ma serve per aiutare quando sono bloccati (che tu sei ... devi solo pubblicare il tuo codice :) Buona fortuna! – jmort253

+0

Fatto ... vedi sopra. – user1408397

+0

È necessario passare il token alla seconda richiesta di ricciolo? http://wangpidong.blogspot.com/2012/04/how-to-use-new-bing-translator-api-with.html – jmort253

risposta

6

ho createde po 'di classe PHP che è facile da usare e facile da integrare a qualsiasi progetto PHP. Lo puoi trovare here. Questo è un codice:

<?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 Vedere la risposta, l'ho modificata. – torayeff

0

Si prega di inserire questo codice a vostra parte di intestazione .. Questo funziona perfetto per Me..Enjoy si

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