eRIZ’s weblog

PHP, webdesign, Linux, Windows i inne, bo nie samym chlebem człowiek żyje
Serdecznie zapraszam do udziału w ANKIECIE

Bot do powiadomień w EKG2

W trakcie rozważań z ^kwiateuszem nad jakimiś usprawnieniami dla Forum PHP.pl (IPBoard) przyszedł mi do głowy pomysł, który zauważyłem kiedyś na Polskim Forum Jabbera. Stworzono do niego mod, który umożliwia powiadamianie użytkowników o nowych postach właśnie przez Jabbera.

Pisałem już o module powiadomień opartym o klasę Jabbera dla PHP, ale co w sytuacji, gdy serwer jest bardziej obciążony? Dla małych forów wcześniej omówione rozwiązanie - jak znalazł. Natomiast w przypadku większych aplikacji będzie stanowiło pewien problem - od wydajności po gubienie powiadomień, czy inne nieprzewidziane sytuacje.

Dlatego wykorzystamy w tym celu popularnego klienta IM pod shella, mianowicie ekg2. Umożliwi on również skorzystanie z powiadomień do innych sieci, m.in. Gadu-gadu, czy Tlen.

ekg2

Na samym początku będzie nam potrzebne konto shellowe. Cokolwiek, aby można było uruchomić ekg2. Na hostingach współdzielonych raczej nie będzie dostępu do systemu pakietów, więc trzeba pobrać paczkę i samodzielnie ją skompilować, co nie powinno stanowić problemu dla osób potrafiących zalogować się do sesji zdalnej. Kompiluje się standardowo:

  1. ./configure
  2. make
  3. make install

ew. ustawiając prefiks dla aplikacji (zobacz: ./configure –help).

pobieranie ekg2 przygotowanie do kompilacji

Po pomyślnej instalacji musimy skonfigurować konto komunikatora. Po uruchomieniu ekg2 wydajemy komendę /session –add xmpp:jid@serwer.pl. Teraz hasło: /session password i wpisujemy hasło zatwierdzając klawiszem ENTER.

Jeśli wszystko wprowadziliśmy prawidłowo, to po wydaniu komendy /connect komunikator połączy się z serwerem.

połączenie z serwerem

Pora teraz stworzyć tzw. pipe‘a, czyli potok służący do komunikacji między procesami. W skrócie - będziemy mogli komunikować się ekg2 zapisując bezpośrednio do pseudopliku. Odpalamy więc wtyczkę wpisując w linii poleceń:

  1. /plugin +rc
  2. /set rc:remote_control pipe:/home/eriz/rura.ekg2
  3. /save

Co sprawi, że w katalogu domowym pojawi się nowy plik, który umożliwi nam sterowanie ekg2 przez zewnętrzne aplikacje. W moim przypadku, jest to /home/eriz/rura.ekg2.

listing z pipe

Aby sprawdzić, czy wszystko dobrze działa, przy podłączonej sesji w ekg2, przechodzimy do powłoki i wypisujemy wiadomość do rurki:

  1. echo /msg jid@serwer.pl treść wiadomości >> rurka.ekg2

Efekt?

otrzymana wiadomość

Trudne? ;) Wystarczy nadać rurce odpowiednie uprawnienia, aby inny użytkownik mógł z niej skorzystać, czy po prostu wrzucić ją do katalogu tymczasowego. To już zależy jednak od naszych potrzeb i inwencji. ;]

testy na poligonie

Aby ekg2 działał sprawnie i bez naszej ingerencji, wypadałoby skonfigurować go tak, aby automatycznie podłączał się do wybranego serwera, po rozłączeniu również. W tym celu szukamy pliku sessions-jabber w ukrytym katalogu .ekg2, który znajduje się w ścieżce naszego profilu. Odpalamy do edycji ulubionym edytorem (vi(m)/pico/emacs? :D) i szukamy linijek:

  1. auto_connect=0
  2. auto_reconnect=0

I zamieniamy ich wartość na 1. Rzecz jasna, modyfikacji dokonujemy przy wyłączonym ekg2, aby nie utracić zapisanych informacji.

Jak uruchamiać komunikator, aby po rozłączeniu “nie zdechł”? Poczytaj o screenie.

i mięso armatnie

Armata/czołg/amfibia/szeregowy (:D) też, trzeba teraz wysłać odpowiednie rozkazy. Listę dostępnych komend otrzymasz po wklepaniu help w oknie programu. Nam przyda się tylko jedna - /msg, której składni zapewnie mogłeś(aś) się już domyśleć:

  1. /msg użyszkodnik wiadomość

Wykorzystanie naszej wiedzy w np. PHP będzie wręcz banalne:

  1. file_put_contents('/sciezka/do/rurka.ekg2', '/msg user@serwer.pl to jest testowa wiadomość');

I tyle. ;] Musimy przy tym pamiętać, że w przypadku jakichś problemów może się przydać funkcja sleep z jakąś małą wartością przed wysłaniem kolejnej wiadomości, aby dać komunikatorowi nieco wytchnienia.

epilog

Wiadomość powinniśmy “ubezpieczać” tak, aby nie zrobiła nam niczego z komunikatorem (tzn. nie skasowała listy, nie zaczęła spamować, itd).

Nie ponoszę odpowiedzialności za wszelkie konsekwencje spowodowane wykorzystywaniem powyższego rozwiązania w rzeczywistości. Pamiętaj, że jeśli użytkownik nie zezwoli na otrzymywanie wiadomości, możesz zostać pociągnięty do odpowiedzialności za wysyłanie spamu.

9 komentarzy

dopisz swój :: trackback :: RSS z komentarzami

RSS z komentarzami :: trackback

Skomentuj

Możesz używać znaczników XHTML. Dozwolone są następujące tagi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Wszystkie komentarze przechodzą przez moderację oraz filtry antyspamowe. Nie zostanie opublikowany komentarz, jeśli:

  • Jego treść obraża kogokolwiek.
  • W treści znajdują się wulgaryzmy i słownictwo ogólnie uznane za nieprzyzwoite.
  • Mam wątpliwości co do autora wpisu (Wszelkie anonimy są kasowane - niezależnie od zawartości - wpisz prawdziwy e-mail. Jeśli usunąłem, Twoim zdaniem, komentarz niesłusznie - daj znać). Zdarza się, iż sprawdzam kim jest komentujący.
  • Zawiera jakąkolwiek formę reklamy.

Szufladka