setActive(false); $this->client = dcCore::app()->blog->settings->get(basename(dirname(__DIR__)))->get('microsoft_proposal_client'); $this->secret = dcCore::app()->blog->settings->get(basename(dirname(__DIR__)))->get('microsoft_proposal_secret'); $this->setName(__('Bing')); $this->setDesc(__('Microsoft Bing translation tool')); $this->setActive(!empty($this->client) && !empty($this->secret)); } public function form() { return '

' . '

' . '

' . __('You must have:') . '

' . ''; } public function save() { $client = empty($_POST['translater_microsoft_proposal_client']) ? '' : $_POST['translater_microsoft_proposal_client']; $secret = empty($_POST['translater_microsoft_proposal_secret']) ? '' : $_POST['translater_microsoft_proposal_secret']; dcCore::app()->blog->settings->get(basename(dirname(__DIR__)))->put('microsoft_proposal_client', $client, 'string', '', true, true); dcCore::app()->blog->settings->get(basename(dirname(__DIR__)))->put('microsoft_proposal_secret', $secret, 'string', '', true, true); } public function translate($str, $from, $to) { try { return $this->doYourFuckingJob($this->client, $this->secret, $str, $from, $to); } catch (Exception $e) { } return ''; } // // Microsoft fucking oAuth // private function doYourFuckingJob($client, $secret, $str, $from, $to) { try { //Client ID of the application. $clientID = $client; //Client Secret key of the application. $clientSecret = $secret; //OAuth Url. $authUrl = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/'; //Application Scope Url $scopeUrl = 'http://api.microsofttranslator.com'; //Application grant type $grantType = 'client_credentials'; //Get the Access token. $accessToken = $this->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl); //Create the authorization Header string. $authHeader = 'Authorization: Bearer ' . $accessToken; //Set the params.// $fromLanguage = $from; $toLanguage = $to; $inputStr = $str; $contentType = 'text/plain'; $category = 'general'; $params = 'text=' . urlencode($inputStr) . '&to=' . $toLanguage . '&from=' . $fromLanguage; $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params"; //Get the curlResponse. $curlResponse = $this->curlRequest($translateUrl, $authHeader); //Interprets a string of XML into an object. $xmlObj = simplexml_load_string($curlResponse); foreach ((array) $xmlObj[0] as $val) { $translatedStr = $val; } return (string) $translatedStr; /* echo ""; echo ""; echo ""; echo ""; echo ""; echo "
From $fromLanguageTo $toLanguage
" . $inputStr . "" . $translatedStr . "
"; */ } catch (Exception $e) { throw $e; } } /* * Get the access token. * * @param string $grantType Grant type. * @param string $scopeUrl Application Scope URL. * @param string $clientID Application client ID. * @param string $clientSecret Application client ID. * @param string $authUrl Oauth Url. * * @return string. */ private function getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl) { try { //Initialize the Curl Session. $ch = curl_init(); //Create the request Array. $paramArr = [ 'grant_type' => $grantType, 'scope' => $scopeUrl, 'client_id' => $clientID, 'client_secret' => $clientSecret, ]; //Create an Http Query.// $paramArr = http_build_query($paramArr); //Set the Curl URL. curl_setopt($ch, CURLOPT_URL, $authUrl); //Set HTTP POST Request. curl_setopt($ch, CURLOPT_POST, true); //Set data to POST in HTTP "POST" Operation. curl_setopt($ch, CURLOPT_POSTFIELDS, $paramArr); //CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec(). curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Execute the cURL session. $strResponse = curl_exec($ch); //Get the Error Code returned by Curl. $curlErrno = curl_errno($ch); if ($curlErrno) { $curlError = curl_error($ch); curl_close($ch); throw new Exception($curlError); } //Close the Curl Session. curl_close($ch); //Decode the returned JSON string. $objResponse = json_decode($strResponse); if (@$objResponse->error) { throw new Exception($objResponse->error_description); } return $objResponse->access_token; } catch (Exception $e) { throw $e; } } /* * Create and execute the HTTP CURL request. * * @param string $url HTTP Url. * @param string $authHeader Authorization Header string. * @param string $postData Data to post. * * @return string. * */ private function curlRequest($url, $authHeader) { //Initialize the Curl Session. $ch = curl_init(); //Set the Curl url. curl_setopt($ch, CURLOPT_URL, $url); //Set the HTTP HEADER Fields. curl_setopt($ch, CURLOPT_HTTPHEADER, [$authHeader,'Content-Type: text/xml']); //CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec(). curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Execute the cURL session. $curlResponse = curl_exec($ch); //Get the Error Code returned by Curl. $curlErrno = curl_errno($ch); if ($curlErrno) { $curlError = curl_error($ch); curl_close($ch); throw new Exception($curlError); } //Close a cURL session. curl_close($ch); return $curlResponse; } }