Gadu API – autoryzacja
Gadu-gadu stworzyło API umożliwiające stworzenie bota bez tworzenia własnego klienta i balansowania protokołem.
Aby uruchomić własnego bota należy przejść proces rejestracji opisany na stronach Gadu-Gadu.
-
1. Krzysztof Dziądziak – imię i nazwisko właściciela w przypadku osoby prywatnej
2. bot_testowy – cel do jakiego będzie wykorzystywany
3. 10000 – liczba numerów z którymi będzie się komunikował
4. 11111111 – numer gg założony wcześniej
5. haslo_do_11111111 – hasło do założonego numeru
6. http://domena.pl/bot_testowy.php – adres skryptu, który będzie korzystał z GG API (skrypt w momencie rejestracji musi istnieć na serwerze, może to być zwykły skrypt echo taki jak poniżej)
<?php echo "bot testowy"; ?>
Po niedługim czasie przychodzi e-mail z loginem i hasłem do uzyskania tokenu:
Dziękujemy za zgłoszenie. Bot został zarejestrowany, dane do uzyskania tokenu:
Login: imie.nazwisko@domena.pl
Hasło: haslo_do_uzyskania_tokenu
Dodatkowo należy przesłać pocztą porozumienie stron dotyczące autoryzacji numeru komunikatora Gadu-Gadu, na adres podany w e-mailu.
Do operacji PUSH (wysyłanie wiadomości i zmiana statutu) potrzebny jest token, który można uzyskać za pomocą standardowej autoryzacji HTTP. Uzyskany token jest ważny tylko przez minutę. Token nie jest potrzebny do otrzymywania wiadomości.
Aby uzyskać token potrzebne jest hasło i login oddzielone dwukropkiem zakodowane przy pomocy base64. W tym przypadku po zakodowaniu imie.nazwisko@domena.pl:haslo_do_uzyskania_tokenu uzyskujemy: aW1pZS5uYXp3aXNrb0Bkb21lbmEucGw6aGFzbG9fZG9fdXp5c2thbmlhX3Rva2VudQ==
Następnie należy przygotować pakiet danych do wysłania metodą GET. Na podstawie przykładu stworzony został pakiet:
GET /botmaster/getToken/11111111 HTTP/1.1
Authorization: Basic aW1pZS5uYXp3aXNrb0Bkb21lbmEucGw6aGFzbG9fZG9fdXp5c2thbmlhX3Rva2VudQ==
Host: external-services.gadu-gadu.pl
Accept: */*
Automatyzujemy proces wysyłania zapytania z wykorzystaniem PHP:
<?php $fp = fsockopen("ssl://external-services.gadu-gadu.pl", 443, $errno, $errstr, 30); //otwieramy socket na porcie https (443), timeout ustawiony na 30 sekund if (!$fp) { //jesli socket nie zostal otworzony echo "$errstr ($errno)<br />\n"; //wyswietl blad } else { //w przeciwnym wypadku $out = "GET /botmaster/getToken/11111111 HTTP/1.1\r\n"; //tworzymy komunikat $out .= "Authorization: Basic aW1pZS5uYXp3aXNrb0Bkb21lbmEucGw6aGFzbG9fZG9fdXp5c2thbmlhX3Rva2VudQ==\r\n"; $out .= "Host: external-services.gadu-gadu.pl\r\n"; $out .= "Accept: */*\r\n\r\n"; fwrite($fp, $out); //zapisujemy komunikat do utworzonego socketu while (!feof($fp)) { //dopoki dane plynace z socketu sie nie zakoncza echo fgets($fp, 128); //wyswietl pobierane dane - akceptacje ze strony servera + XML } fclose($fp); //zamknij socket } ?>
W odpowiedzi dostajemy:
HTTP/1.1 200 OK
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml
Date: Tue, 17 Nov 2009 19:37:25 GMT
Server: lighttpd
oraz XML zawierający parametry potrzebne do wysyłania wiadomości (token i adres serwera)
<?xml version="1.0" encoding="UTF-8"?> <botmaster><token>22222222</token><server>botapi-3.gadu-gadu.pl</server><port>80</port></botmaster>
Popularity: 5%
