Moduł powiadomień GG w PHP
Na pewno niejeden koder zetknął się z problemem wysyłania powiadomień do (niestety) najpopularniejszego komunikatora w Polsce. Owszem, jest GG API, ale warunki, na jakich podpisywany jest cyrograf sprawia, że tak naprawdę użyszkodnik podaje wyłącznie dane osobowe dla GG Network, a ten umywa ręce i może robić co chce.
Tak, czy siak, zwykli śmiertelnicy muszą sobie radzić i sobie jakoś poradzimy.
wstęp
Wiele bibliotek posiada nieraz komunikację z GG zrealizowaną natywnie. Ma to swoje zalety, jak i wady. Na pewno te są one szybsze, posiadają mniej pośredników. Za to w przypadku zmiany protokołu leżą i kwiczą, gdyż GG robiło różne tego typu cyrki już bodajże kilka razy. Czym to owocuje? Oczywiście unieruchomieniem skryptu powiadamiającego.
Powstała kiedyś bramka www2gg napisana w PHP, ale obecnie nie działa z tego właśnie powodu. W phpBB by Przemo podobno się coś takiego znajduje, ale nie chcę tracić czasu na ściąganie i analizowanie źródeł.
Eksperymentując wpadłem na iście banalny, ale za to dość skuteczny sposób. Mianowicie, wystarczy skorzystać z Jabbera i jakiegoś transportu GG. Tak jak i we wcześniejszym przypadku, wady i zalety – na pewno dodatkowe pośrednictwo, typu pad transportu uniemożliwią działanie bramki. Jednak sam fakt, że nad transportami ktoś czuwa, zdejmuje z nas uciążliwy obowiązek – pilnowania skryptu, aby był zgodny z zachciankami GG.
Protokół Jabbera jest już na tyle dojrzały, że można na nim polegać. Chyba wystarczającym dowodem może być fakt zaimplementowania go w usłudze GTalk.
zabawki
Z tzw. zabawek będziemy potrzebowali niewiele:
- serwer Jabbera z transportem GG (ja skorzystam z Jabbima)
- hosting z PHP 5 (to już dzisiaj standard, ale lepiej się upewnić, bo czasem zdarzają się dinozaury :P)
- paczka XMPPHP
- klient Jabbera (np. PSI)
Oraz – oczywiście – ta notka. Osoby bardziej wprawione już teraz pewnie wiedzą, co robić, ale zamieszczam instrukcję z obrazkami.
konta
Po zainstalowaniu klienta Jabbera, rejestrujemy konto. Jest to operacja niezbyt trudna. Klik na ikonkę PSI w dolnej części okna, Konta/Account setup. Potem Dodaj/Add i przechodzimy do krótkiego kreatora. Teraz podajemy nazwę, która będzie identyfikatorem w programie, zaznaczamy zarejestruj nowe konto/register new account. W następnym oknie podajemy adres serwera, np. jabbim.pl i po kliknięciu dalej podajemy login i hasło. Tyle wystarczy, można zmienić stan na dostępny. Ewentualne okienko o braku ważnego certyfikatu ignorujemy klikając kontynuuj/continue.
Teraz potrzebujemy numeru GG. Najlepiej założyć do tego celu osobny, kto wie, czy GG nie wpadłoby na pomysł zablokowania; tego nikt nie wie prócz nich samych. Jeśli nie masz jeszcze numeru dla powiadamiacza – zarejestruj nowy.
Numerek jest, konto Jabbera jest, teraz pora skonfigurować transport. W PSI klikamy prawym klawiszem na konto w głównym oknie programu i wybieramy service discovery/przeglądarka usług. Czekamy chwilkę i szukamy na liście czegoś w stylu Gadu-Gadu transport. Gdy znajdziemy, klik prawym i register/rejestruj. Podajemy dane konta GG i kończymy rejestrację. W rosterze pojawi się nowy kontakt, który autoryzujemy.
Nie wiem, czym jest to spowodowane, ale transport (przynajmniej na Jabbimie) zachowuje się zaraz po aktywacji nieco dziwnie. Wystarczy jednak dodać do listy jeden numerek i powinno już być w porządku. JID kontaktu podajemy w formacie [email protected], np. w przypadku Jabbima – [email protected]. Od tej pory powinno być wszystko stabilne i transport powinien być dostępny. Na wszelki wypadek – można jeszcze wylogować i zalogować się z transportu (prawym na kontakcie transportu, logout/wyloguj/login/zaloguj oraz ponownie podłączyć się na samym Jabberze.
PHP
Kodu będzie niewiele – po rozpakowaniu paczki z XMPPHP możemy od razu przejść do edycji pliku sendmessage_example.php. W odpowiedniej linijce podajemy dane konta Jabbera. Następnie wyłączamy obsługę szyfrowania połączenia (może powodować problemy) oraz wpisujemy adresata w formacie [email protected].
W przypadku Jabbima, zadziałał poniższy kod:
include 'XMPPHP/XMPP.php';
$conn = new XMPPHP_XMPP('jabbim.pl', 5222, 'login', 'haslo', 'zasob');
try {
$conn->useEncryption(false);
$conn->connect();
$conn->processUntil('session_start');
$conn->presence();
$conn->message('[email protected]', 'This is a test message!');
$conn->disconnect();
} catch(XMPPHP_Exception $e) {
die($e->getMessage());
}
epilog
Jak to zwykle z GG bywa – jest jak pogoda – zmienne i często nieprzewidywalne. Ciężko powiedzieć, co może GG uznać za flood/spim i tym samym zablokować numer, etc. Pamiętaj, że pisałem tę notkę w szczytnym celu, a nie dla kolejnego spamowania, czego w ani promilu nie popieram! Dobre produkty reklamują się same.
I na koniec, tzw. disclaimer: korzystając z powyższej metody robisz to na własne ryzyko. Nie odpowiadam za wszelkie ewentualne konsekwencje tym spowodowane, zwłaszcza za zablokowanie konta GG i/lub Jabbera.
Nie chce sie czepiac ale pod linuxem masz libgadu ktore jest AFAIR napisane w C i powinno miec bindingi do C++/Pythona wiec zapewne w PHP mozesz to zaladowac jako bliblioteke i stamtad juz prosto jechac z koksem
.. odkad uzywam ekg nie zdarzylo mi sie by nastpila zmiana wersji protokolu, poza tym korzystajac z tej bliblioteki masz niemlze pewnosc, ze nawet jak sie zmieni protokol to update bedzie w niej zrobiony.
// pewnie piszesz to ad tego watku: http://forum.php.pl/index.php?showtopic=89420