From 664fe7e953423790f556a0e9093a3d9667848567 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Fri, 12 Feb 2016 23:24:39 +0000 Subject: [PATCH] [mod_rss] Poprawka ładowania kanałów RSS (external entites) --- class/BotAPIGG.php | 95 +++++++++++++++++++++++++++++++++++++---------- 1 files changed, 75 insertions(+), 20 deletions(-) diff --git a/class/BotAPIGG.php b/class/BotAPIGG.php index c8108e1..90981dd 100644 --- a/class/BotAPIGG.php +++ b/class/BotAPIGG.php @@ -6,7 +6,7 @@ function __construct($msg, $httpcode, $content) { $this->httpcode = $httpcode; $this->content = $content; - parent::__construct($msg); + parent::__construct($msg.' Błąd '.$httpcode); } function __get($name) { @@ -44,7 +44,7 @@ } class BotAPIGG extends config { - private $token; + private static $token; const STATUS_DOSTEPNY = 2; const STATUS_DOSTEPNY_DESC = 4; @@ -151,10 +151,10 @@ $tok = $this->httpQuery('https://'.$token['host'].'/setStatus/'.$auth['numer'], array( CURLOPT_POST => TRUE, - CURLOPT_POSTFIELDS => array( + CURLOPT_POSTFIELDS => http_build_query(array( 'status' => $status, 'desc' => $desc, - ), + ), '', '&'), )); if( (string)$tok->status != '0') { @@ -181,22 +181,22 @@ $auth = $this->APIs['Gadu-Gadu']; $token = $this->getToken(); - $tok = $this->httpQuery('https://'.$token['host'].'/botmaster/setUrl/'.$auth['numer'], array( + $tok = $this->httpQuery('https://botapi.gadu-gadu.pl/botmaster/getImage/'.$auth['numer'], array( CURLOPT_POST => TRUE, - CURLOPT_POSTFIELDS => array('hash' => $hash), + CURLOPT_POSTFIELDS => http_build_query(array('hash' => $hash), '', '&'), ), TRUE, FALSE); return $tok; } - function existsImage() { + function existsImage($hash) { $auth = $this->APIs['Gadu-Gadu']; $token = $this->getToken(); - $tok = $this->httpQuery('https://'.$token['host'].'/botmaster/setUrl/'.$auth['numer'], array( + $tok = $this->httpQuery('https://botapi.gadu-gadu.pl/botmaster/existsImage/'.$auth['numer'], array( CURLOPT_POST => TRUE, - CURLOPT_POSTFIELDS => array('hash' => $hash), - ), TRUE, FALSE); + CURLOPT_POSTFIELDS => http_build_query(array('hash' => $hash), '', '&'), + )); if( (string)$tok->status != '0') { return FALSE; @@ -206,19 +206,17 @@ } function putImage($path) { - $fp = fopen($path, 'r'); - if(!$fp) { - return FALSE; - } - $auth = $this->APIs['Gadu-Gadu']; $token = $this->getToken(); - $tok = $this->httpQuery('https://'.$token['host'].'/botmaster/setUrl/'.$auth['numer'], array( - CURLOPT_HTTPHEADER => array('Content-Type: image/x-any'), + $tok = $this->httpQuery('https://botapi.gadu-gadu.pl/botmaster/putImage/'.$auth['numer'], array( + CURLOPT_HTTPHEADER => array( + 'Content-Type: image/x-any', + 'Expect: ', + ), CURLOPT_POST => TRUE, - CURLOPT_INFILE => $fp, - ), TRUE, FALSE); + CURLOPT_POSTFIELDS => file_get_contents($path), + )); if( (string)$tok->status != '0') { throw new BotAPIGGReplyException('Przesyłanie obrazka do botmastera nie powiodło się.', $tok); @@ -235,9 +233,21 @@ * array( 'SendToOffline' => (bool)TRUE/FALSE ) */ function sendMessage($toURL, BotMsg $msg, $params = array()) { + if(is_string($toURL)) { + $toURL = array($toURL); + } + + if(!is_array($toURL)) { + throw new Exception('Lista adresatów przekazywanych do funkcji BotAPIGG::sendMessage() winna być tablicą.'); + } + $to = array(); foreach($toURL as $url) { $url = parse_url($url); + if($url === FALSE) { + continue; + } + if($url['scheme'] != 'Gadu-Gadu') { continue; } @@ -276,8 +286,9 @@ ), )); + // Brak obrazka w cache BotMastera... if((string)$tok->status == '18') { - $tok = $this->httpQuery('https://'.$token['host'].'/sendMessage/'.$auth['numer'], FALSE, array( + $tok = $this->httpQuery('https://'.$token['host'].'/sendMessage/'.$auth['numer'], array( CURLOPT_HTTPHEADER => $headers, CURLOPT_POST => TRUE, CURLOPT_POSTFIELDS => array( @@ -294,5 +305,49 @@ return TRUE; } + + /** + * Pobiera dane użytkownika z katalogu publicznego. + * @param string|BotUser Numer użytkownika + * @return array|false Tablica z danymi. + */ + function getPublicData($number) { + if($number instanceof BotUser) { + if($number->network != 'gadu-gadu.pl') { + return FALSE; + } + + $number = $number->uid; + } + + if(!ctype_digit($number)) { + throw new Exception('Numer użytkownika przekazany do funkcji BotAPIGG::getPublicData() jest niepoprawny.'); + } + + try { + $data = file_get_contents('http://api.gadu-gadu.pl/users/'.$number.'.xml'); + if(!$data) { + throw new Exception('Nie udało się pobrać danych użytkownika z katalogu publicznego.'); + } + } + catch(Exception $e) { + throw new Exception('Nie udało się pobrać danych użytkownika z katalogu publicznego.'); + } + + libxml_use_internal_errors(); + $data = simplexml_load_string($data); + libxml_clear_errors(); + + if(!$data) { + throw new Exception('Dane użytkownika otrzymane z API Gadu-Gadu mają niepoprawny format.'); + } + + if(!$data) { + throw new Exception('Dane użytkownika otrzymane z API Gadu-Gadu mają niepoprawny format.'); + } + + + return (array)$data->users->user; + } } ?> \ No newline at end of file -- Gitblit v1.9.1