LINUX.ORG.RU

[BFilter][Фильтрация контента] Не работает. С аглийским у меня туго.


0

0

Здравствуйте!

Хочу заставить bfilter фильтровать содержимое страницы. В мане написано следующее:

Content filter configuration is not currently covered in this man page. Please view the bfilter web page at http://bfilter.sourceforge.net/doc/content-filters.php for further information.

То есть имеется в виду что тема фильтрации контента не раскрыта в ман-странице. Топайте по указанному URL (http://bfilter.sourceforge.net/doc/content-filters.php), там все написано. Перехожу по указанному адресу. Там значит вроде как объясняется, но понять не могу.

Написано:

On Unix / Linux they are typically located in /usr/local/etc/bfilter/filters. In case of the GUI version, user-specific filters are stored in $HOME/.bfilter/filters.

The files come in pairs:

- Filter Group Name (Defines a group of filters.)

- Filter Group Name.enabled (Defines which filters are currently enabled.)

В тексте написано что _типичный_ каталог должен быть /usr/local/etc/bfilter/filters. Но я надеюсь, что коль в Debian Lenny есть каталог /etc/bfilter/filters с готовыми фильтрами, значит bfilter ищет файлы фильтров там.

Далее написано, что для фильтрации используется два файла. Первый файл должен иметь имя «группа_фильтров». Второй файл должен иметь имя «группа_фильтров.enabled». В этом втором файле отмечается, какие фильтры из первого файла разрешаются к использованию.

Какие допустимые значения для «группа_фильтров» неясно. Вполне возможно, что bfilter просто обрабатывает все файлы в каталоге /etc/bfilter/filters, и имя группы фильтров не имеет значения. Главное, чтоб для группы было два файла - основной и .enabled.

Далее написано

Let's start with the second one. It contains names of the enabled filters, one by line. Alternatively, it can contain *, which means all filters are enabled. The absence of this file is the same as having an empty file.

То есть говорится, что в файле .enabled должны содержаться разрешенные имена фильтров, одно имя на линию. Или можно написать «*», и тогда будут разрешены все фильтры из группы.

Далее описывается формат фильтров, используемый в первом (основном) файле.

Я создал в каталоге /etc/bfilter/filters два файла.

Первый - Local_filters

[Udaff top banners]
order=500
match_count_limit=1
url=.*udaff.com.*
search="/TOP.*BANNERS/"
replace="<!-- [BFilter] Remove Udaff top banners -->"
replacement_type=text

Второй - Local_filters.enabled

*

Нарочно для проверки сделал простой регексп, чтобы гарантированно найти кусок текста.

В коде главной udaff.com встречается такой текст:

<!-- TOP BANNERS-->

При срабатывании фильтра, по идее, должен получиться такой текст:

<!-- <!-- [BFilter] Remove Udaff top banners -->-->

Но этого не происходит.

Как я только не извращался - фильтрации контента нет.

Вопрос. Что я делаю не так? Как заставить bfilter фильтровать контент?

Давайте пообсуждаем предметно, а именно напишем правило, чтобы убирать верхний баннер на главной странице udaff.com.

Ага, значит вот что выяснилось.

Регулярку надо делать жадной, т.е. вместо

search="/TOP.*BANNERS/"

надо писать

search="/TOP.*?BANNERS/"

Кроме того, по неизвестным причинам, регулярка рассматривается как регистро-независимая. То есть, если на странице будет

<body onLoad="document.getElementById('_top_user_name').focus()">
<!-- TOP BANNERS-->
<table width='100%' border='0' cellspacing='0' cellpadding='0'>

то вышеозначенная регулярка найдет кусок

top_user_name').focus()">
<!-- TOP BANNERS

Как сделать регулярку регистрозависимой, в доке не написано.

xintrea ()

Еще выяснилось, что условие, какие урлы надо обрабатывать, надо записывать тоже как полноценную регулярку, со всеми причиндалами. Программа bfilter-gui их не добавляет, поэтому я изначально ошибся.

То есть, вместо

url=.*udaff.com.*

надо писать что-то в стиле

url="/.*udaff.com.*/"
xintrea ()

В общем, работающее правило, чтобы удалять верхний баннер на удаве, выглядит так:

[Udaff top banners]
order=500
match_count_limit=1
url="/.*?udaff.com.*?/"
search="/<!-- TOP BANNERS-->.*?<!-- \/TOP BANNERS-->/"
replace="<!-- [Bfilter] Remove Udaff top banner -->"
replacement_type=text
if_flag=_HTML_OR_XHTML_

Не догнал еще, что делает директива if_flag, на что она влияет - на все правило, или только на строку, следующую за этой директивой. Что-то как-то непонятно написано.

xintrea ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.