Официальный клиент Perl - установка кода на сайт с поддержкой Perl
Скачать клиент можно отсюда или со страницы добавления новой площадки в систему.
Изменения в новой версии 1. добавлена поддержка блочных ссылок 2. улучшена поддержка контекстных ссылок 3. добавлена возможность вывода счётчика Sape (для подсчёта SapeRank) Внимание! Если ваш сайт имеет большое количество страниц и/или ссылок, то для эффективной работы клиентского кода и избежания замедления работы сайта нужно установить CPAN-модуль JSON::XS на сервере. В противном случае страницы могут формироваться долго и сайт может выпасть в ERROR. Внимание, описанные ниже способы вывода ссылок доступны начиная с версии клиенткого кода 1.2.3 Подключение модуля (обязательный шаг) Для подключения модуля SAPE необходимо разместить в исходном коде вашего сайта следующий Perl-код: Код:
"$ENV{DOCUMENT_ROOT}/ХЕШ_ПОЛЬЗОВАТЕЛЯ/SAPE.pm" =~ /^(.+)$/; Сразу после этого становятся доступны классы SAPE::Client и SAPE::Context, отвечающие за вывод, соответственно, гипертекстовых ссылок (в том числе в блочном формате) и контекстных ссылок. Вывод гипертекстовых ссылок Для работы с гипертекстовыми ссылками используется класс SAPE::Client:1 Код:
my $sape = new SAPE::Client; Список допустимых аргументов конструктора класса (все аргументы необязательные): Код:
my $sape = new SAPE::Client ( Для получения простого (не блочного) списка ссылок следует вызывать метод return_links(): Код:
my $links = $sape->return_links; # сохранить HTML-код ссылок в переменную $links Код:
print $sape->return_links; # вывести HTML-код ссылок Код:
$sape->return_links( Код:
$sape->return_links(undef); # то же, что и $sape->return_links, - вывести все ссылки Код:
$sape->return_links(1); # вернуть только 1 ссылку Код:
$sape->return_links(undef, as_block => 1); # аналог вызова метода return_block_links Внимание! Если вы уже используете вывод ссылок с помощью старого формата вызова, то изменять код вызова необязательно – достаточно лишь обновить модуль SAPE.pm и изменить настройки сайта, включив блочный формат вывода. Для вывода ссылок в блочном виде используется метод return_block_links() (вызывается автоматически из return_links(), если в настройках сайта установлено блочное отображение или передан параметр as_block => 1). Список допустимых аргументов метода return_block_links() (все аргументы необязательные): Код:
$sape->return_block_links( Код:
$sape->return_block_links; # все ссылки в виде одного блока Код:
$sape->return_block_links(1); # вернуть только 1 ссылку в первом блоке Пример 6: вывод блока ссылок с изменёнными параметрами Код:
$sape->return_block_links(2, block_orientation => 0, block_width => '120px'); Для работы с контекстными ссылками используется класс SAPE::Context: Код:
my $sape_ctx = new SAPE::Context; Ссылки в конкретном фрагменте текста Для вывода контекстных ссылок в определённом фрагменте текста следует вызывать метод replace_in_text_segment(), передавая в качестве параметра либо ссылку (ref) на переменную с текстом (оптимально для экономии памяти, замена будет произведена прямо внутри переменной), либо просто переменную с текстом (в этом случае текст с заменой будет возвращён в качестве результата вызова функции): Код:
$sape_ctx->replace_in_text_segment(\$text); # все изменения - внутри переменной Код:
$new = $sape_ctx->replace_in_text_segment($text); # изменения - в новую переменную Ссылки в коде страницы Для вывода контекстных ссылок в пределах всей страницы, в том числе в нескольких местах на странице, следует вручную расставить в исходном коде страницы теги <sape_index> ... </sape_index>, заключив в них фрагменты страницы для вывода ссылок, либо ссылки будут выводиться внутри тега <body> ... </body>. Существует два режима работы метода replace_in_page(), используемого для вывода ссылок. 1. Рекомендуется! Вызов метода с параметром аналогично вызову replace_in_text_segment() (ссылка на переменную для экономии памяти или просто переменная). Поиск тегов <sape_index> или <body> и вывод ссылок происходит в тексте, переданном в качестве параметра. Код:
$sape_ctx->replace_in_page(\$html); # все изменения - внутри переменной Код:
$new = $sape_ctx->replace_in_page($html); # изменения - в новую переменную 2. Только для сайтов с CGI. Вызов метода без параметров. Переопределяется системная Perl-функция print, весь выводимый в ходе работы кода вашего сайта контент накапливается в буфере, происходит размещение ссылок внутри буфера и их вывод системными средствами. Код:
$sape_ctx->replace_in_page; # переопределить print
Вывод обязательного JavaScript-контента Оба класса – SAPE::Client и SAPE::Context – поддерживают автоматический или принудительный вывод JavaScript-контента, поставляемого Sape (cчётчик Sape для подсчёта SapeRank, пользовательские счётчики). По умолчанию код JS выводится вместе со ссылками в методах класса SAPE::Client и только в методе replace_in_page() класса SAPE::Context. Однако если передан параметр show_counter_separately => 1 в конструктор класса, то счётчик необходимо выводить явным вызовом функции return_counter(): Код:
$counter_html = $sape->return_counter; # код счётчика - в переменной $counter_html Код:
$counter_html = $sape_ctx->return_counter; # аналогично |
Готов ответить на вопросы в этой теме.
|
Цитата:
А на Joomla! 2.5.14 работать будет? И как его устанавливать для блочных ссылок? |
Цитата:
|
Цитата:
|
Добавился небольшой багфикс, версия модуля 1.2.4 будет по ссылке в первом посте с 12:00 сегодняшнего дня :)
|
Новый код не работает. Никаких ошибок не выдаёт, просто не показывает ссылки. Ссылки, разумеется все вылетают в Error. Где искать проблему, что проверять? Со старым кодом никаких проблем нет.
|
assedo, постучитесь ко мне в скайп mnmldr
|
А можно какой-то более доступный вариант, без установки дополнительных приложений? Ну или телефон дайте в личку, я наберу.
|
Скайп - оперативнее всего. Телефон не поможет - наверняка нужно будет куски кода смотреть. Напишите в почту, давайте через неё попробуем. meneldor@metallibrary.ru
|
А чего писать то? Я уже всё написал: меняю библиотеку - ссылки перестают отображаться. Возвращаю старую на место - всё работает. Коды все копирую из кабинета вебмастера. Какие куски кода смотреть нужно?
Цитата:
|
М-да... <ИМЯ_ХОСТА> так и оставляете?
Замените это всё просто на код: "$ENV{DOCUMENT_ROOT}/хеш/SAPE.pm" =~ /^(.+)$/; require $1; my $sape = new SAPE::Client( user => 'хеш', ); print $sape->return_links; "хеш", конечно же, нужно заменить сами знаете на что. Если не получится, добавляйте параметр: verbose => 1, в вызов new() – и смотрите в исходном коде страницы, какую ошибку выводит модуль выводит в том месте, где должны быть ссылки. Если же в папке с модулем файл с расширением .json не появляется вообще, тогда нужно смотреть в error_log вашего веб-сервера – наверняка не хватает каких-то модулей. |
Цитата:
Цитата:
Я не сомневаюсь, что вы все очень талантливые программисты, но, к сожалению, подвержены их типичной болезни - хамству, по отношению к "непрограммистам". Цитата:
Вобщем вопрос решен, спасибо всем за многобукв. Проблема была в некорректной установке модуля JSON::XS из-за глюка в cPanel'и. Модуль был, но не работал как надо, программа это никак не отражала. Для нетелепатов: смотрите логи ошибок сервера и будет вам удача. Талантливые программисты с этим не заморачиваются. Им пофигу на макетинг и на бабло, они выше этого. ;) |
assedo, я вам предложил помощь (скайп) - вас моё предложение не устроило. Затем вы привели неправильный пример кода, каким его, как ни смешно, устанавливает чуть ли не половина людей, - и оскорбились на то, что я переспросил? Вам просто для информации: я перловый модуль по доброте душевной пишу, и помогаю людям с проблемами я на тех же условиях - ибо в САПЕ не работаю и никогда не работал. Держите сердечное "пожалуйста" на так и не прозвучавшее от вас "спасибо". И извините, что не смог повлиять на то, как ваш кривой JSON::XS рапортует об ошибках, - если можете научить его "дохнуть через die", научите. Очень рад, что вы достаточно умный и смогли разобраться в проблеме сами (почти).
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
assedo, имеете полное право взять эту обязанность на себя - вы ведь явно понимаете, как сделать всё правильно. Надеюсь, проблем с модулем у вас больше не будет.
|
Добрый день.
На несколько сайтов на хостинге nic.ru вытаюсь установить Perl-код. Система пишет "Код на сайте не установлен". При попытке открыть файл, например, http://tookan.ru/cgi-bin/sape.cgi - 500 ошибка. Внутри файла: #!/usr/bin/perl print "Content-type: text/html\n\n"; "$ENV{DOCUMENT_ROOT}/****d2c644f0fdd7354740510ab36712/SAPE.pm" =~ /^(.+)$/; require $1; my $sape = new SAPE::Client( user => '****d2c644f0fdd7354740510ab36712', charset => 'windows-1251', # необязательно, по умолчанию: windows-1251 ); print $sape->get_links; **** - естествено другое, но заменил, чтобы не смущало. На других площадках этого же хостера даже и 500 ошибки нет. Просто пустота Например вот тут http://www.on33.ru/cgi-bin/sape.cgi В логах ничего. Что делать? |
Kenjik
Если есть 500 ошибка, то в error_log точно должны быть сообщения. Посмотрите ещё раз, пожалуйста. На тех же площадках, где просто пустота, проверьте, создаётся ли файл links.json в папке с модулем? Проверьте права на папку ****d2c644f0fdd7354740510ab36712 - должны быть 0777. Добавьте в вызов new параметры: my $sape = new SAPE::Client( user => '****d2c644f0fdd7354740510ab36712', charset => 'windows-1251', force_show_code => 1, verbose => 1, ); И после этого проверьте, не появляется ли вместо "пустоты" какой-то код (только смотрите исходники, т.к. код выводится в виде HTML-комментариев). |
Здравствуйте!
Служба поддержки рекомендовала здесь задать вопрос разработчику по Коду счетчика на Perl. Версия последняя. Количестов уникальных хостов в панеле плавно скатилось в 50 тыс до 1 тыс. Реальная посещаемость примерно 3тыс. в день. Куда можно копнуть? В Linux Gentoo недавно обновлял все пакеты до последней сборки, сам в Perl в том числе. Добавлено через 1 час 16 минут Добавлю, ситуация прояснилась. Сайт работает в режиме FastCGI. Если отключить этот режим и поставить обычный CGI, то код счетчика появляется нормально. Для справки, FastCGI - это повторное использование загруженного в память модуля. То есть часть переменных, если они были изменены, при повторном запуске будет содержать измененные значение, а не такие, как если бы модуль запускался первый раз. Их нужно проинициализировать. Исправьте пожалуйста, готов дать доступ к клиенту. Хотя вы сами можете легко сэмулировать ситуацию, запуская модуль несколько раз в цикле. |
Здравствуйте!
Для очистки совести хотел бы подчеркнуть, что работа этого модуля никогда не гарантировалась в persistent-средах, таких как FastCGI, mod_perl, PSGI и т.п. :) Однако, видимо, основной функционал работает, и это хорошо. Готов предложить решение описанной проблемы, которые вы можете применить самостоятельно. 1. Инициализацию SAPE::Client в каждой итерации рабочего цикла придётся делать заново. Это, конечно, снижает ценность FastCGI, но без приличного перелопачивания модуля другого решения нет. 2. Прямо перед вызовом SAPE::Client->new следует вставить такую строку: Код:
$SAPE::page_obligatory_output_shown = 0; |
Цитата:
|
Цитата:
|
Заглянул в код. Страшно подумать, что там было до версии 1.2... ;)
|
Цитата:
|
Не отображаются ссылки Perl-методом
Нужна помощь.
Сайт, для размещения ссылок: mamzon.ru, ссылки в статусе ERROR. Я разместил PERL-код: http://mamzon.ru/cgi-bin/index_sape.cgi скрипт отрабатывает без ошибок, но ничего не выводит. Тело скрипта ниже. Дал права 777 на папку:mamzon.ru/www/mamzon.ru/e0b22f67bec8fcce46dbc69f203174d9/ и там стал обновляться links.json При этом links.db не появился, хотя ссылки в аккаунте уже появились, он должен появиться или нет? Но вот ссылки на страницах не отображаются и сам метод http://mamzon.ru/cgi-bin/index_sape.cgi возвращает пустоту. Метод вызывается через include-директиву, index.shtml в приложении. <!--#include virtual="/cgi-bin/index_sape.cgi?$QUERY_STRING"--> #!/usr/bin/perl -w "$ENV{DOCUMENT_ROOT}/e0b22f67bec8fcce46dbc69f203174d9/SAPE.pm" =~ /^(.+)$/; require $1; my $sape = new SAPE::Client( user => 'e0b22f67bec8fcce46dbc69f203174d9', verbose => 1, ); print "Content-Type: text/html\n\n"; print $sape->return_links; exit(0); |
Цитата:
Сам скрипт, как я вижу, отрабатывает нормально. В json-файле есть ссылки? Если нет, то проверьте переменные $ENV{HTTP_HOST} или $ENV{HOSTNAME} - верный ли домен в них содержится (соответствует ли он тому домену, который зарегистрирован в SAPE). Если нет, то в SAPE->new() передайте параметр host с верным доменом. |
Производительность перл модуля
$ time perl -e 'require "/www/htdocs/xxx01yyy32zzz3bwww45fffe8hhhb7ha/SAPE.pm";'
real 0m0.117s user 0m0.106s sys 0m0.016s --- Уважаемые друзья, только на подключение (парсинг) модуля выедается 116 милисекунд. Это в 2 раза дольше, чем работает весь остальной стокилометровый код сайта. Это никуда не годится. Давайте будем бороться с производительностью для дальнейшего сотрудничества! |
Цитата:
|
Цитата:
|
Цитата:
|
Саппорт?
|
Саппорт живет в кнопке "Задать вопрос" внутри сапы.
|
саппорт Sape не осуществляется поддержку клиента Perl ля установки кода.
|
Цитата:
|
Цитата:
|
АУ! Поддержка!
|
Даже немного грустно...
mambur, если совсем тоскливо - пните меня в личку. Я не поддержка, но опыт установки кода на совсем странные хостинги есть, могу попробовать помочь. |
Цитата:
|
Цитата:
|
Понял для себя, что когда непонятки, когда по непонятным причинам не показываются ссылки, нужно ставить старый SAPE.pm он показывает ошибку!!!
Два дня искал проблему почему код перестал выводить ссылки после манипуляций на VDS даже если ставил verbose => 1 он показывал неопределенное "Ошибка парсинга JSON" Поставил старый SAPE.pm и увидел "501 Protocol scheme 'http' is not supported" Гугл выдал что виной тому некорректная установка LWP:Protocol:http или связанных с ним модулей Переустановил, и вауля! Новый модуль тоже заработал! |
Часовой пояс GMT +3, время: 05:28. |
Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.