eRIZ’s weblog

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

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.

rejestracja konta rejestracja konta #2

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 NUMER@gg.serwer.pl, np. w przypadku Jabbima - NUMER@gg.jabbim.pl. 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.

Transport Transport #2 Transport #3

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 NUMER@gg.serwer.pl.

W przypadku Jabbima, zadziałał poniższy kod:

  1. include 'XMPPHP/XMPP.php';
  2.  
  3. $conn = new XMPPHP_XMPP('jabbim.pl', 5222, 'login', 'haslo', 'zasob');
  4.  
  5. try {
  6.     $conn->useEncryption(false);
  7.     $conn->connect();
  8.     $conn->processUntil('session_start');
  9.     $conn->presence();
  10.     $conn->message('1234@gg.jabbim.pl', 'This is a test message!');
  11.     $conn->disconnect();
  12. } catch(XMPPHP_Exception $e) {
  13.     die($e->getMessage());
  14. }

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.

15 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