Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> Pobieranie opisu z GaduGadu, Funkcja, PHP 4 i 5
Bakus
post
Post #1


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Funkcja łączy się z serwerem GG, loguje się na nim, pobiera opis dla podanego numeru i kończy połączenie. W przypadku powodzenia całości operacji funkcja zwraca opis. W przypadku niepowodzenia funkcja zwróci wartość "(bool) false" i w zmiennej podanej jako ostatni, czwaty argument umieści komunikat o błędzie jaki zaistniał.

Szczegóły parametrów do przekazania jak i wyniku działania funkcji znajdują się w jej komentarzu.

Funkcja wymaga zdefiniowania stałych wartości używanych w protokole GaduGadu. Nie są one umieszczone w funkcji, by uniknąć komunikatu o błędzie ponownego deklarowania stałych w przypadku, gdy funkcja zostanie wywołana wielokrotnie w jednym skrypcie.

Dwie uwagi końcowe:
- ilość znaków jaka jest wycinana ze zwracanego opisu (ostatnia linijka funkcji) jest dobrana eksperymentalnie i jak narazie nie znalazłem innego lepszego) rozwiązania na pozbycie się znaków znajdujących się na początku zwracanego przez serwer wyniku.
- Funkcja nie jest przystosowana do odbioru wielu statusów w jednym połączeniu. By ją do tego przystosować należy odpowiednio zmienić wywołanie funkcji (np. przekazać tablicę z numerami, a nie wartość INT i w linii 126 zmienić format pakietu zgodnie ze specyfikacją dostępną na stronie projektu EKG ( http://dev.null.pl/ekg/docs/protocol.html#ch1.11 )

(Kod wydzielony z tematu Skrypty do generowania sygnaturek, na grafikach)

  1. <?php
  2. /* Skrypt napisany w oparciu o klasę www2gg (http://gg.wha.la/)
  3.  * i opis protokołu GaduGadu z projektu EKG (http://dev.null.pl/ekg/docs/protocol.html)
  4.  * Kod można dowolnie wykorzystać pod warunkiem pozostawienia niniejszego koment
  5. rza
  6.  * Kod jest udostępniony na zasadach OpenSource.
  7.  *
  8.  * @author: Krzysztof Andrzej Błachut vel Bakus <bakus@idn.net.pl>
  9.  * @copyright: 2004-2005 by Krzysztof Andrzej Błachut vel Bakus
  10.  * @package: OpisGG
  11.  * @version: 1.0
  12.  */
  13.  
  14. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  15.  
  16. function oblicz_hash ($haslo, $klucz)
  17. {
  18. $x0=0; $x1=0; $y0=0; $y1=0; $z=0; $tmp=0;
  19. $y0 = ($klucz << 16) >> 16; $y1 = $klucz >> 16 ;
  20. for ($i=0; $i<strlen($haslo); $i++)
  21. {
  22. $x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF;
  23. $y0 ^= $x0; $y1 ^= $x1;
  24. $y0 += $x0; $y1 += $x1;
  25. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  26. $y0 ^= $x0; $y1 ^= $x1;
  27. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  28. $y0 -= $x0; $y1 -= $x1;
  29. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  30. $y0 ^= $x0; $y1 ^= $x1;
  31. $z = $y0 & 0x1F;
  32. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  33. if ($z <= 16)
  34. {
  35. $tmp= ($y1 << $z) | ($y0 >> (16-$z));
  36. $y0 = ($y1 >> (16-$z)) | ($y0 << $z);
  37. $y1 = $tmp;
  38. }else{
  39. $tmp= $y0 << ($z-16);
  40. $y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) );
  41. $y1 = ($y1 >> (32-$z)) | $tmp;
  42. }
  43. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  44. }
  45. $hash = hexdec(sprintf(&#092;"%04x%04x\", $y1, $y0));
  46. settype($hash, 'integer');
  47. return $hash;
  48. }
  49.  
  50. /* Funkcja pobiera z serwera GaduGadu opis dla podanego numeru.
  51.  *
  52.  * @param int Numer GG \"bramki\"
  53.  * @param string Hasło GG \"bramki\"
  54.  * @param int Numer GG, którego opis funkcja ma pobrać
  55.  * @param var Zmienna w której umieszczony będzie ewentualny komunikat błęd
  56.  
  57.  * @return mixed Zawiera Opis numeru GG, lub false w przypadku błędu
  58.  */
  59. function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error)
  60. {
  61. // Ustawianie stałych na potrzeby protokołu
  62. define(&#092;"GG_LOGIN60\", 0x0015);
  63. define(&#092;"GG_STATUS_AVAIL\",  0x0002);
  64. define(&#092;"GG_LOGIN_OK\", 0x0003);
  65. define(&#092;"GG_NOTIFY\",  0x0010);
  66. define(&#092;"GG_USER_NORMAL\", 0x0003);
  67.  
  68. $fp = fsockopen( &#092;"appmsg.gadu-gadu.pl\", 80, $errno, $errmsg, 3 );
  69. if (!$fp)
  70. {
  71. $error = &#092;"BRAK POLACZENA Z APPMSG.GADU-GADU.PL, MOZE BYC PRZECIAZONY: \" . $errno . \" - \" . $errstr . \"n\";
  72. return false;
  73. }else{
  74. $get = &#092;"GET /appsvc/appmsg.asp?fmnumber=<$numer_gg> HTTP/1.0rn\";
  75. $get.= &#092;"Host: appmsg.gadu-gadu.plrn\";
  76. $get.= &#092;"User-Agent: Mozilla/4.7 [en] (Win98; I)rn\";
  77. $get.= &#092;"Pragma: no-cachernrn\";
  78. fputs($fp, $get);
  79. fgets($fp, 128);
  80. fgets($fp, 128);
  81. $buf = fgets($fp, 128);
  82. preg_match(&#092;"/s([d.]{8,16}):([d]{1,5})s/\", $buf, $adres);
  83. $host = $adres[1];
  84. $port = $adres[2];
  85. fclose($fp);
  86. }
  87.  
  88. // Ustanawianie połączenia z serwerem GG
  89. $fp = fsockopen($host, $port, $errno, $errstr, 10);
  90. if (!$fp)
  91. {
  92. $error = &#092;"PROBLEM Z POLACZENIEM: $errno - $errstrnn\";
  93. return false;
  94. }
  95. if (!$data = fread($fp, 12))
  96. {
  97. $error = &#092;"Polaczenie nieoczekiwanie zamknietenn\";
  98. return false;
  99. }
  100.  
  101. // Pobieranie danych z serwera - odbiór klucza do wygenerowania hasha hasła
  102. $tab = unpack(&#092;"Vtyp/Vrozmiar/Vklucz\", $data);
  103. // obliczanie hasha hasła
  104. $hash = oblicz_hash($haslo_gg, $tab['klucz']);
  105. $data = pack(&#092;"VVVVVVvVvVvCCa\".strlen(\"\"), GG_LOGIN60, 0x20 + strlen(\"\"),
  106. $numer_gg, $hash, GG_STATUS_AVAIL, 0x20, 0, 0, 0, 0, 0, 0x14, 0xbe , &#092;"\");
  107. // wysłanie hasha hasła
  108. fwrite($fp, $data);
  109. if (!$data1 = fread($fp, 8))
  110. {
  111. $error = &#092;"Nie rozpoznany bladn\";
  112. return false;
  113. }
  114. $tab = unpack(&#092;"Vlogin_status/Vrozmiar\", $data1);
  115. if($tab['login_status'] != GG_LOGIN_OK)
  116. {
  117. $error = &#092;"Nie prawidłowe hasło...nn\";
  118. return false;
  119. }
  120.  
  121. // Wysłanie listy kontaktów z jednym numerem
  122. $data = pack (&#092;"VVVC\",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL);
  123. if(!fwrite($fp,$data))
  124. {
  125. $error = &#092;"Blad wysylania listy kontaktownn\";
  126. return false;
  127. }
  128. // Odebranie pakietu ze specyfikacją następnego pakietu
  129. $data = fread($fp, 8);
  130. $tab = unpack(&#092;"Vtyp/Vrozmiar\", $data);
  131. // Pobranie pakietu opisu
  132. $data = fread($fp, $tab['rozmiar']);
  133. // Zamknięcie połączenia z serwerem
  134. fclose($fp);
  135. $tablica = unpack(&#092;"Iuin/Cstatus/Iremoteip/Sremoteport/Cversion/Cimagesize/Cunknown/Cdescription_size/a*\", $data);
  136. return $tablica[1];
  137. }
  138. ?>


UpDated (07.10.2004 01:07):
Zmieniłem "return substr($status_kontaktu, 15);" na nieco bardziej zaawansowany i skuteczny sposób wycinania niechcianych znaków...
Dzięki temu opisy nie są ucinane i nie zawierają śmieci...

UpDated (08.02.2005 14:45):
Coraz częściej dostaje PW o sposób użycia, więc...
Sposób użycia - wyświetlenie opisu numeru 1234567 (nasz numer to 2358764, a haslo to: zxcdews):
  1. <?php
  2. print get_gg_status(&#092;"2358764\", \"zxcdews\", \"1234567\", $error);
  3. ?>


UpDated (10.02.2005 04:31):
Status wyświetlany jest bez żadnych krzaków - zmianie uległ sposób wyciągania opisu z pakietu odbieranego z serwera...

UpDated (10.02.2005 05:16):
Zoptymalizowałem wyciąganie opisu z pakietu do 1 polecenia unpack...
Go to the top of the page
+Quote Post
Tlenex
post
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


Jeszcze zapytanie: czy da się wyciągnąć obrazek numeru, który ma włączoną opcję "Tylko dla znajomych"? Jeśli tak, to jak?
Go to the top of the page
+Quote Post
aleksander
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

Ostrzeżenie: (0%)
-----


numer, który używa ta funkcja musi być wpisany do listy konaktów numeru który sprawdzasz.

@Bakus:
1. Czemu dwa razy definiujesz stałe?
2. Ładniej byłoby to w klase ująć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam
Go to the top of the page
+Quote Post
Chewolf
post
Post #4





Grupa: Zarejestrowani
Postów: 335
Pomógł: 0
Dołączył: 15.11.2003

Ostrzeżenie: (0%)
-----


Cytat(aleksander @ 2005-02-12 00:14:11)
1. Czemu dwa razy definiujesz stałe?

To chyba jest jakiś przypadek... pomyłka. Wystarczy jak się raz zdefiniuje ... ale moge się mylić (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wszystko jest możliwe.
Go to the top of the page
+Quote Post
ikioloak
post
Post #5





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


Twoja funkcja to jest swietna sprawa ale ma jeden mankament. W momencie jej wywolania rozlacza mi sie GG. Korzystam dokladnie z Tlena i w momencie kiedy ktos wchodzi na strone to automatycznie staje sie niedostepny.. Jest jakas rada na to?
Go to the top of the page
+Quote Post
Bakus
post
Post #6


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


HeHe... zarejestruj nowy numer GG
Jezeli serwer GG zostanie poproszony o autoryzacje nowej sesji na ten sam numer, to wszystkie otworzone sesje zostana zakonczone i zostanie nawiazane polaczenie z ostatnia sesja o jaka zostal poproszony... dlatego wlasnie Cie rozlacza...
Go to the top of the page
+Quote Post
xantio
post
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 11.11.2005

Ostrzeżenie: (0%)
-----


Witam. Jestem tu nowy.
Chciałbym się dowiedzieć, czy można troszkę rozszerzyć funkcje o rozpoznawanie statusu (dostępny, niedostępny, zaraz wracam), np. funkcja zwraca wartość:
0 przy niedostępnym
1 przy dostępnym
2 przy zaraz wracam
Go to the top of the page
+Quote Post
ikioloak
post
Post #8





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


http://gg.wha.la/ - tutaj masz dostepna klase do obslugi gg i tam ta funkcja o ktora prosisz jest.


---
Rozpoznawanie statusu w bardzo prosty sposob znalezione na http://www.strefaphp.net/artykul1.html

  1. <?php
  2.  
  3. $plik = fopen ("http://www.gadu-gadu.pl/users/status.asp?id=numer_gg&styl=2", "r"); 
  4. $status = fgets($plik, 2); 
  5. switch ($status) 
  6. { 
  7.  case 1: 
  8. echo '<IMG src="niedostepny.jpg">'; 
  9. break; 
  10.  case 2: 
  11. echo '<IMG src="dostepny.jpg">'; 
  12. break; 
  13.  case 3: 
  14. echo '<IMG src="wracam.jpg">'; 
  15. break; 
  16.  default: 
  17. // w razie błędu pokaże się obrazek error.jpg 
  18. echo '<IMG src="error.jpg">'; 
  19. break; 
  20. } 
  21. fclose($plik); 
  22.  
  23. ?>


Ten post edytował ikioloak 12.11.2005, 15:05:49
Go to the top of the page
+Quote Post
artee
post
Post #9





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 13.11.2005

Ostrzeżenie: (0%)
-----


Rozumiem, ze paczka do sprawdzania statusu jednej osoby, to:

  1. <?
  2. $data = pack ("VVVC",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL);
  3. ?>


A jak sie to ma do pobrania kilku numerow? Trzeba powtarzac wysylanie takiej paczki, czy mozna to zrobic za jednym razem?
Go to the top of the page
+Quote Post
Bakus
post
Post #10


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Niestety nie znalazłem odpowiedzi na to pytanie. Mniewam, iż wieloktorne wysłanie zapytań o status w czasie 1 połączenia nie spowoduje błędu i będzie dobrym obejściem tego problemu, jednak to tylko przypuszczenie.
Go to the top of the page
+Quote Post
dariusz_w
post
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 16.11.2005
Skąd: Żary

Ostrzeżenie: (0%)
-----


wywala mi taki błąd z tego skryptu:

Warning: unpack(): Type C: not enough input, need 1, have 0 in c:\usr\krasnal\www\statusgg\ggstatus.php on line 134

czy ktoś mi pomoże będę wdzięczny gg 5377455
Go to the top of the page
+Quote Post
ikioloak
post
Post #12





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


Tez mialem ten problem (moze w zwiazku z wejsciem GG 7?) i klecac troche od bakusa i bramki z http://gg.wha.la/ stworzylem, cos co dziala tak samo jak skrypt Bakusa.. Do sciagniecia razem z klasa do obslugi gg z ww adresu Tutaj.
Jak skorzystac:
  1. <?php
  2.  
  3. $gg = new GaduEx();
  4. $opis = $gg->getOpis($twoj_gg,$twoje_haslo,$szukany_nr);
  5.  
  6. ?>
Go to the top of the page
+Quote Post
GrayHat
post
Post #13





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

Ostrzeżenie: (0%)
-----


troche odswieze temat.
skrypt obecnie nie dziala :/
zwraca cos takiego:

Cytat
Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /srv/www/htdocs/web792/html/blog/gg/gg.php on line 18

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /srv/www/htdocs/web792/html/blog/gg/gg.php on line 20
Go to the top of the page
+Quote Post
bim2
post
Post #14





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Odswiezam i mowie ze dziala. teraz przetestowalem
Go to the top of the page
+Quote Post
elem84
post
Post #15





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 25.07.2005

Ostrzeżenie: (0%)
-----


Witam...

Wiem że jestem cienki ale nie moge poradzić sobje z pobieraniem większej ilości opisów gg, możecie mi powiedzieć jak należy zmodyfikować tę klasę żeby pobrała w jednej sesji wszystkie opisy numerów gg które jej przekaże w tablicy. Jeszcze raz sorry za prośbe o gotowca ale jakoś to mi nie wychodzi.

Pozdrawiam,
eLeM
Go to the top of the page
+Quote Post
Balon
post
Post #16





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $numery = array( '2222', '3333', '4444' );
  3. foreach( $numery as $numer )
  4. {
  5. echo 'Numer: '.$numer.', Opis: '.get_gg_status("2358764", "zxcdews", $numer, $error).'<br />';
  6. }
  7. ?>

,.....
Go to the top of the page
+Quote Post
bim2
post
Post #17





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat(elem84 @ 19.06.2006, 17:39 ) *
Witam...

Wiem że jestem cienki ale nie moge poradzić sobje z pobieraniem większej ilości opisów gg, możecie mi powiedzieć jak należy zmodyfikować tę klasę żeby pobrała w jednej sesji wszystkie opisy numerów gg które jej przekaże w tablicy. Jeszcze raz sorry za prośbe o gotowca ale jakoś to mi nie wychodzi.

Pozdrawiam,
eLeM

W jednej sesji (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) czyli nie ze zapętlisz skrypt. Tak sie raczej nie da ^^ Pytaj bakusa o to
Go to the top of the page
+Quote Post
Bakus
post
Post #18


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Nie próbowałem rozwiązać pobierania wielu podpisów. Moja rada: eksperymentuj (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Athlan
post
Post #19





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $szukany_numer = array(12345, 23456, 34567, 45678);
  3. foreach($szukany_numer as $hehe)
  4. {
  5. $data = pack ("VVVC",GG_NOTIFY, 5, $hehe, GG_USER_NORMAL);
  6. }
  7. ?>


tak ?

Ten post edytował Athlan 26.06.2006, 11:37:10
Go to the top of the page
+Quote Post
bim2
post
Post #20





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


A co to da? $data jest nadpisywana więc wezmie ostatni numer ;P
Go to the top of the page
+Quote Post
Plikownik
post
Post #21





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 19.01.2006

Ostrzeżenie: (0%)
-----


skrypt nie działa - pokazuje mi się taki błąd - "PROBLEM Z POLACZENIEM: 111 - Connection refused"
Go to the top of the page
+Quote Post
Athlan
post
Post #22





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


bim2 to może tak:

  1. <?php
  2. $wyniki_dzialania = array();
  3. $szukany_numer = array(12345, 23456, 34567, 45678);
  4. foreach($szukany_numer as $hehe)
  5. {
  6. array_push($wyniki_dzialania, array($szukany_numer => pack("VVVC",GG_NOTIFY, 5, $hehe, GG_USER_NORMAL)));
  7. }
  8. ?>


i potem opisy są zwranace w tablicy: numerek => opisik (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

masz problem ;p
Go to the top of the page
+Quote Post
bim2
post
Post #23





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


No tak sie teraz da (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Tylko nie testowalem tego i nie wiem czy zadziala (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Napisz coś więcej czy działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Athlan
post
Post #24





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


@bim2 teraz musi działać... dla każdego numeru tworzona jest tablica numerek => opis, dzięki czemu mozna ponownie wykorzystać tablicę $szukany_numer w mnuiej wiecej taki sposób:

  1. <?php
  2. foreach($szukany_numer as $numer)
  3. {
  4. echo $numer.' ma opis '.$wyniki_dzialania[$numer].'<br />';
  5. }
  6. ?>


wylistuje nam cały wynik (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdro (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bim2
post
Post #25





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Ja rozumiem tlyko ja nie umiem wyciagac pisu i nieorumiem jak on dziala (ten skrypt) Wiec jesli do wyciagniecia opisu wystarczy 1 unpack to OK, powinno dzialać (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Athlan
post
Post #26





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


@bim2:

Cytat
Funkcja łączy się z serwerem GG, loguje się na nim, pobiera opis dla podanego numeru i kończy połączenie. W przypadku powodzenia całości operacji funkcja zwraca opis. W przypadku niepowodzenia funkcja zwróci wartość "(bool) false" i w zmiennej podanej jako ostatni, czwaty argument umieści komunikat o błędzie jaki zaistniał.

Szczegóły parametrów do przekazania jak i wyniku działania funkcji znajdują się w jej komentarzu.


Ten post edytował Athlan 18.07.2006, 08:56:41
Go to the top of the page
+Quote Post
DooBLER
post
Post #27





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.08.2006

Ostrzeżenie: (0%)
-----


Witam

Mam problem ze skryptem
Jeśli podany do skryptu nr GG nie ma ustawionego opisu to dostaje błąd:
Warning: unpack() [function.unpack]: Type C: not enough input, need 1, have 0 in c:\usr\apache\httpd\html\gg\statusgg.php on line 133
Jeśli opis jest ustawiony to wszystko działa pięknie

Czy ktoś wie jak to obejść ?

Pozdrawiam
Go to the top of the page
+Quote Post
bim2
post
Post #28





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Wiem że to głupie ale daj @ przed unpack (@unpack()) I powinno zadziałac (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) Ale to jest najprostrze wyjście z sytuacji i może jest baredzije profesjonalne
Go to the top of the page
+Quote Post
DooBLER
post
Post #29





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.08.2006

Ostrzeżenie: (0%)
-----


Cytat(bim2 @ 14.09.2006, 19:48:55 ) *
Wiem że to głupie ale daj @ przed unpack (@unpack()) I powinno zadziałac (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) Ale to jest najprostrze wyjście z sytuacji i może jest baredzije profesjonalne


Hehe tak zrobiłem już wczesniej, ale pomyślałem, że nie zaszkodzi zapytać "tęgie głowy" o jakieś bardziej profesionalne rozwiązanie tego problemu.

Myślałem żeby wyciągnąć status przed opisem i wtedy (o ile status rozdziela np "dostepny" != "dostępny z opisem") dać tylko if czy ma rozpakowywać opis czy nie.

Ale jeszcze mam za małego skill'a na zabawe z tymi pakieami (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
bastek8989
post
Post #30





Grupa: Zarejestrowani
Postów: 205
Pomógł: 1
Dołączył: 11.09.2006

Ostrzeżenie: (0%)
-----


mi wyswietla

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/bastek/public_html/gg_test.php on line 102

102 linijka:
$hash = oblicz_hash($haslo_gg, $tab['klucz']);

:|
Go to the top of the page
+Quote Post
kossa
post
Post #31





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


co masz linię wyżej?

a to może:

  1. <?php
  2. $hash = oblicz_hash($haslo_gg, $tab["klucz"]);
  3. ?>


Łukasz
Go to the top of the page
+Quote Post
bastek8989
post
Post #32





Grupa: Zarejestrowani
Postów: 205
Pomógł: 1
Dołączył: 11.09.2006

Ostrzeżenie: (0%)
-----


to nie to ^^ przeciez niewyswietla ze jest blad w zapisie

nic sam niedopisywalem - wszystko mam tak jak podane w tym poscie

Ten post edytował bastek8989 20.12.2006, 16:51:25
Go to the top of the page
+Quote Post
Sabistik
post
Post #33


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie wiem czy zauważyliście ale kod z listingu z pierwszym poście, posypał się całkiem (pewnie podczas jakiegoś upgrade forum), są w nim pododawane błędne sleshe.
Go to the top of the page
+Quote Post
ali3n
post
Post #34





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.06.2005

Ostrzeżenie: (0%)
-----


  1. <?php
  2. /* Skrypt napisany w oparciu o klasę www2gg (http://gg.wha.la/)
  3.  * i opis protokołu GaduGadu z projektu EKG (http://dev.null.pl/ekg/docs/protocol.html)
  4.  * Kod można dowolnie wykorzystać pod warunkiem pozostawienia niniejszego koment
    arza
  5.  * Kod jest udostępniony na zasadach OpenSource.
  6.  *
  7.  * @author: Krzysztof Andrzej Błachut vel Bakus <bakus@idn.net.pl>
  8.  * @copyright: 2004-2005 by Krzysztof Andrzej Błachut vel Bakus
  9.  * @package: OpisGG
  10.  * @version: 1.0
  11.  */
  12.  
  13. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  14.  
  15. function oblicz_hash ($haslo, $klucz)
  16. {
  17. $x0=0; $x1=0; $y0=0; $y1=0; $z=0; $tmp=0;
  18. $y0 = ($klucz << 16) >> 16; $y1 = $klucz >> 16 ;
  19. for ($i=0; $i<strlen($haslo); $i++)
  20. {
  21. $x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF;
  22. $y0 ^= $x0; $y1 ^= $x1;
  23. $y0 += $x0; $y1 += $x1;
  24. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  25. $y0 ^= $x0; $y1 ^= $x1;
  26. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  27. $y0 -= $x0; $y1 -= $x1;
  28. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  29. $y0 ^= $x0; $y1 ^= $x1;
  30. $z = $y0 & 0x1F;
  31. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  32. if ($z <= 16)
  33. {
  34. $tmp= ($y1 << $z) | ($y0 >> (16-$z));
  35. $y0 = ($y1 >> (16-$z)) | ($y0 << $z);
  36. $y1 = $tmp;
  37. }else{
  38. $tmp= $y0 << ($z-16);
  39. $y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) );
  40. $y1 = ($y1 >> (32-$z)) | $tmp;
  41. }
  42. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  43. }
  44. $hash = hexdec(sprintf("%04x%04x", $y1, $y0));
  45. settype($hash, 'integer');
  46. return $hash;
  47. }
  48.  
  49. /* Funkcja pobiera z serwera GaduGadu opis dla podanego numeru.
  50.  *
  51.  * @param int Numer GG "bramki"
  52.  * @param string Hasło GG "bramki"
  53.  * @param int Numer GG, którego opis funkcja ma pobrać
  54.  * @param var Zmienna w której umieszczony będzie ewentualny komunikat błędu
  55.  * @return mixed Zawiera Opis numeru GG, lub false w przypadku błędu
  56.  */
  57. function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error)
  58. {
  59. // Ustawianie stałych na potrzeby protokołu
  60. define("GG_LOGIN60", 0x0015);
  61. define("GG_STATUS_AVAIL",  0x0002);
  62. define("GG_LOGIN_OK", 0x0003);
  63. define("GG_NOTIFY",  0x0010);
  64. define("GG_USER_NORMAL", 0x0003);
  65.  
  66. $fp = fsockopen( "appmsg.gadu-gadu.pl", 80, $errno, $errmsg, 3 );
  67. if (!$fp)
  68. {
  69. $error = "BRAK POLACZENA Z APPMSG.GADU-GADU.PL, MOZE BYC PRZECIAZONY: " . $errno . " - " . $errstr . "n";
  70. return false;
  71. }else{
  72. $get = "GET /appsvc/appmsg.asp?fmnumber=<$numer_gg> HTTP/1.0rn";
  73. $get.= "Host: appmsg.gadu-gadu.plrn";
  74. $get.= "User-Agent: Mozilla/4.7 [en] (Win98; I)rn";
  75. $get.= "Pragma: no-cachernrn";
  76. fputs($fp, $get);
  77. fgets($fp, 128);
  78. fgets($fp, 128);
  79. $buf = fgets($fp, 128);
  80. preg_match("/s([d.]{8,16}):([d]{1,5})s/", $buf, $adres);
  81. $host = $adres[1];
  82. $port = $adres[2];
  83. fclose($fp);
  84. }
  85.  
  86. // Ustanawianie połączenia z serwerem GG
  87. $fp = fsockopen($host, $port, $errno, $errstr, 10);
  88. if (!$fp)
  89. {
  90. $error = "PROBLEM Z POLACZENIEM: $errno - $errstrnn";
  91. return false;
  92. }
  93. if (!$data = fread($fp, 12))
  94. {
  95. $error = "Polaczenie nieoczekiwanie zamknietenn";
  96. return false;
  97. }
  98.  
  99. // Pobieranie danych z serwera - odbiór klucza do wygenerowania hasha hasła
  100. $tab = unpack("Vtyp/Vrozmiar/Vklucz", $data);
  101. // obliczanie hasha hasła
  102. $hash = oblicz_hash($haslo_gg, $tab['klucz']);
  103. $data = pack("VVVVVVvVvVvCCa".strlen(""), GG_LOGIN60, 0x20 + strlen(""),
  104. $numer_gg, $hash, GG_STATUS_AVAIL, 0x20, 0, 0, 0, 0, 0, 0x14, 0xbe , "");
  105. // wysłanie hasha hasła
  106. fwrite($fp, $data);
  107. if (!$data1 = fread($fp, 8))
  108. {
  109. $error = "Nie rozpoznany bladn";
  110. return false;
  111. }
  112. $tab = unpack("Vlogin_status/Vrozmiar", $data1);
  113. if($tab['login_status'] != GG_LOGIN_OK)
  114. {
  115. $error = "Nie prawidłowe hasło...nn";
  116. return false;
  117. }
  118.  
  119. // Wysłanie listy kontaktów z jednym numerem
  120. $data = pack ("VVVC",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL);
  121. if(!fwrite($fp,$data))
  122. {
  123. $error = "Blad wysylania listy kontaktownn";
  124. return false;
  125. }
  126. // Odebranie pakietu ze specyfikacją następnego pakietu
  127. $data = fread($fp, 8);
  128. $tab = unpack("Vtyp/Vrozmiar", $data);
  129. // Pobranie pakietu opisu
  130. $data = fread($fp, $tab['rozmiar']);
  131. // Zamknięcie połączenia z serwerem
  132. fclose($fp);
  133. $tablica = unpack("Iuin/Cstatus/Iremoteip/Sremoteport/Cversion/Cimagesize/Cunknown/Cdescription_size/a*", $data);
  134. return $tablica[1];
  135. }
  136. ?>

poprawiłem kod , ale nie sprawdzałem:P
Go to the top of the page
+Quote Post
sagittariuspl
post
Post #35





Grupa: Zarejestrowani
Postów: 374
Pomógł: 3
Dołączył: 30.12.2006
Skąd: co skąd?

Ostrzeżenie: (10%)
X----


użyłem tego skryptu, ale nie działa. może jakieś sugestie?
Go to the top of the page
+Quote Post
Raynold
post
Post #36





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 12.01.2006

Ostrzeżenie: (0%)
-----


Żeby skrypt działał poprawnie, trzeba włączyć dyrektywę allow_url_fopen. Niestety, nie można tego zrobić poprzez php_ini() i trzeba ustawić to w pliku konfiguracyjnym php.ini lub httpd.conf. Jeśli korzystacie z jakiegoś darmowego konta, to nici - trzeba pogadać z adminem.

Oczywiście, może to być jeden z powodów. Żeby w ogóle sprawdzić, czy na tym polega problem, można wywołać funkcję phpinfo() i sprawdzić wartość allow_url_fopen, ewentualnie skorzystać z ini_get()

PS. Dotyczy to z pewnością tego sposobu przy pobieraniu statusu i używaniu własnych grafik. Nie wiem co z tym na początku tematu - czy tam też jest ten sam problem czy nie; nie testowałem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Raynold 9.01.2007, 05:25:33
Go to the top of the page
+Quote Post
krl_b
post
Post #37





Grupa: Zarejestrowani
Postów: 2
Pomógł: 1
Dołączył: 6.03.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


działało działało i przestało (IMG:http://forum.php.pl/style_emoticons/default/blink.gif)
Fatal error: Maximum execution time of 60 seconds exceeded in ... on line
w tej lini:
  1. <?php
  2. $data = fread($fp, 8);
  3. ?>

potem znów zadziałało pare razy (na localhoście) i po uploadzie padło na hoście w internecie (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif)
allow_url_fopen włączone na localu i w necie.

ktoś może coś poradzić?
Go to the top of the page
+Quote Post
suda
post
Post #38





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 8.01.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nigdy nie byłem dobry z wyrażeń ale preg z linii 80 wygląda tak:
  1. <?php
  2. preg_match("/s([d.]{8,16}):([d]{1,5})s/", $buf, $adres);
  3. ?>

a powinien wyglądać tak:
Kod
preg_match("/\s([\d.]{8,16}):([\d]{1,5})\s/", $buf, $adres);

ten highlighter forum przy PHP się coś kiełbasi i backslashe usuwa
Go to the top of the page
+Quote Post
mathewoosh
post
Post #39





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 12.04.2007

Ostrzeżenie: (0%)
-----


a jak mi pisze ze
Cytat
Nie rozpoznany blad
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) wszystkie dotychczasowe sprawy ujalem. na jednym serwerze wszystko chodzi ladnie i pieknie a na drugim niebardzo..

Ten post edytował mathewoosh 12.04.2007, 08:02:55
Go to the top of the page
+Quote Post
soon
post
Post #40





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 18.07.2007

Ostrzeżenie: (0%)
-----


Niestety poniższy kod nie zwraca mi żadnej wartości, nie wyświetla też żadnych błędów

  1. <?php
  2. /* Skrypt napisany w oparciu o klasę www2gg (http://gg.wha.la/)
  3.  * i opis protokołu GaduGadu z projektu EKG (http://dev.null.pl/ekg/docs/protocol.html)
  4.  * Kod można dowolnie wykorzystać pod warunkiem pozostawienia niniejszego koment
    arza
  5.  * Kod jest udostępniony na zasadach OpenSource.
  6.  *
  7.  * @author: Krzysztof Andrzej Błachut vel Bakus <bakus@idn.net.pl>
  8.  * @copyright: 2004-2005 by Krzysztof Andrzej Błachut vel Bakus
  9.  * @package: OpisGG
  10.  * @version: 1.0
  11.  */
  12.  
  13. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  14.  
  15. function oblicz_hash ($haslo, $klucz)
  16. {
  17. $x0=0; $x1=0; $y0=0; $y1=0; $z=0; $tmp=0;
  18. $y0 = ($klucz << 16) >> 16; $y1 = $klucz >> 16 ;
  19. for ($i=0; $i<strlen($haslo); $i++)
  20. {
  21. $x0 = ($x0 & 0xFF00) | ord($haslo[$i]); $x1 &= 0xFFFF;
  22. $y0 ^= $x0; $y1 ^= $x1;
  23. $y0 += $x0; $y1 += $x1;
  24. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  25. $y0 ^= $x0; $y1 ^= $x1;
  26. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  27. $y0 -= $x0; $y1 -= $x1;
  28. $x1 <<= 8; $x1 |= ($x0 >> 8); $x0 <<= 8;
  29. $y0 ^= $x0; $y1 ^= $x1;
  30. $z = $y0 & 0x1F;
  31. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  32. if ($z <= 16)
  33. {
  34. $tmp= ($y1 << $z) | ($y0 >> (16-$z));
  35. $y0 = ($y1 >> (16-$z)) | ($y0 << $z);
  36. $y1 = $tmp;
  37. }else{
  38. $tmp= $y0 << ($z-16);
  39. $y0 = ($y0 >> (32-$z)) | ( (($y1 << $z) >> $z) << ($z-16) );
  40. $y1 = ($y1 >> (32-$z)) | $tmp;
  41. }
  42. $y0 &= 0xFFFF; $y1 &= 0xFFFF;
  43. }
  44. $hash = hexdec(sprintf("%04x%04x", $y1, $y0));
  45. settype($hash, 'integer');
  46. return $hash;
  47. }
  48.  
  49. /* Funkcja pobiera z serwera GaduGadu opis dla podanego numeru.
  50.  *
  51.  * @param int Numer GG "bramki"
  52.  * @param string Hasło GG "bramki"
  53.  * @param int Numer GG, którego opis funkcja ma pobrać
  54.  * @param var Zmienna w której umieszczony będzie ewentualny komunikat błędu
  55.  * @return mixed Zawiera Opis numeru GG, lub false w przypadku błędu
  56.  */
  57. function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error)
  58. {
  59. // Ustawianie stałych na potrzeby protokołu
  60. define("GG_LOGIN60", 0x0015);
  61. define("GG_STATUS_AVAIL",  0x0002);
  62. define("GG_LOGIN_OK", 0x0003);
  63. define("GG_NOTIFY",  0x0010);
  64. define("GG_USER_NORMAL", 0x0003);
  65.  
  66. $fp = fsockopen( "appmsg.gadu-gadu.pl", 80, $errno, $errmsg, 3 );
  67. if (!$fp)
  68. {
  69. $error = "BRAK POLACZENA Z APPMSG.GADU-GADU.PL, MOZE BYC PRZECIAZONY: " . $errno . " - " . $errstr . "n";
  70. return false;
  71. }else{
  72. $get = "GET /appsvc/appmsg.asp?fmnumber=<$numer_gg> HTTP/1.0rn";
  73. $get.= "Host: appmsg.gadu-gadu.plrn";
  74. $get.= "User-Agent: Mozilla/4.7 [en] (Win98; I)rn";
  75. $get.= "Pragma: no-cachernrn";
  76. fputs($fp, $get);
  77. fgets($fp, 128);
  78. fgets($fp, 128);
  79. $buf = fgets($fp, 128);
  80. preg_match("/s([d.]{8,16}):([d]{1,5})s/", $buf, $adres);
  81. $host = $adres[1];
  82. $port = $adres[2];
  83. fclose($fp);
  84. }
  85.  
  86. // Ustanawianie połączenia z serwerem GG
  87. $fp = fsockopen($host, $port, $errno, $errstr, 10);
  88. if (!$fp)
  89. {
  90. $error = "PROBLEM Z POLACZENIEM: $errno - $errstrnn";
  91. return false;
  92. }
  93. if (!$data = fread($fp, 12))
  94. {
  95. $error = "Polaczenie nieoczekiwanie zamknietenn";
  96. return false;
  97. }
  98.  
  99. // Pobieranie danych z serwera - odbiór klucza do wygenerowania hasha hasła
  100. $tab = unpack("Vtyp/Vrozmiar/Vklucz", $data);
  101. // obliczanie hasha hasła
  102. $hash = oblicz_hash($haslo_gg, $tab['klucz']);
  103. $data = pack("VVVVVVvVvVvCCa".strlen(""), GG_LOGIN60, 0x20 + strlen(""),
  104. $numer_gg, $hash, GG_STATUS_AVAIL, 0x20, 0, 0, 0, 0, 0, 0x14, 0xbe , "");
  105. // wysłanie hasha hasła
  106. fwrite($fp, $data);
  107. if (!$data1 = fread($fp, 8))
  108. {
  109. $error = "Nie rozpoznany bladn";
  110. return false;
  111. }
  112. $tab = unpack("Vlogin_status/Vrozmiar", $data1);
  113. if($tab['login_status'] != GG_LOGIN_OK)
  114. {
  115. $error = "Nie prawidłowe hasło...nn";
  116. return false;
  117. }
  118.  
  119. // Wysłanie listy kontaktów z jednym numerem
  120. $data = pack ("VVVC",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL);
  121. if(!fwrite($fp,$data))
  122. {
  123. $error = "Blad wysylania listy kontaktownn";
  124. return false;
  125. }
  126. // Odebranie pakietu ze specyfikacją następnego pakietu
  127. $data = fread($fp, 8);
  128. $tab = unpack("Vtyp/Vrozmiar", $data);
  129. // Pobranie pakietu opisu
  130. $data = fread($fp, $tab['rozmiar']);
  131. // Zamknięcie połączenia z serwerem
  132. fclose($fp);
  133. $tablica = unpack("Iuin/Cstatus/Iremoteip/Sremoteport/Cversion/Cimagesize/Cunknown/Cdescription_size/a*", $data);
  134. return $tablica[1];
  135. }
  136.  
  137. echo 'Opis: '.get_gg_status("xxx", "xxx", "4437900", $error).'<br />';
  138. ?>
Go to the top of the page
+Quote Post
mekeke2
post
Post #41





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.10.2007

Ostrzeżenie: (0%)
-----


jesli ni pokazuje ci opisu sprobuj recznie wklepac numer serwera z ktorym ma sie laczyc. Umnie to zadzialalo mam jedynie klopot z kodowaniem polskich znaków
Go to the top of the page
+Quote Post
Trojan
post
Post #42





Grupa: Zarejestrowani
Postów: 53
Pomógł: 10
Dołączył: 17.01.2008

Ostrzeżenie: (0%)
-----


U mnie pomogło:

Cytat(suda @ 27.03.2007, 11:25:56 ) *
Nigdy nie byłem dobry z wyrażeń ale preg z linii 80 wygląda tak:
  1. <?php
  2. preg_match(&#092;"/s([d.]{8,16}):([d]{1,5})s/\", $buf, $adres);
  3. ?>

a powinien wyglądać tak:
Kod
preg_match("/\s([\d.]{8,16}):([\d]{1,5})\s/", $buf, $adres);

ten highlighter forum przy PHP się coś kiełbasi i backslashe usuwa
Go to the top of the page
+Quote Post
anty
post
Post #43





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 5.10.2007

Ostrzeżenie: (0%)
-----


mam problem z wyświetlaniem polskich znaków, każdy jest wyświetlany jako znak zapytania w rombie (albo coś w tym stylu). może rozwiązał ktoś już ten problem? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
icetab
post
Post #44





Grupa: Zarejestrowani
Postów: 226
Pomógł: 3
Dołączył: 3.04.2007

Ostrzeżenie: (50%)
XXX--


a jak zrobic zeby pobrac pare opisow
bo jak tak zrobie pare razy z roznymi nr gg do sprawdenia to skrypt mysli albo nie pokazuje :/
echo ''.get_gg_status("***", "**", "**", $error).'<br>';
echo ''.get_gg_status("***", "**", "**", $error).'<br>';
echo ''.get_gg_status("***", "**", "**", $error).'<br>';
Go to the top of the page
+Quote Post
chez
post
Post #45





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.06.2008

Ostrzeżenie: (0%)
-----


Witam,
troszkę zmodyfikowałem źródło na takie które działa, o to co wyszło:
Kod
<?php
    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;
    }
    function get_gg_status($numer_gg, $haslo_gg, $szukany_numer, &$error)
    {
        define("GG_LOGIN60",        0x0015);
        define("GG_STATUS_AVAIL",   0x0002);
        define("GG_LOGIN_OK",        0x0003);
        define("GG_NOTIFY",         0x0010);
        define("GG_USER_NORMAL",    0x0003);
        $fp = fsockopen("91.197.13.24", 8074, $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;
        }
        $tab = unpack("Vtyp/Vrozmiar/Vklucz", $data);
        $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 , "");
        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;
        }
        $data = pack ("VVVC",GG_NOTIFY, 5, $szukany_numer, GG_USER_NORMAL);
        if(!fwrite($fp,$data))
        {
            $error = "Blad wysylania listy kontaktow\n\n";
            return false;
        }
        $data = fread($fp, 8);
        $tab = unpack("Vtyp/Vrozmiar", $data);
        $data = fread($fp, $tab['rozmiar']);
        fclose($fp);
        $tablica = @unpack("Iuin/Cstatus/Iremoteip/Sremoteport/Cversion/Cimagesize/Cunknown/Cdescription_size/a*", $data);
        return $tablica[1];
    }
    
    function getOpis($numerBramki, $hasloBramki, $numerSpr){
            $dostepny = '<img src="http://www.gadu-gadu.pl/users/status.asp?id='.$numerSpr.'&styl=3">';
        if (get_gg_status($numerBramki, $hasloBramki, $numerSpr, $error) == '')
        {
            $getOpis = '';
        } else {
            $getOpis = 'Z opisem: '.get_gg_status($numerBramki, $hasloBramki, $numerSpr, $error);
        }
            $opis = 'W tej chwili jestem: '.$dostepny.' <br /> '.$getOpis.'<br />';
            return $opis;
        }


?>



Sposób użycia:
Kod
echo getOpis('numer_bramki', 'haslo_bramki', 'nr_gg_do_sprawdzenia');



Źródło dostępne również pod adresem:
http://chez.ovh.org/opis.phps
Go to the top of the page
+Quote Post
dadexix
post
Post #46





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Dobry, akurat czegoś takiego potrzebuje, ale wywala mi:
Cytat
Warning: fsockopen() [function.fsockopen]: unable to connect to 91.197.13.24:8074 (Connection timed out) in /home/a3880550/public_html/index.php on line 42

jak już wyczytałem, pewnie nie działa bo pozmieniali coś w gg... ale pytam - działa czy ja coś źle robie?

A jak nie działa, istnieje coś co działa?

Z góry, dzięki:))
Go to the top of the page
+Quote Post
sebxx4
post
Post #47





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 8.03.2020

Ostrzeżenie: (0%)
-----


Witam Panowie,
Wybaczcie proszę offtopic, ale potrzebuję aktualnej (działającej) wersji tego skryptu. Prosiłbym o podesłanie (IMG:style_emoticons/default/smile.gif)

Pozdrawiam.
Go to the top of the page
+Quote Post
Bakus
post
Post #48


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Jak mogłeś zauważyć ostatnia wiadomość w temacie miała miejsce 11 lat temu i dotyczyła problemów z funkcjonowaniem przedstawionego rozwiązania.
Obawiam się, że przez te 16 lat od kiedy pierwotny kod powstał, mogło mieć miejsce wiele zmian w funkcjonowaniu GG i jego protokołu - zwłaszcza, że po drodze zmienił się nie tylko komunikator ale i jego właściciel (IMG:style_emoticons/default/wink.gif)

Z tego co na szybko poszukałem, to biblioteka libgadu jest aktualizowana, więc w niej możesz szukać pomocy (IMG:style_emoticons/default/smile.gif)
https://github.com/wojtekka/libgadu
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 11:50