From 64d3114c3eeb933152732e024b81b2a94c8db87f Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Sat, 30 Jun 2012 20:06:25 +0000
Subject: [PATCH] Zmiany w Microsoft Translator, tj: - przeniesienie systemu do Azure Datamarket, - zmiany w API, - nowy klucz, tzw. Account Key.

---
 modules/80_lang/msapi.php        |   44 ++++++++++++++++++++++
 INSTALL                          |   15 ++++---
 class/config.php                 |    2 
 UPGRADE                          |   14 +++++++
 modules/80_lang/msapi_config.php |    5 ++
 modules/80_lang/handler.php      |   21 +++++++---
 6 files changed, 87 insertions(+), 14 deletions(-)

diff --git a/INSTALL b/INSTALL
index 9be0c36..006c870 100644
--- a/INSTALL
+++ b/INSTALL
@@ -16,17 +16,18 @@
 * wykonuj za pomocą crona polecenie `/sciezka/do/bota/data/update.sh` ok.
   20 minut po każdej pełnej godzinie
 * uruchom /data/update_all.sh (będąc w katalogu ./data) od razu po instalacji
-* pobierz Application ID ze strony http://www.bing.com/developers/appids.aspx
-  (wymaga identyfikatora Windows Live ID), a następnie wpisz go w pliku
-  ./modules/80_lang/handler.php w miejsu:
+* pobierz Account Key ze strony https://datamarket.azure.com/
+  (wymaga identyfikatora Windows Live ID), uzyskaj subskrybcję Microsoft Translator:
+  https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb
+  a następnie Account Key w pliku ./modules/80_lang/msapi_config.php w miejscu:
 
-class bot_lang_module implements BotModule {
-	private $APPID = '';
+class msapi_config {
+	protected $accountKey = '';
 
   które po edycji ma wyglądać tak:
 
-class bot_lang_module implements BotModule {
-	private $APPID = 'A123BC9238...ADD';
+class msapi_config {
+	protected $accountKey = 'A123BC9238...ADD';
 
 
 ------------
diff --git a/UPGRADE b/UPGRADE
index eec6e0d..5f0b035 100644
--- a/UPGRADE
+++ b/UPGRADE
@@ -1,4 +1,18 @@
 ===========================
+ AKTUALIZACJA Z WERSJI 2.2
+===========================
+
+* usuń zawartość katalogu ./modules/80_lang
+* wgraj ./module/80_lang z paczki
+* uzyskaj Azure Datamarket acoount key ze strony:
+  https://datamarket.azure.com/
+  oraz uzyskaj jakąkolwiek subskrypcję Microsoft Translator pod adresem:
+  https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb
+* Account Key wpisz w przewidzianym miejscu w pliku
+  ./modules/80_lang/msapi_config.php
+* zastąp plik ./class/legacy/main.php
+
+===========================
  AKTUALIZACJA Z WERSJI 2.1
 ===========================
 
diff --git a/class/config.php b/class/config.php
index c9061f8..bfb7d08 100644
--- a/class/config.php
+++ b/class/config.php
@@ -13,4 +13,4 @@
 		),
 	);
 }
-?>
\ No newline at end of file
+?>
diff --git a/modules/80_lang/handler.php b/modules/80_lang/handler.php
index 05d6280..15bd3b0 100644
--- a/modules/80_lang/handler.php
+++ b/modules/80_lang/handler.php
@@ -1,7 +1,7 @@
 <?php
+require_once(dirname(__FILE__).'/msapi.php');
+
 class bot_lang_module implements BotModule {
-	private $APPID = '';
-	
 	function handle($msg, $params) {
 		$args = trim($msg->args);
 		
@@ -23,13 +23,22 @@
 		$data = jsarray::parse($data);
 		
 		if(!$data OR count($data)==0 OR count($data[1])==0) {
-			$data = file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId='.urlencode($this->APPID).'&text='.urlencode($args).'&from='.$params[0].'&to='.$params[1]);
+			$api = new msapi('https://api.datamarket.azure.com/Bing/MicrosoftTranslator/');
+			$data = $api->execute(array(
+				'From' => $params[0],
+				'To' => $params[1],
+				'Text' => $args,
+				'$skip' => 0,
+				'$top' => 1
+			));
 			
-			if(!$data) {
-				return new BotMsg('Błąd podczas pobierania danych ze słownika. Przepraszamy.');
+			if(!$data || !isset($data['d']['results'][0]['Text'])) {
+				return new BotMsg('Błąd podczas pobierania danych z tłumacza. Przepraszamy.');
 			}
 			
-			return new BotMsg('<u>Tłumaczenie (by Microsoft Translator):</u><br />'."\n".strip_tags($data));
+			$data = $data['d']['results'][0]['Text'];
+			
+			return new BotMsg('<u>Tłumaczenie (by Microsoft Translator):</u><br />'."\n".htmlspecialchars($data));
 		}
 		else
 		{
diff --git a/modules/80_lang/msapi.php b/modules/80_lang/msapi.php
new file mode 100644
index 0000000..4f4fc16
--- /dev/null
+++ b/modules/80_lang/msapi.php
@@ -0,0 +1,44 @@
+<?php
+require_once(dirname(__FILE__).'/msapi_config.php');
+
+class msapi extends msapi_config {
+	public $url;
+	
+	function __construct($url) {
+		$this->url = $url;
+	}
+	
+	function execute($params) {
+		if(!is_array($params)) {
+			throw new Exception('Przekazany parametr nie jest tablicą');
+		}
+		
+		foreach($params as $name => &$param) {
+			if(substr($name, 0, 1)!='$' && is_string($param)) {
+				$param = '\''.$param.'\'';
+			}
+		}
+		unset($param);
+		$params['$format'] = 'json';
+		
+		$context = stream_context_create(array(
+			'http' => array(
+				'request_fulluri' => TRUE,
+				'header' => 'Authorization: Basic '.base64_encode(':'.$this->accountKey)
+			),
+		));
+		
+		$content = file_get_contents($this->url.'?'.http_build_query($params, '', '&'), FALSE, $context);
+		if(!$content) {
+			return FALSE;
+		}
+		
+		$content = json_decode($content, TRUE);
+		if(!$content) {
+			return FALSE;
+		}
+		
+		return $content;
+	}
+}
+?>
diff --git a/modules/80_lang/msapi_config.php b/modules/80_lang/msapi_config.php
new file mode 100644
index 0000000..d9fb5e0
--- /dev/null
+++ b/modules/80_lang/msapi_config.php
@@ -0,0 +1,5 @@
+<?php
+class msapi_config {
+	protected $accountKey = '';
+}
+?>

--
Gitblit v1.9.1