Antyspam z filtrowaniem tytułów i treści

Miałem mniej pisać o UserJS, ale wyszło, jak wyszło ;-) Tym razem (w wersji 2.2) doklepałem kilka nowych rzeczy, przede wszystkim to, o co prosił pecet (któremu przy okazji dziękuję za betatesty). Mowa oczywiście o filtrowaniu wpisów na głównej Joggera z uzwględnieniem ich tytułów i treści – razem ze sprawdzaniem autora, kategorii i tagów jest już komplet funkcjonalności.

Nowości a wydajność

Oczywiście największym problemem przy rozrastającym się skrypcie tego typu jest wydajność, a właściwie wszelkie dolegliwości z nią związane. Niestety, ale JavaScript, głównie z powodu tego, że jest interpretowany po stronie użytkownika, ani też nie jest kompilowany, wykonuje się stosunkowo powoli.

Na szczęście wpadłem na pomysł, by ulżyć trochę osobom, które miały dość rozbudowane kryteria filtrowania. W ogólnym skrócie, poparte testami: zamiast sprawdzania wszystkich elementów tablicy po kolei dla każdego wpisu, tworzone jest jedno wyrażenie regularne, które załatwia sprawę. Szkoda tylko, że różnicę widać dopiero przy długich listach reguł. Natomiast przepisanie skryptu na wersję niewykorzystującą jQuery (które i tak już jest załadowane na stronie), to naprawdę sporo roboty. Inna sprawa, że kod byłby znacznie mniej przejrzysty.

Aha, są też mniej znaczące ficzery w postaci ukrywania zbyt krótkich wpisów (limit znaków jest możliwy do zdefiniowania w konfiguracji skryptu) oraz możliwości wyłączenia okienka ze statystykami i za jednym zamachem przycisków do przełączania widoczności wpisów (jeśli z tego nie korzystasz, to prostu wyłącz – skrypt będzie działał szybciej). Jak zwykle znalazło się też miejsce na jakieś drobne poprawki. Lista zmian, ale wypunktowana, jest w komentarzach wewnątrz skryptu.

Konfiguracja

Na koniec jeszcze słówko o sposobie wypisywania reguł, bo z tym bywają problemy: tablica meta zastąpiła words z poprzedniej wersji (chciałem uniknąć mylącego nazewnictwa), ale działa wciąż na tej samej zasadzie. Analogicznie ma się tablica content. Można używać wyrażeń regularnych, ale wystarczą też zwykłe ciągi znaków (uwaga na znaki specjalne; wielkość liter nie ma znaczenia). Czyli na przykład:

// (…)
meta: [
	'polityka',
	'(mini|tech)blog',
	'jakieś słowo \\w+'
],
// (…)

Jeszcze łatwiej jest w przypadku list użytkowników (blacklist, whitelist) – po prostu wpisujemy nick (pobierany z adresu joggera) danego użytkownika, czyli na przykład tak:

// (…)
blacklist: [
	'blog',
	'utopiony-w-joggerze',
	'anotherone'
],
// (…)

Co ważne, po ostatnim elemencie listy nie może być przecinka (akurat w tej kwestii JavaScript jest dość kapryśny). Pozostałe opcje antyspamu są dość oczywiste, wystarczy zerknąć na komentarze w skrypcie ;-)

Pobieranie

Dla przypomnienia: użytkownicy Greasemonkey muszą pobrać plik na dysk, zmienić mu rozszerzenie na .user.js, a następnie przeciągnąć na okno Firefoksa. Ludzie z Operą powinni wiedzieć, co należy zrobić ;-)

Komentarze – jak zwykle – mile widziane, sugestie na pewno się przydadzą.

Nawiązali do wpisu

  1. Wasacz, blog – 04 lipca 2009 o 22:32:10

    Antyspam dla JoggerPL, wersja 3.1 Turbo

    Ostatnią oficjalną wersję antyspamu dla Joggera opublikowałem jeszcze w poprzednim roku. To wcale nie znaczy, że zaprzestałem rozwijać mój ulubiony skrypt; przeciwnie – wziąłem się za porządną reorganizację kodu. Skończyło się na [...]

Komentarze

  1. Ktoś pisze:

    Pierwszy!

  2. Grzegorz pisze:

    Po raz kolejny serdecznie dziękuję.

  3. Grzegorz pisze:

    Dość trudno filtrować Jogerowiczów, którzy mają własny adres/domenę. Jest na to jakiś sposób?

  4. mina86 pisze:

    „ani też nie jest kompilowany” — byś się zdziwił. ;)

  5. Wasacz pisze:

    Grzegorz: nie jest sprawdzana podpięta domena, tylko ta z adresu osoba.jogger.pl, bo taka też wyświetla się na głównej. Musisz tylko zdobyć nazwę użyszkodnika ;]

    mina86: wiedziałem, że ktoś się tego przyczepi ;-)

  6. radmen pisze:

    Link lezy ? Coś nie mogę pobrać ..

    // edit, juz działa

  7. radmen pisze:

    Wasacz, chyba jest bug.

    Sekcja meta jest u mnie pusta, a w content dodałem wpis ‘blip’.

    Na głównej nie wycięło mi notek z tym tytułem.

    Jednakże kiedy do meta dałem jakikolwiek ciąg znaków notki z tym tytułem zniknęły.

  8. Wasacz pisze:

    Za moment to sprawdzę.

  9. Wasacz pisze:

    OK, poprawione. Dzięki za feedback ;-)

    Nowy plik na serwerze, właściwie (prócz numerka wersji) zmieniła się funkcja filterWithExpressions.

Dodaj komentarz

Proszę, formatuj komentarz za pomocą Markdown.

Wymagane pola zaznaczone są znakiem gwiazdki – „*


Obrazek z kodem

*