From dd796a2ceffd91b40b9abf0130130342b9ed3c65 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Wed, 29 Aug 2012 13:12:19 +0000 Subject: [PATCH] Zmiana czasu cache'owania danych otrzymanych z API GeoNames w module pogoda. --- modules/80_lang/handler.php | 64 ++++++++++++++++++++++++++++--- 1 files changed, 57 insertions(+), 7 deletions(-) diff --git a/modules/80_lang/handler.php b/modules/80_lang/handler.php index 05d6280..4ba21ea 100644 --- a/modules/80_lang/handler.php +++ b/modules/80_lang/handler.php @@ -1,7 +1,48 @@ <?php -class bot_lang_module implements BotModule { - private $APPID = ''; +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 = '\''.strtr($param, array('\'' => '\'\'')).'\''; + } + } + 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; + } +} + +class bot_lang_module implements BotModule { function handle($msg, $params) { $args = trim($msg->args); @@ -23,13 +64,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/Translate'); + $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 { @@ -49,7 +99,7 @@ return new BotMsg('Wybrana komenda nie istnieje. Prawdopodobnie chodziło ci o jedną z komend językowych, których nazwy zapisywane są <b>bez</b> spacji pomiędzy spacji pomiędzy kodami języków (angpol, a nie: ang pol).<br /><br />'."\n\n" . '<u>Spróbuj:</u><br />'."\n" - . $msg->command.ltrim($msg->args)); + . $msg->command.htmlspecialchars(ltrim($msg->args))); } } ?> -- Gitblit v1.9.1