Strona główna Komunikacja obustronna PHP EKG2
Wpis
Anuluj

Komunikacja obustronna PHP EKG2

Komunikacja obustronna PHP EKG2

Pisząc różnego rodzaju serwisy, posiadające różne funkcjonalności, zdarzyło mi się pisać funkcjonalności związane z powiadamianiem użytkowników o wydarzeniach poprzez komunikatory. Oczywiście większość tego rodzaju komunikacji (strona WWW/skrypt PHP => komunikator) można załatwić klasami, które można napisać bądź znaleźć, ale komunikacja w drugą stronę jest już trochę trudniejsza. Ponieważ większość środowisk, w których pracują serwery WWW/kompilatory PHP, to środowiska linuksowe, można pokusić się o podpięcie to powyższej pracy konsolowego komunikatora, czyli EKG2.

Nie będę się rozpisywał o instalowaniu EKG2, gdyż to temat rzeka. Mogę tylko napisać, że w większości linuksowych dystrybucji serwerowych pakiet EKG2 jest dostępny w repozytorium. Ja osobiście korzystam z Debiana, gdzie EKG2 w najnowszej wersji jest dostępne w repozytorium w wersji experimental.

Do uruchomienia programu i jego działania w tle wykorzystuje oczywiście program screen.

1
screen ekg2

Po uruchomieniu musimy skonfigurować odpowiednio program. W zależności, którego protokołu chcemy używać (a parę mamy do wyboru: Gadu-Gadu, Jabber, Tlen, IRC) konfigurujemy konto. W przypadku najpopularniejszego w Polsce protokołu gg konfiguracja wygląda następująco:

  • definiujemy numer GG:
    1
    
    /session -a gg:111111
    
  • ustawiamy hasło:
    1
    
    /session password tajne_hasło
    
  • zapisujemy ustawienia:
    1
    
    /save
    
  • i teraz wystarczy połączyć się z serwerem:
    1
    
    connect
    

Aby połączyć nasz komunikator ze skryptami PHP musimy wykorzystać dwa pluginy dostępne w EKG2, a mianowicie obsługę skryptów Pythona (python) i obsługę zdalnej kontroli/potoków (rc). Do komunikacji między komunikatorem a skryptami będziemy wykorzystywać plugin rc (Remote Control), a dokładnie jego obsługę potoków. Informacje będziemy przekazywać zapisując je bezpośrednio do pseudopliku (tzw. pipe), który konfigurujemy przy ładowaniu wtyczki. Następnie musimy stworzyć sobie bardzo prosty skrypt napisany w Pythonie, który będzie odpalał skrypt shellowy, gdzie myślę że większość PHP’owców czuję się lepiej niż w Pythonie (mówię za siebie). Oto używany przeze mnie skrypt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#-*- coding: utf-8 -*-
import ekg
import string
import os
wersja="0.02"
#Gdy ladujemy skrypciora
def init():
ekg.printf("generic","Zaladowano Bota v %s"%wersja)
return 1
#Gdy wywalamy skrypciora
def deinit():
ekg.printf("generic","Wywalono Bota ")
return 1
def message_handler(session, uid, type, text, sent_time, ignore_level):
gg=string.replace(uid,'gg:','')
script="/sciezka_do_skryptu_shellowego/bot.sh "+gg+" '"+text+"'"
os.system(script)
ekg.printf("generic","status zapisania: "+script
)
ekg.handler_bind('protocol-message-received', message_handler)

Skrypt ten zapisujemy/kopiujemy do katalogu konfiguracyjnego EKG2 i podkatalogu ze skryptami (~/.ekg2/scripts). Teraz wystarczy załadować wtyczki i skrypt, wykonując kolejno polecenia:

1
2
3
4
5
/plugin +rc
/set rc:remote_control pipe:/sciezka_do_pipe'a/pipe.ekg2
/plugin +python
/python:load bot
/save

Teraz wystarczy obsłużyć zapisywanie do pipe’a w PHP - i mamy obustronną komunikację!

Ten post jest udostępniony na licencji CC BY 4.0 przez autora.

Zend Framework w wersji 1.11.0

Ipla Lite pod LXDE