'cmd_rss',
'rss' => 'cmd_rss',
'kanal' => 'cmd_rss',
'kanaly' => 'cmd_rss',
'news' => 'cmd_rss',
'newsy' => 'cmd_rss',
'wiad' => 'cmd_rss',
'wiadomosc' => 'cmd_rss',
'wiadomosci' => 'cmd_rss',
'kanal' => 'cmd_set',
'kanaly' => 'cmd_set',
'rss2' => 'cmd_rssex',
'exrss' => 'cmd_rssex',
'rssex' => 'cmd_rssex',
);
}
static function help($cmd=NULL) {
if($cmd === NULL) {
GGapi::putRichText('rss ', TRUE);
GGapi::putRichText('[kanał]', FALSE, TRUE);
GGapi::putRichText("\n".' Wiadomości z podanego kanału'."\n");
GGapi::putRichText('kanal ', TRUE);
GGapi::putRichText('kanał', FALSE, TRUE);
GGapi::putRichText("\n".' Ustawia domyślny kanał dla komendy rss'."\n\n");
}
elseif($cmd == 'kanal' || $cmd == 'kanaly') {
GGapi::putRichText('kanal ', TRUE);
GGapi::putRichText('kanał', FALSE, TRUE);
GGapi::putRichText("\n".' Zapisuje domyślny ');
GGapi::putRichText('kanał', FALSE, TRUE);
GGapi::putRichText(' RSS dla użytkownika. Dostępne kanały: '."\n".'- '.implode("\n".'- ', self::channels()));
}
else
{
GGapi::putRichText('rss ', TRUE);
GGapi::putRichText('[kanał]', FALSE, TRUE);
GGapi::putRichText(' (alias: ');
GGapi::putRichText('r, news, wiadomosci', TRUE);
GGapi::putRichText(')'."\n".' Podaje ostatnie wiadomości z kanału RSS ');
GGapi::putRichText('kanał', FALSE, TRUE);
GGapi::putRichText('. Dostępne kanały: '."\n".'- '.implode("\n".'- ', self::channels()));
}
}
private static function channels() {
$file = file('./data/rss/channels.list');
$return = array();
foreach($file as $chan) {
$chan = trim($chan);
if(empty($chan) || substr($chan, 0, 1)=='#') {
continue;
}
$parts = preg_split('/\t[\40\t]*/', $chan, 4);
for($i=0; $i<4; $i++) {
$parts[$i] = trim($parts[$i]);
}
if($aliases) {
$return[$parts[1]] = $parts[1];
if($parts[2] == 'NULL') continue;
$alias = explode(',', $parts[2]);
foreach($alias as $val) {
$return[trim($val)] = $parts[1];
}
}
else
{
$return[] = $parts[1];
}
}
return $return;
}
private static function channel($name, $verbose=FALSE) {
$file = file('./data/rss/channels.list');
foreach($file as $chan) {
$chan = trim($chan);
if(empty($chan) || substr($chan, 0, 1)=='#') {
continue;
}
$parts = preg_split('/\t[\40\t]*/', $chan, 4);
for($i=1; $i<3; $i++) {
$parts[$i] = trim($parts[$i]);
}
if($parts[1] == $name) {
if($verbose) {
return $parts;
}
else
{
return $parts[1];
}
}
elseif($parts[2] == 'NULL') {
continue;
}
else
{
$alias = explode(',', $parts[2]);
foreach($alias as $val) {
if($val == $name) {
if($verbose) {
return $parts;
}
else
{
return $parts[1];
}
}
}
}
}
return FALSE;
}
static function p($text, $bash=FALSE) {
$text = trim($text);
$replace = array(
"\n" => ' ',
"\r" => ' ',
'–' => '-',
'–' => '-',
''' => '"',
'„' => '"',
'”' => '"',
);
$text = strtr($text, $replace);
$text = html_entity_decode($text);
$replace = array(
'
' => "\n",
'
' => "\n",
'
' => "\n",
' ' => ' ',
);
$text = strtr($text, $replace);
if(!$bash) {
$text = strip_tags($text);
}
$text = str_replace(array('©', '©'), '(C)', $text);
return $text;
}
static function cmd_rss($name, $arg) {
$arg = self::channel(funcs::utfToAscii($arg));
if(!$arg) {
$arg = database::get($_GET['from'], 'rss', 'kanal');
if(!$arg) {
$arg = self::channel('DEFAULT');
}
}
$rss = @simplexml_load_file('./data/rss/'.$arg.'.rss');
if(!$rss) {
GGapi::putText('Błąd przy przetwarzaniu kanału, przepraszamy.');
return FALSE;
}
if($rss->entry) {
GGapi::putRichText(self::p($rss->title), TRUE);
foreach($rss->entry as $item) {
GGapi::putRichText("\n\n".self::p($item->title), TRUE);
GGapi::putRichText("\n".self::p($item->summary, ($arg=='bash'))."\n".self::p($item->link['href']));
if(GGapi::getLength() > 1700) {
return;
}
}
}
else
{
GGapi::putRichText(self::p($rss->channel->title), TRUE);
if($rss->channel->copyright) {
GGapi::putRichText("\n".self::p($rss->channel->copyright));
}
foreach($rss->channel->item as $item) {
GGapi::putRichText("\n\n".self::p($item->title), TRUE);
GGapi::putRichText("\n".self::p($item->description, ($arg=='bash'))."\n".self::p($item->link));
if(GGapi::getLength() > 1700) {
return;
}
}
}
}
static function cmd_set($name, $arg) {
$arg = self::channel(funcs::utfToAscii($arg), TRUE);
if(!$arg) {
GGapi::putText('Wybrany kanał nie istnieje! Dostępne kanały: '."\n".'- '.implode("\n".'- ', self::channels()));
}
else
{
database::add($_GET['from'], 'rss', 'kanal', $arg[1]);
GGapi::putText('Kanał '.$arg[3].' został ustawiony jako domyślny. Teraz zamiast:'."\n".'rss '.$arg[1]."\n".'możesz wpisać samo'."\n".'rss');
}
}
static function testurl($url) {
$url = parse_url($url);
$schemas = array('http', 'https', 'ftp');
if(empty($url['scheme'])) {
return array(-1, 'Podaj pełny adres do kanału RSS (z http://)!');
}
if(!in_array(strtolower($url['scheme']), $schemas)) {
return array(-1, 'Niedozowolona metoda dostępu (dostępne: http, https, ftp)');
}
$hosts = gethostbynamel($url['host']);
if(!is_array($hosts)) return array(-2, 'Podany host nie istnieje');
foreach($hosts as $ip) {
if(substr($ip, 0, 4)=='127.' || substr($ip, 0, 3)=='10.' || substr($ip, 0, 2)=='0.' || substr($ip, 0, 3) > 223) {
return array(-2, 'Niedozwolony numer IP hosta');
}
}
$res = @simplexml_load_file($url['scheme'].'://'.$url['user'].':'.$url['pass'].'@'.$url['host'].'/'.ltrim($url['path'], '/'));
if(!$res) {
return array(-3, 'Nie udało się załadować podanego kanału RSS');
}
return $res;
}
static function cmd_rssex($name, $arg) {
if(!$arg) {
$arg = database::get($_GET['from'], 'rssex', 'kanal');
if(!$arg) {
GGapi::putText('Podaj pełny adres kanału (z http://) lub ustaw domyślny funkcją ');
GGapi::putRichText('kanal2', TRUE);
GGapi::putRichText('!'."\n\n");
GGapi::putRichText('Przykład:', FALSE, FALSE, TRUE);
GGapi::putRichText("\n".'rss2 http://wiadomosci.onet.pl/2,kategoria.rss');
return FALSE;
}
}
$rss = self::testurl($arg);
if(is_array($rss)) {
GGapi::putText('Nie udało się pobrać wybranego kanału RSS. Błąd: '.$rss[1]);
return FALSE;
}
elseif(!is_object($rss)) {
GGapi::putText('Wystąpił nieznany błąd przy pobieraniu danych. Przepraszamy.');
}
GGapi::putRichText(self::p($rss->channel->title), TRUE);
if($rss->channel->copyright) {
GGapi::putRichText("\n".self::p($rss->channel->copyright));
}
foreach($rss->channel->item as $item) {
GGapi::putRichText("\n\n".self::p($item->title), TRUE);
GGapi::putRichText("\n".self::p($item->description, ($arg=='bash'))."\n".self::p($item->link));
if(GGapi::getLength() > 1700) {
return;
}
}
}
static function cmd_setex($name, $arg) {
if(!$arg) {
GGapi::putText('Podaj pełny adres kanału (z http://)!'."\n\n");
GGapi::putRichText('Przykład:', FALSE, FALSE, TRUE);
GGapi::putRichText("\n".'kanal2 http://wiadomosci.onet.pl/2,kategoria.rss');
}
else
{
$ret = self::testurl($arg);
if(is_object($ret)) {
database::add($_GET['from'], 'rssex', 'kanal', $arg[1]);
GGapi::putText('Kanał '.$arg.' został ustawiony jako domyślny. Teraz zamiast:'."\n".'rss '.$arg."\n".'możesz wpisać samo'."\n".'rss');
}
elseif(is_array($ret)) {
GGapi::putText('Nie udało się pobrać wybranego kanału RSS. Błąd: '.$ret[1]);
}
else
{
GGapi::putText('Wystąpił nieznany błąd przy pobieraniu danych. Przepraszamy.');
}
}
}
}
?>