Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
StopDesign 14.01.2008 20:58
Вот простенький класс для работы с SAPE. Примеры в описании функций.########################################################################## # Класс для работы со скриптами SAPE (http://www.sape.ru) # Версия 0.1 - 22.11.2007 # # (c) StopDesign - http://forum.sape.ru/member.php?u=2245 # # Тестировал с PHP-клиентом SAPE версий # 1.0.0 от 18.12.2007 (c поддержкой гиперконтекста) # 0.9.2 от 05.12.2007 (без гиперконтекста) ########################################################################## ########################################################################## @CLASS sape ########################################################################## ########################################################################## # Инициализация # # user - Обязательный параметр. Ваш хэш код в SAPE. # # uri - URI страницы, для которой нужно вывести ссылки # предполагается, что uri уже обработан для защиты от # скриптов, определяющих продажные ссылки # (отрезаны лишние параметры, # "/index.html" заменен на "/" и т.д.). # По умолчанию - $request:uri. # # timeout - Время ожидания ответа от скрипта sape2parser. # Операция загрузки должна быть завершена за это время, # иначе страница выводится в исходном виде, без ссылок. # По умолчанию 2 секунды. # # params - Хеш параметров, которые будут переданы в классы SAPE # Можно, например, принудительно указать кодировку: # $.request_uri[windows-1251] # Подробности - в справке к sape.php на их сайте # # # Простой пример инициализации: # # @auto[] # $sape[^sape::create[Ваш_хэш_код]] # # # Пример инициализации с параметрами и защитой # от скриптов, определяющих продажные ссылки: # # @auto[][uri;hParam] # ^rem{ отрезать все параметры от url } # $uri[^request:uri.match[\?.*][]{}] # $hParam[ # $.debug[true] ^rem{ режим отладки } # ] # $sape[^sape::create[Ваш_хэш_код;$uri;3;$hParam]] # @create[user;uri;timeout;params] ^if(!def $user || $user eq ''){ ^throw[bad_sape_user;bad_user_hash] } $hSapeParams[^if(def $params && $params is hash){$params}{^hash::create[]}] $hSapeParams.sape_user[$user] $hSapeParams.request_uri[^if(def $uri){$uri}{$request:uri}] $sSape2ParserPath[http://$env:HTTP_HOST/$user/sape2parser.php] $iHttpTimeout(^timeout.int(2)) $iCurrentOffset(0) ########################################################################## ########################################################################## # replace_in_text_segment[sText] # аналог функции replace_in_text_segment класса SAPE_context # # Пример использования: # # @main[] # <p>тут я не буду продавать ссылки</p> # <p>^sape.replace_in_text_segment[а в этом тексте ссылки будут продаваться]</p> # @replace_in_text_segment[sText][param;sape_text] ^try{ $param[^hash::create[$self.hSapeParams]] $param.action[text] $param.text[$sText] $param.sape_cookie[$cookie:sape_cookie] $param.sape_debug[$cookie:sape_debug] $sape_text[^file::load[text][$self.sSape2ParserPath][ $.timeout($self.iHttpTimeout) $.method[POST] $.form[$param] ]] $result[^untaint{$sape_text.text}] }{ $exception.handled(true) $result[] } ########################################################################## ########################################################################## # replace_in_page[sText] # Аналог функции replace_in_page класса SAPE_context # # В коде страници необходимо тегами <sape_index> ограничить текст, # в пределах котогого будут продаваться ссылки. # # Для использования удобнее всего переопределить postprocess: # # @postprocess[body] # ^if($body is string){ # $result[^sape.replace_in_page[$body]] # }{ # $result[$body] # } # @replace_in_page[sText][param;sape_text;cut] ^try{ $param[^hash::create[$self.hSapeParams]] $param.action[page] $param.text[$sText] $param.sape_cookie[$cookie:sape_cookie] $param.sape_debug[$cookie:sape_debug] $sape_text[^file::load[text][$self.sSape2ParserPath][ $.timeout($self.iHttpTimeout) $.method[POST] $.form[$param] ]] $result[^untaint{$sape_text.text}] }{ $exception.handled(true) ^rem{ были ошибки, выводим немодифицированный текст } ^rem{ только убираем теги <sape_index> } $cut[^table::create[nameless]{<sape_index> </sape_index> }] $result[^sText.replace[$cut]] } ########################################################################## ########################################################################## # return_links[nCount] # Аналогично функции SAPE_client::return_links() # Если подряд идут несколько ссылок, то между ними выводится разделитель, # указанный в настройках SAPE на сайте # # Пример использования: # # @main[] # ^sape.return_links[2] ^rem{ выводит первые две ссылки } # ^sape.return_links[] ^rem{ выводит все оставшиеся ссылки } # @return_links[nCount][param;sape_links] ^try{ $param[^hash::create[$self.hSapeParams]] $param.action[link] ^rem{ вывод ссылок по частям } ^rem{ $iCurrentOffset - сколько ссылок уже выведено } ^if(def $nCount && ^nCount.int(0) > 0){ $param.count($self.iCurrentOffset+^nCount.int(0)) $param.offset[$self.iCurrentOffset] ^self.iCurrentOffset.inc(^nCount.int(0)) }{ $param.count[0] $param.offset[$self.iCurrentOffset] ^self.iCurrentOffset.inc(999999) } $sape_links[^file::load[text][$self.sSape2ParserPath][ $.timeout($self.iHttpTimeout) $.method[POST] $.form[$param] ]] $result[^untaint{$sape_links.text}] }{ $exception.handled(true) $result[] } ########################################################################## ########################################################################## # return_links_table[] # Возвращает таблицу с одной колонкой piece # Там лежат ссылки без разделителя!!! # Разделитель указывается в настройках SAPE на сайте. # Растоятельно рекомендую указывать разделитель, # который не может встретиться в тексте и коде ссылки! # Хороший разделитель "<br>" # # Пример использования: # # @main[] # $links[^sape.return_links_table[]] # ^if(^links.count[] > 0){ # <h1>Продажные ссылки:</h1> # <ul> # ^links.menu{ <li>$links.piece</li> } # </ul> # } # @return_links_table[][links;delimiter] $delimiter[^self._delimiter[]] $links[^self.return_links[]] $result[^links.split[$delimiter;lv]] ########################################################################## ########################################################################## # служебная функция # получает разделитель у скрипта SAPE @_delimiter[] ^try{ $param[^hash::create[$self.hSapeParams]] $param.action[delimiter] $sape_links[^file::load[text][$self.sSape2ParserPath][ $.timeout($self.iHttpTimeout) $.method[POST] $.form[$param] ]] $result[^untaint{$sape_links.text}] }{ $exception.handled(true) $result[] } ##########################################################################Файл sape2parser.php (сохраните в "секретной" директории)
<? ########################################################################## # Довесок к парсерному классу для работы со скриптами SAPE # Версия 0.1 - 22.11.2007 # # (c) StopDesign - http://forum.sape.ru/member.php?u=2245 ########################################################################## # SAPE user hash define('_SAPE_USER', isset($_POST['sape_user']) ? $_POST['sape_user'] : ''); # Список параметров инициализации классов SAPE, которые передаются в sape.php # Передаю по списку, чтобы не закинуть туда чего-нибудь лишнее... $param = array('version', 'verbose', 'charset', 'server_list', 'cache_lifetime', 'cache_reloadtime', 'error', 'host', 'request_uri', 'multi_site', 'fetch_remote_type', 'socket_timeout', 'force_show_code', 'is_our_bot', 'debug', 'db_file'); $o = array(); foreach($param as $name) { if(isset($_POST[$name])){ $o[$name] = $_POST[$name]; } } # Кукисы $_COOKIE['sape_cookie'] = isset($_POST['sape_cookie']) ? $_POST['sape_cookie'] : ''; $_COOKIE['sape_debug'] = isset($_POST['sape_debug']) ? $_POST['sape_debug'] : ''; require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); # контекст или ссылки или еще что... $action = isset($_POST['action']) ? $_POST['action'] : ''; $text = isset($_POST['text']) ? stripslashes($_POST['text']) : ''; switch ($action) { case 'page': $sape_context = new SAPE_context($o); # функция контекста принимает в качестве параметра # весь код страницы и возвращает обработанную версию echo $sape_context->replace_in_page($text); break; case 'text': $sape_context = new SAPE_context($o); # функция контекста принимает в качестве параметра # кусок текста (без тэгов <sape_index>) и возвращает обработанную версию echo $sape_context->replace_in_text_segment($text); break; case 'link': $sape_client = new SAPE_client($o); # возвращает блок ссылок $count = ( isset($_POST['count']) && $_POST['count'] > 0 ) ? $_POST['count'] : null; $offset = ( isset($_POST['offset']) && $_POST['offset'] > 0 ) ? $_POST['offset'] : 0; echo $sape_client->return_links($count, $offset); break; case 'delimiter': $sape_client = new SAPE_client($o); echo $sape_client->_links_delimiter; break; } ?>Простейший пример:
@USE sape.p @auto[] $sape[^sape::create[ВАШ_ХЭШ_КОД]] @main[] <p>Тут я не буду продавать никаких ссылок.</p> <p>^sape.replace_in_text_segment[А в этом тексте контекстные ссылки будут продаваться.]</p> <h2>А это обычные рекламные ссылки:</h2> ^sape.return_links[]Всё кучей можно скачать тут: http://www.stopdesign.ru/sape.zip