{"id":198,"date":"2009-03-15T23:15:44","date_gmt":"2009-03-15T22:15:44","guid":{"rendered":"http:\/\/eriz.pcinside.pl\/weblog\/modul-powiadomien-gg-w-php-198.html"},"modified":"2009-03-15T23:15:44","modified_gmt":"2009-03-15T22:15:44","slug":"modul-powiadomien-gg-w-php","status":"publish","type":"post","link":"https:\/\/eriz.pcinside.pl\/weblog\/modul-powiadomien-gg-w-php-198.html","title":{"rendered":"Modu\u0142 powiadomie\u0144 GG w PHP"},"content":{"rendered":"<p>Na pewno niejeden koder zetkn\u0105\u0142 si\u0119 z problemem wysy\u0142ania powiadomie\u0144 do (niestety) najpopularniejszego komunikatora w Polsce. Owszem, jest GG API, ale warunki, na jakich podpisywany jest cyrograf sprawia, \u017ce tak naprawd\u0119 u\u017cyszkodnik podaje wy\u0142\u0105cznie dane osobowe dla GG Network, a ten umywa r\u0119ce i mo\u017ce robi\u0107 co chce.<\/p>\n<p>Tak, czy siak, zwykli \u015bmiertelnicy musz\u0105 sobie radzi\u0107 i sobie jako\u015b poradzimy. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p><!--more--><\/p>\n<h3>wst\u0119p<\/h3>\n<p>Wiele bibliotek posiada nieraz komunikacj\u0119 z GG zrealizowan\u0105 natywnie. Ma to swoje zalety, jak i wady. Na pewno te s\u0105 one szybsze, posiadaj\u0105 mniej po\u015brednik\u00f3w. Za to w przypadku zmiany protoko\u0142u le\u017c\u0105 i kwicz\u0105, gdy\u017c GG robi\u0142o r\u00f3\u017cne tego typu cyrki ju\u017c bodaj\u017ce kilka razy. Czym to owocuje? Oczywi\u015bcie unieruchomieniem skryptu powiadamiaj\u0105cego.<\/p>\n<p>Powsta\u0142a kiedy\u015b bramka www2gg napisana w PHP, ale obecnie nie dzia\u0142a z tego w\u0142a\u015bnie powodu. W phpBB by Przemo podobno si\u0119 co\u015b takiego znajduje, ale nie chc\u0119 traci\u0107 czasu na \u015bci\u0105ganie i analizowanie \u017ar\u00f3de\u0142.<\/p>\n<p>Eksperymentuj\u0105c wpad\u0142em na i\u015bcie banalny, ale za to do\u015b\u0107 skuteczny spos\u00f3b. Mianowicie, wystarczy skorzysta\u0107 z Jabbera i jakiego\u015b transportu GG. Tak jak i we wcze\u015bniejszym przypadku, wady i zalety &#8211; na pewno dodatkowe po\u015brednictwo, typu pad transportu uniemo\u017cliwi\u0105 dzia\u0142anie bramki. Jednak sam fakt, \u017ce nad transportami kto\u015b czuwa, zdejmuje z nas uci\u0105\u017cliwy obowi\u0105zek &#8211; pilnowania skryptu, aby by\u0142 zgodny z zachciankami GG.<\/p>\n<p>Protok\u00f3\u0142 Jabbera jest ju\u017c na tyle dojrza\u0142y, \u017ce mo\u017cna na nim polega\u0107. Chyba wystarczaj\u0105cym dowodem mo\u017ce by\u0107 fakt zaimplementowania go w us\u0142udze GTalk. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<h3>zabawki<\/h3>\n<p>Z tzw. zabawek b\u0119dziemy potrzebowali niewiele:<\/p>\n<ul>\n<li>serwer Jabbera z transportem GG (ja skorzystam z <a href=\"http:\/\/jabbim.pl\">Jabbima<\/a>)<\/li>\n<li>hosting z PHP 5 (to ju\u017c dzisiaj standard, ale lepiej si\u0119 upewni\u0107, bo czasem zdarzaj\u0105 si\u0119 dinozaury :P)<\/li>\n<li>paczka <a href=\"http:\/\/code.google.com\/p\/xmpphp\/\">XMPPHP<\/a><\/li>\n<li>klient Jabbera (np. <a href=\"http:\/\/psi-im.org\/\">PSI<\/a>)<\/li>\n<\/ul>\n<p>Oraz &#8211; oczywi\u015bcie &#8211; ta notka. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> Osoby bardziej wprawione ju\u017c teraz pewnie wiedz\u0105, co robi\u0107, ale zamieszczam instrukcj\u0119 z obrazkami. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<h3>konta<\/h3>\n<p>Po zainstalowaniu klienta Jabbera, rejestrujemy konto. Jest to operacja niezbyt trudna. Klik na ikonk\u0119 PSI w dolnej cz\u0119\u015bci okna, <em>Konta\/Account setup<\/em>. Potem <em>Dodaj\/Add<\/em> i przechodzimy do kr\u00f3tkiego kreatora. Teraz podajemy nazw\u0119, kt\u00f3ra b\u0119dzie identyfikatorem w programie, zaznaczamy <em>zarejestruj nowe konto\/register new account<\/em>. W nast\u0119pnym oknie podajemy adres serwera, np. <em>jabbim.pl<\/em> i po klikni\u0119ciu dalej podajemy login i has\u0142o. Tyle wystarczy, mo\u017cna zmieni\u0107 stan na dost\u0119pny. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> Ewentualne okienko o braku wa\u017cnego certyfikatu ignorujemy klikaj\u0105c <em>kontynuuj\/continue<\/em>.<\/p>\n<p class=\"images\"><a href=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-1.png\" title=\"Rejestracja konta\" rel=\"imagebox-fd\"><img decoding=\"async\" src=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-1-thumb.jpg\" alt=\"rejestracja konta\" style=\"width: 127px; height: 120px\" \/><\/a> <a href=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-2.png\" title=\"Rejestracja konta #2\" rel=\"imagebox-fd\"><img decoding=\"async\" src=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-2-thumb.jpg\" alt=\"rejestracja konta #2\" style=\"width: 107px; height: 120px\" \/><\/a> <\/p>\n<p>Teraz potrzebujemy numeru GG. Najlepiej za\u0142o\u017cy\u0107 do tego celu osobny, kto wie, czy GG nie wpad\u0142oby na pomys\u0142 zablokowania; tego nikt nie wie pr\u00f3cz nich samych. Je\u015bli nie masz jeszcze numeru dla powiadamiacza &#8211; <a href=\"https:\/\/login.gadu-gadu.pl\/account\/register\" rel=\"nofollow\">zarejestruj nowy<\/a>.<\/p>\n<p>Numerek jest, konto Jabbera jest, teraz pora skonfigurowa\u0107 transport. W PSI klikamy prawym klawiszem na konto w g\u0142\u00f3wnym oknie programu i wybieramy <em>service discovery\/przegl\u0105darka us\u0142ug<\/em>. Czekamy chwilk\u0119 i szukamy na li\u015bcie czego\u015b w stylu <em>Gadu-Gadu transport<\/em>. Gdy znajdziemy, klik prawym i <em>register\/rejestruj<\/em>. Podajemy dane konta GG i ko\u0144czymy rejestracj\u0119. W rosterze pojawi si\u0119 nowy kontakt, kt\u00f3ry autoryzujemy.<\/p>\n<p>Nie wiem, czym jest to spowodowane, ale transport (przynajmniej na Jabbimie) zachowuje si\u0119 zaraz po aktywacji nieco dziwnie. Wystarczy jednak doda\u0107 do listy jeden numerek i powinno ju\u017c by\u0107 w porz\u0105dku. JID kontaktu podajemy w formacie <em>NUMER@gg.serwer.pl<\/em>, np. w przypadku Jabbima &#8211; <em>NUMER@gg.jabbim.pl<\/em>. Od tej pory powinno by\u0107 wszystko stabilne i transport powinien by\u0107 dost\u0119pny. Na wszelki wypadek &#8211; mo\u017cna jeszcze wylogowa\u0107 i zalogowa\u0107 si\u0119 z transportu (prawym na kontakcie transportu, <em>logout\/wyloguj<\/em>\/<em>login\/zaloguj<\/em> oraz ponownie pod\u0142\u0105czy\u0107 si\u0119 na samym Jabberze.<\/p>\n<p class=\"images\"><a href=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-3.png\" title=\"Konfiguracja transporta\" rel=\"imagebox-fd\"><img decoding=\"async\" src=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-3-thumb.jpg\" alt=\"Transport\" style=\"width: 160px; height: 101px\" \/><\/a> <a href=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-4.png\" title=\"Konfiguracja transporta #2\" rel=\"imagebox-fd\"><img decoding=\"async\" src=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-4-thumb.jpg\" alt=\"Transport #2\" style=\"width: 160px; height: 115px\" \/><\/a> <a href=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-5.png\" title=\"Konfiguracja transporta #3\" rel=\"imagebox-fd\"><img decoding=\"async\" src=\"\/weblog\/stuff\/198-modul-powiadomien-gg-w-php-5-thumb.jpg\" alt=\"Transport #3\" style=\"width: 158px; height: 120px\" \/><\/a> <\/p>\n<h3>PHP<\/h3>\n<p>Kodu b\u0119dzie niewiele &#8211; po rozpakowaniu paczki z XMPPHP mo\u017cemy od razu przej\u015b\u0107 do edycji pliku <em>sendmessage_example.php<\/em>. W odpowiedniej linijce podajemy dane konta Jabbera. Nast\u0119pnie wy\u0142\u0105czamy obs\u0142ug\u0119 szyfrowania po\u0142\u0105czenia (mo\u017ce powodowa\u0107 problemy) oraz wpisujemy adresata w formacie <em>NUMER@gg.serwer.pl<\/em>.<\/p>\n<p>W przypadku Jabbima, zadzia\u0142a\u0142 poni\u017cszy kod:<\/p>\n<p><code lang=\"php\">include 'XMPPHP\/XMPP.php';<\/p>\n<p>$conn = new XMPPHP_XMPP('jabbim.pl', 5222, 'login', 'haslo', 'zasob');<\/p>\n<p>try {<br \/>\n    $conn->useEncryption(false);<br \/>\n    $conn->connect();<br \/>\n    $conn->processUntil('session_start');<br \/>\n    $conn->presence();<br \/>\n    $conn->message('1234@gg.jabbim.pl', 'This is a test message!');<br \/>\n    $conn->disconnect();<br \/>\n} catch(XMPPHP_Exception $e) {<br \/>\n    die($e->getMessage());<br \/>\n} <\/code><\/p>\n<h3>epilog<\/h3>\n<p>Jak to zwykle z GG bywa &#8211; jest jak pogoda &#8211; zmienne i cz\u0119sto nieprzewidywalne. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> Ci\u0119\u017cko powiedzie\u0107, co mo\u017ce GG uzna\u0107 za flood\/spim i tym samym zablokowa\u0107 numer, etc. Pami\u0119taj, \u017ce pisa\u0142em t\u0119 notk\u0119 w szczytnym celu, a nie dla kolejnego spamowania, czego w ani promilu nie popieram! Dobre produkty reklamuj\u0105 si\u0119 same.<\/p>\n<p>I na koniec, tzw. disclaimer: <strong style=\"color: red\">korzystaj\u0105c z powy\u017cszej metody robisz to na w\u0142asne ryzyko. Nie odpowiadam za wszelkie ewentualne konsekwencje tym spowodowane, zw\u0142aszcza za zablokowanie konta GG i\/lub Jabbera.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na pewno niejeden koder zetkn\u0105\u0142 si\u0119 z problemem wysy\u0142ania powiadomie\u0144 do (niestety) najpopularniejszego komunikatora w Polsce. Owszem, jest GG API, ale warunki, na jakich podpisywany jest cyrograf sprawia, \u017ce tak naprawd\u0119 u\u017cyszkodnik podaje wy\u0142\u0105cznie dane osobowe dla GG Network, a ten umywa r\u0119ce i mo\u017ce robi\u0107 co chce. Tak, czy siak, zwykli \u015bmiertelnicy musz\u0105 sobie [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[54,50,30],"_links":{"self":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/198"}],"collection":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":0,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}