ďťż
Podstrony
|
telcocafeWitamChcię zrobić skrypt opisów GG. Pewnie powiecie że to głupi pomysł ale nie będzie to zwyczajny skrypt, będzie zawierał dodatkowe funkcje (sam na nie wpadłem). No i teraz mam pytanie, od czego zacząć go pisać. Znam w miarę dobrzę PHP i MySQL ale pojęcia nie mam od czego się zabrać. Może od prostego skryptu który by dodawał numery gg i wyświetlał potem ich status (prawdziwy, nie jak nieraz różnie to widać) i np opis. Może też ile razy był ktoś aktywny w: czasie godziny, dniu, tygodzniu... Użytkownik SZK edytował ten post 17 kwiecień 2006, 22:21 prostego <?php /* Skrypt napisany w oparciu o klasę www2gg (http://gg.wha.la/) * i opis protokołu GaduGadu z projektu EKG (http://dev.null.pl/ekg/docs/protocol.html) * Kod można dowolnie wykorzystać pod warunkiem pozostawienia niniejszego komentarza * Kod jest udostępniony na zasadach OpenSource. * * @author: Krzysztof Andrzej Błachut vel Bakus <bakus@idn.net.pl> * @copyright: 2004 by Krzysztof Andrzej Błachut vel Bakus * @package: OpisGG * @version: 0.9 */ // Login i hasło GG dla skryptu $numer_gg = 0000000; //jakis nieuzywany nr gg $haslo_gg = 'haslo'; // haslo do niego // Numer GG, którego opis chcemy wyświetlić $szukany_numer = $_GET['nr']; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ error_reporting(E_ALL); define("GG_LOGIN60", 0x0015); define("GG_STATUS_AVAIL", 0x0002); define("GG_LOGIN_OK", 0x0003); define("GG_NOTIFY", 0x0010); define("GG_USER_NORMAL", 0x0003); function oblicz_hash ($haslo, $klucz) { $x0=0; $x1=0; $y0=0; $y1=0; $z=0; $tmp=0; $y0 = ($klucz << 16) >> 16; $y1 = $klucz >> 16; for ($i=0; $i<strlen($haslo); $i++) { $x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF; $y0 ^= $x0; $y1 ^= $x1; $y0 += $x0; $y1 += $x1; $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8; $y0 ^= $x0; $y1 ^= $x1; $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8; $y0 -= $x0; $y1 -= $x1; $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8; $y0 ^= $x0; $y1 ^= $x1; $z = $y0 & 0x1F; $y0 &= 0xFFFF; $y1 &= 0xFFFF; if ($z <= 16) { $tmp= ($y1 << $z) | ($y0 >> (16-$z)); $y0 = ($y1 >> (16-$z)) | ($y0 << $z); $y1 = $tmp; }else{ $tmp= $y0 << ($z-16); $y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) ); $y1 = ($y1 >> (32-$z)) | $tmp; } $y0 &= 0xFFFF; $y1 &= 0xFFFF; } $hash = hexdec(sprintf("%04x%04x", $y1, $y0)); settype($hash, 'integer'); return $hash; } /* Funkcja pobiera z serwera GaduGadu opis dla podanego numeru. * * @param int Numer GG "bramki" * @param string Hasło GG "bramki" * @param int Numer GG, którego opis funkcja ma pobrać * @param var Zmienna w której umieszczony będzie ewentualny komunikat błędu * @return mixed Zawiera Opis numeru GG, lub false w przypadku błędu */ function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error) { $fp = fsockopen( "appmsg.gadu-gadu.pl", 80, $errno, $errmsg, 3 ); if (!$fp) { $error = "BRAK POLACZENA Z APPMSG.GADU-GADU.PL, MOZE BYC PRZECIAZONY: " . $errno . " - " . $errstr . "\n"; return false; }else{ $get = "GET /appsvc/appmsg.asp?fmnumber=<$numer_gg> HTTP/1.0\r\n"; $get.= "Host: appmsg.gadu-gadu.pl\r\n"; $get.= "User-Agent: Mozilla/4.7 [en] (Win98; I)\r\n"; $get.= "Pragma: no-cache\r\n\r\n"; fputs($fp, $get); fgets($fp, 128); fgets($fp, 128); $buf = fgets($fp, 128); preg_match("/\s([\d\.]{8,16})\:([\d] {1,5})\s/", $buf, $adres); $host = $adres[1]; $port = $adres[2]; fclose($fp); } // Ustanawianie połączenia z serwerem GG $fp = fsockopen($host, $port, $errno, $errstr, 10); if (!$fp) { $error = "PROBLEM Z POLACZENIEM: $errno - $errstr\n\n"; return false; } if (!$data = fread($fp, 12)) { $error = "Polaczenie nieoczekiwanie zamkniete\n\n"; return false; } // Pobieranie danych z serwera - odbiór klucza do wygenerowania hasha hasła $tab = unpack("Vtyp/Vrozmiar/Vklucz", $data); // obliczanie hasha hasła $hash = oblicz_hash($haslo_gg, $tab['klucz']); $data = pack("VVVVVVvVvVvCCa".strlen(""), GG_LOGIN60, 0x20 + strlen(""), $numer_gg, $hash, GG_STATUS_AVAIL, 0x20, 0, 0, 0, 0, 0, 0x14, 0xbe , ""); // wysłanie hasha hasła fwrite($fp, $data); if (!$data1 = fread($fp, 8)) { $error = "Nie rozpoznany blad\n"; return false; } $tab = unpack("Vlogin_status/Vrozmiar", $data1); if($tab['login_status'] != GG_LOGIN_OK) { $error = "Nie prawidłowe hasło...\n\n"; return false; } // Wysłanie listy kontaktów z jednym numerem $data = pack ("VVVC",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL); if(!fwrite($fp,$data)) { $error = "Blad wysylania listy kontaktow\n\n"; return false; } // Odebranie pakietu ze specyfikacją następnego pakietu $data = fread($fp, 8); $tab = unpack("Vtyp/Vrozmiar", $data); // Pobranie pakietu opisu $data = fread($fp, $tab['rozmiar']); // Zamknięcie połączenia z serwerem fclose($fp); // Przetworzenie znaków końca linii na spacje $status_kontaktu = str_replace("\n", ' ', $data); // Wycięcie zbędnych znaków na początku opisu return substr($status_kontaktu, 15); } echo get_gg_status($numer_gg,$haslo_gg,$szukany_numer, &$error); ?> Użytkownik bikstopa edytował ten post 17 kwiecień 2006, 23:33 |
|||
Sitedesign by AltusUmbrae. |