Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie informacji z phpbb
Forum PHP.pl > Forum > Przedszkole
Skr3czu
Witam,

Mam taki kod który pobiera informację z IPB, ale jak zrobić aby pobierał dane z phpbb 3 np. z forum.dobreprogramy.pl ?
  1. <?php
  2. $strona = 'http://forum.php.pl';
  3.  
  4. $data = file_get_contents($strona);
  5. preg_match_all('#<p class=\"members\">(.*?) postów | (.*?) użytkowników</p>#', $data, $wynik);
  6.  
  7. $posty = $wynik[1][0]; // liczba postów
  8. $uzytkownicy = $wynik[2][1]; // liczba użytkowników
  9.  
  10. echo 'Postów: '.$posty.' Użytkowników: '.$uzytkownicy;
  11.  
  12. ?>


Próbowałem kilka razy sam, ale za bardzo nie wiem jak to zrobić, może ktoś mi pomóc albo wytłumaczyć...
Trojan
  1. <?php
  2.  
  3. //adres strony
  4. $strona = 'http://forum.dobreprogramy.pl';
  5.  
  6. //pobieranie zrodla strony
  7. $data = file_get_contents($strona);
  8.  
  9.  
  10. /*
  11. rozbicie zrodla na tablice w miejscu '<h3>Statystyki</h3>'
  12. $data[0] <- żrodlo strony przed ciagiem znaków '<h3>Statystyki</h3>'
  13. $data[1] <- żrodlo strony za ciagiem znaków '<h3>Statystyki</h3>'
  14. */
  15. $data = explode('<h3>Statystyki</h3>',$data);
  16.  
  17.  
  18. /*
  19. rozbicie $data[1] na:
  20.  
  21. $data[1] = '1336252</strong> &bull; Wszystkich tematĂłw:'
  22. $data[2] = '194233</strong> &bull; Wszystkich uĹźytkownikĂłw:'
  23. $data[3] = '70092</strong> &bull; Ostatnio zarejestrowaĹ� siÄ�'
  24. */
  25. $data = explode('<strong>',$data[1]);
  26.  
  27. //teraz wystarczy tylko usunac to co znajduje sie za interesujaca nas liczba
  28.  
  29. //z $data[1] wybieramy ciag znaków znajdujacy sie przed '</strong>' i zapisujemy do zmiennej $posty
  30. $posty = explode('</strong>',$data[1]);
  31. $posty = $posty[0];
  32.  
  33. //z $data[2] wybieramy ciag znaków znajdujacy sie przed '</strong>' i zapisujemy do zmiennej $tematy
  34. $tematy = explode('</strong>',$data[2]);
  35. $tematy = $tematy[0];
  36.  
  37. //z $data[3] wybieramy ciag znaków znajdujacy sie przed '</strong>' i zapisujemy do zmiennej $users
  38. $users = explode('</strong>',$data[3]);
  39. $users = $users[0];
  40.  
  41. //wyswietlamy informacje
  42. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  43.  
  44. ?>


Ja bym to napisał tak.. Mam nadzieje ze załapiesz na jakiej zasadzie to działa i dasz rade napisać coś podobnego dla innej strony.

Powodzenia...
Crozin
  1. <?php
  2. $strona = 'http://forum.dobreprogramy.pl';
  3.  
  4. $data = file_get_contents($strona);
  5. preg_match_all('#<p>Wszystkich postów: <strong>([0-9]+)</strong>.*Wszystkich użytkowników: <strong>([0-9]+)</strong>#Usi', $data, $wynik);
  6.  
  7. $posty = $wynik[1][0]; // liczba postów
  8. $uzytkownicy = $wynik[2][1]; // liczba użytkowników
  9.  
  10. echo 'Postów: '.$posty.' Użytkowników: '.$uzytkownicy;
  11.  
  12. ?>
Albo spróbuj tak.
Skr3czu
Dzięki.

Ale jak zrobić jeszcze, aby pobierało z phpbb2 i phpbb by przemo ?
np. http://www.przemo.org/phpBB2/forum i http://www.phpbb2.pl/forum

Bo nadal nie nie mogę się połapać :/

Pozdrawiam.

Edit:
Kod Trojana bardziej mi odpowiada bo pokazuje ile jest tematów...
Trojan
http://www.przemo.org/phpBB2/forum
  1. <?php
  2. $strona = 'http://www.przemo.org/phpBB2/forum';
  3.  
  4. $data = file_get_contents($strona);
  5.  
  6. $data = explode('Nasi użytkownicy napisali ',$data);
  7.  
  8. $data = explode('<b>',$data[1]);
  9.  
  10. $posty = explode('</b>',$data[1]);
  11. $posty = $posty[0];
  12.  
  13. $tematy = explode('</b>',$data[2]);
  14. $tematy = $tematy[0];
  15.  
  16. $users = explode('</b>',$data[3]);
  17. $users = $users[0];
  18.  
  19. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  20.  
  21. ?>


http://www.phpbb2.pl/forum
  1. <?php
  2. //na tej stronie niema podanej ilości tematów
  3. $strona = 'http://www.phpbb2.pl/forum';
  4.  
  5. $data = file_get_contents($strona);
  6.  
  7. $data = explode('Nasi użytkownicy napisali ',$data);
  8.  
  9. $data = explode('<b>',$data[1]);
  10.  
  11. $posty = explode('</b>',$data[1]);
  12. $posty = $posty[0];
  13.  
  14. $users = explode('</b>',$data[2]);
  15. $users = $users[0];
  16.  
  17. echo 'postów: '.$posty.'<br>userow: '.$users;
  18.  
  19. ?>


Zobacz co pozmieniałem i na podstawie tego następny skrypt napisz sam... Prościej już sie chyba nie da wytłumaczyć haha.gif
Skr3czu
A jak zrobić, aby w IPB też pokazywało ile jest tematów ?
Cytat
<?php
$strona = 'http://forum.php.pl';

$data = file_get_contents($strona);
preg_match_all('#<p class=\"members\">(.*?) postów | (.*?) użytkowników<\/p>#', $data, $wynik);

$posty = $wynik[1][0]; // liczba postów
$uzytkownicy = $wynik[2][1]; // liczba użytkowników

echo 'Postów: '.$posty.' Użytkowników: '.$uzytkownicy;

?>

?

Tutaj nie ma ilości tematów... ;/ mój bład...
Trojan
już poprawiłem. forum źle zinterpretowało znaczniki html.... :/
Skr3czu
Próbuje z Mybb (pbelite.org) i tam mi jakoś nie wchodzi ;/

Możesz mi to ostatnie pomóc ?
Crozin
Polecam lekturę regexp" title="Zobacz w manualu PHP" target="_manual (albo kurs http://bedkowski.pl/a/php_regex/ ) bo to naprawdę nie są trudne rzeczy winksmiley.jpg

Do MyBB
  1. <?php
  2. preg_match('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+).*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $soruce, $wynik);
  3. ?>
Skr3czu
Crozin, nie działa... i jeszcze żeby pokazywało ile jest tematów...

Z innymi skryptami sobie poradziłem, ale z mybb mi nie działa ;/
Crozin
Jak nie działa jak działa tongue.gif
  1. <?php
  2.  
  3. error_reporting(E_ALL | E_STRICT);
  4.  
  5. $soruce = file_get_contents('http://pbelite.org');
  6.  
  7. preg_match('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+).*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $soruce, $matches);
  8.  
  9.  
  10. print_r($matches);
  11.  
  12. ?>
Wynik:
Kod
Array
(
    [0] => użytkownicy napisali 12,008 postów w 712 tematach.<br />
Razem mamy 1,866 zarejestrowanych
    [1] => 12,008
    [2] => 7
    [3] => 1,866
)
Skr3czu
mi coś nie działa ;/ możesz mi to wytłumaczyć jak zrobić w tym skrypcie:

  1. <?php
  2. $strona = 'http://www.przemo.org/phpBB2/forum';
  3.  
  4. $data = file_get_contents($strona);
  5.  
  6. $data = explode('Nasi użytkownicy napisali ',$data);
  7.  
  8. $data = explode('<b>',$data[1]);
  9.  
  10. $posty = explode('</b>',$data[1]);
  11. $posty = $posty[0];
  12.  
  13. $tematy = explode('</b>',$data[2]);
  14. $tematy = $tematy[0];
  15.  
  16. $users = explode('</b>',$data[3]);
  17. $users = $users[0];
  18.  
  19. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  20.  
  21. ?>
Crozin
Ale stosujesz to dla http://www.przemo.org/phpBB2/forum czy http://pbelite.org? Bo na pierwszym jest nieco inny kod winksmiley.jpg
  1. <?php
  2.  
  3. error_reporting(E_ALL | E_STRICT);
  4.  
  5. $source = file_get_contents('http://www.przemo.org/phpBB2/forum');
  6.  
  7. preg_match('#u.ytkownicy napisali <b>([0-9]+)</b> post.w, temat.w <b>([0-9]+)</b><br />Mamy <b>([0-9]+)</b>#Usi', $source, $matches);
  8.  
  9.  
  10. print_r($matches);
  11.  
  12. ?>
Skr3czu
Mi chodzi o PBelite.org czyli mybb i tylko to mybb mi nie działa... inne skrypty mi działają...

Więc jak zrobić z tym mybb ?
Crozin
http://crozin.com/~temp/forums.php
  1. <?php
  2.  
  3. header('Content-type: text/html; charset=utf-8');
  4. error_reporting(E_ALL | E_STRICT);
  5.  
  6. echo "<pre>Forum dobreprogramy.pl\n";
  7.  
  8. $source = file_get_contents('http://forum.dobreprogramy.pl');
  9. preg_match_all('#<p>Wszystkich postów: <strong>([0-9]+)</strong>.*tematów: <strong>([0-9]+)</strong>.*Wszystkich użytkowników: <strong>([0-9]+)</strong>#Usi', $source, $matches);
  10.  
  11. echo "\tPostów: " . $matches[1][0] . "\n\tTematów: " . $matches[2][0] . "\n\tUżytkowników: " . $matches[3][0];
  12. echo "\n\n\n=======================================\n\n\n";
  13.  
  14.  
  15.  
  16.  
  17. echo "Forum pbelite.org\n";
  18.  
  19. $source = file_get_contents('http://pbelite.org');
  20. preg_match_all('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+) tematach.*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $source, $matches);
  21.  
  22. echo "\tPostów: " . $matches[1][0] . "\n\tTematów: " . $matches[2][0] . "\n\tUżytkowników: " . $matches[3][0];
  23. echo "\n\n\n=======================================\n\n\n";
  24.  
  25.  
  26.  
  27.  
  28.  
  29. echo "Forum przemo.org\n";
  30.  
  31. $source = iconv('iso-8859-2', 'utf-8', file_get_contents('http://www.przemo.org/phpBB2/forum/'));
  32. preg_match_all('#tkownicy napisali <b>([0-9]+)</b> postów, tematów <b>([0-9]+)</b><br />Mamy <b>([0-9,]+)</b> zarejestrowanych u#Usi', $source, $matches);
  33.  
  34. echo "\tPostów: " . $matches[1][0] . "\n\tTematów: " . $matches[2][0] . "\n\tUżytkowników: " . $matches[3][0];
  35. echo "\n\n\n=======================================\n\n\n";
  36.  
  37.  
  38.  
  39.  
  40. echo "Forum php.pl\n";
  41.  
  42. $source = iconv('iso-8859-2', 'utf-8', file_get_contents('http://forum.php.pl/index.html'));
  43. preg_match_all('#ytkownicy napisali <b>([0-9 ]+)</b> postów<br />Mamy <b>([0-9 ]+)</b> zarejestrowanych u#Usi', $source, $matches);
  44.  
  45. echo "\tPostów: " . $matches[1][0] . "\n\tUżytkowników: " . $matches[2][0];
  46. echo "\n\n\n=======================================\n\n\n";
  47.  
  48. ?>
Skr3czu
Dzięki, ale nie o to mi chodziło

ja chce przez ten skrypt:
  1. <?php
  2. $strona = 'http://www.przemo.org/phpBB2/forum';
  3.  
  4. $data = file_get_contents($strona);
  5.  
  6. $data = explode('Nasi użytkownicy napisali ',$data);
  7.  
  8. $data = explode('<b>',$data[1]);
  9.  
  10. $posty = explode('</b>',$data[1]);
  11. $posty = $posty[0];
  12.  
  13. $tematy = explode('</b>',$data[2]);
  14. $tematy = $tematy[0];
  15.  
  16. $users = explode('</b>',$data[3]);
  17. $users = $users[0];
  18.  
  19. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  20.  
  21. ?>


Wyciągnąć informacje z mybb, ale nie mam pojęcia jak...

Odświeżam, może mi ktoś pomóc ?

Mam jeszcze taki kod:
  1. <?php
  2.  
  3. $source = file_get_contents('http://pbelite.org');
  4. preg_match_all('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+) tematach.*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $source, $matches);
  5.  
  6. $posty = $matches[1][0];
  7. $tematy = $matches[2][0];
  8. $uzytkownicy = $matches[3][0];
  9.  
  10. echo '<td bgcolor="#373737">'.$posty.'</td><td bgcolor="#373737">'.$tematy.'</td><td bgcolor="#373737">'.$users.'</td>';
  11.  
  12. ?>


ale też nie działa...
Crozin
Bo nie masz zmiennej $users - masz $uzytkownicy...

Po co ja na dwóch forach piszę/odpowiadam? tongue.gif
Skr3czu
Cytat
Bo nie masz zmiennej $users - masz $uzytkownicy...


Zmieniłem, ale nadal nic nie daje... biała strona.

Cytat
Po co ja na dwóch forach piszę/odpowiadam?


biggrin.gif
Trojan
w http://pbelite.org będzie trochę inaczej ponieważ wartości liczbowe nie są w znacznikach <b></b> lub coś w tym rodzaju.

Aby skrypt działał należy zmienić kodowanie na UTF-8

  1. <?php
  2. //adres strony
  3. $strona = 'http://pbelite.org';
  4.  
  5. //pobieranie zrodla strony
  6. $data = file_get_contents($strona);
  7.  
  8. /*
  9. wybieramy to co jest pomiędzy 'Nasi użytkownicy napisali ' i ' zarejestrowanych użytkowników.'
  10. w wyniku otrzymamy mniej wiecej cos takiego:
  11.  
  12. 12,030 postów w 712 tematach.
  13. Razem mamy 1,869
  14.  
  15. */
  16. $data = explode('Nasi użytkownicy napisali ',$data);
  17. $data = explode(' zarejestrowanych użytkowników.',$data[1]);
  18.  
  19. /*
  20. teraz w $data[0] mamy:
  21.  
  22. 12,030 postów w 712 tematach.
  23. Razem mamy 1,869
  24.  
  25. */
  26.  
  27. //bierzemy to co jest przed ' postów w ' i zapisujemy do zmiennej $posty
  28. $data = explode(' postów w ',$data[0]);
  29. $posty = $data[0];
  30.  
  31. /*
  32. w $data[1] mamy teraz to co jest po ' postów w ' czyli:
  33.  
  34. 712 tematach.
  35. Razem mamy 1,869
  36.  
  37. */
  38.  
  39. //bierzemy to co jest przed ' tematach.<br />' i zapisujemy do zmiennej $tematy
  40. $data = explode(' tematach.<br />',$data[1]);
  41. $tematy = $data[0];
  42.  
  43. /*
  44. w $data[1] mamy teraz to co jest po ' tematach.<br />' czyli:
  45.  
  46. Razem mamy 1,869
  47.  
  48. */
  49.  
  50. //bierzemy to co jest PO 'Razem mamy ' i zapisujemy do zmiennej $users
  51. $data = explode('Razem mamy ',$data[1]);
  52. $users = $data[1];
  53.  
  54. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  55. ?>
Crozin
Teraz jedynym powodem, dla którego może Ci nie działać może być inne kodowanie pbelite.org i skryptu php (w skutek czego polskie znaki w wyr.reg. moga "kolidować")

Zmień kodowanie $source tak jak to zrobiłem http://forum.php.pl/index.php?showtopic=94...mp;#post-472298 w przykładzie dla forum przemo.org
  1. <?php
  2. $source = iconv('KODOWANIE_pbelite', 'KODOWANIE_TWOJEJ_STRONY', file_get_contents('http://pbelite.org'));
  3. ?>
Skr3czu
Nie chce zmieniać kodowania stronki, więc jak do tego kodu:
  1. <?php
  2. //adres strony
  3. $strona = 'http://pbelite.org';
  4.  
  5. //pobieranie zrodla strony
  6. $data = file_get_contents($strona);
  7.  
  8. /*
  9. wybieramy to co jest pomiędzy 'Nasi użytkownicy napisali ' i ' zarejestrowanych użytkowników.'
  10. w wyniku otrzymamy mniej wiecej cos takiego:
  11.  
  12. 12,030 postów w 712 tematach.
  13. Razem mamy 1,869
  14.  
  15. */
  16. $data = explode('Nasi użytkownicy napisali ',$data);
  17. $data = explode(' zarejestrowanych użytkowników.',$data[1]);
  18.  
  19. /*
  20. teraz w $data[0] mamy:
  21.  
  22. 12,030 postów w 712 tematach.
  23. Razem mamy 1,869
  24.  
  25. */
  26.  
  27. //bierzemy to co jest przed ' postów w ' i zapisujemy do zmiennej $posty
  28. $data = explode(' postów w ',$data[0]);
  29. $posty = $data[0];
  30.  
  31. /*
  32. w $data[1] mamy teraz to co jest po ' postów w ' czyli:
  33.  
  34. 712 tematach.
  35. Razem mamy 1,869
  36.  
  37. */
  38.  
  39. //bierzemy to co jest przed ' tematach.<br />' i zapisujemy do zmiennej $tematy
  40. $data = explode(' tematach.<br />',$data[1]);
  41. $tematy = $data[0];
  42.  
  43. /*
  44. w $data[1] mamy teraz to co jest po ' tematach.<br />' czyli:
  45.  
  46. Razem mamy 1,869
  47.  
  48. */
  49.  
  50. //bierzemy to co jest PO 'Razem mamy ' i zapisujemy do zmiennej $users
  51. $data = explode('Razem mamy ',$data[1]);
  52. $users = $data[1];
  53.  
  54. echo 'postów: '.$posty.'<br>tematow: '.$tematy.'<br>userow: '.$users;
  55. ?>

dodać to:
  1. <?php
  2. $source = iconv('KODOWANIE_pbelite', 'KODOWANIE_TWOJEJ_STRONY', file_get_contents('http://pbelite.org'));
  3. ?>


aby już normalnie działało...
Crozin
  1. <?php
  2. $source = iconv('UTF-8', 'kodowanie_twojej_strony-zapewne: iso-8859-2', file_get_contents('http://pbelite.org'));
  3. preg_match_all('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+) tematach.*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $source, $matches);
  4.  
  5. $posty = $matches[1][0];
  6. $tematy = $matches[2][0];
  7. $uzytkownicy = $matches[3][0];
  8.  
  9. echo '<td bgcolor="#373737">'.$posty.'</td><td bgcolor="#373737">'.$tematy.'</td><td bgcolor="#373737">'.$uzytkownicy.'</td>';
  10.  
  11. ?>
Skr3czu
Wielkie dzięki działa winksmiley.jpg

Jeszcze jedno

Jak mam ten kod:
  1. <?php
  2. $source = iconv('UTF-8', 'kodowanie_twojej_strony-zapewne: iso-8859-2', file_get_contents('http://pbelite.org'));
  3. preg_match_all('#użytkownicy napisali ([0-9,]+) postów w ([0-9,]+) tematach.*Razem mamy ([0-9,]+) zarejestrowanych#Usi', $source, $matches);
  4.  
  5. $posty = $matches[1][0];
  6. $tematy = $matches[2][0];
  7. $uzytkownicy = $matches[3][0];
  8.  
  9. echo '<td bgcolor="#373737">'.$posty.'</td><td bgcolor="#373737">'.$tematy.'</td><td bgcolor="#373737">'.$uzytkownicy.'</td>';
  10.  
  11. ?>


To jak zrobić, aby informacje o ilości postów, tematów i użytkowników pobierały np. tylko o 00:00 ?

Bo jak pobiera od razu to strona za długo się wczytuje...
Crozin
Ale: kodowanie_twojej_strony-zapewne: iso-8859-2 miałeś zamienić na swoje kodowanie tongue.gif

Do tego, aby ten kod był uruchamiany tylko o północy wykorzystaj cron'a.
Skr3czu
Cytat(Crozin @ 19.05.2008, 08:36:06 ) *
Ale: kodowanie_twojej_strony-zapewne: iso-8859-2 miałeś zamienić na swoje kodowanie tongue.gif

Do tego, aby ten kod był uruchamiany tylko o północy wykorzystaj cron'a.


Tak zmieniłem już dawno, bo jak bym nie zmienił to by nie działało ;p

Czyli co dokładnie mam zrobić z tym cronem ?biggrin.gif
Crozin
Ale ani Google, ani forumowa szukajka, ani wikipedia nie są zamknięte.
Skr3czu
Cytat(Crozin @ 19.05.2008, 15:48:19 ) *
Ale ani Google, ani forumowa szukajka, ani wikipedia nie są zamknięte.

Gdy wchodzę na google.pl pisze "Hasło:", a nie wiem jakie jest ;p

Poszukałem, ale nic konkretnego nie znalazłem, możesz mnie trochę naprowadzić ? snitch.gif
Crozin
kilk
Skr3czu
Ale dalej nie wiem jak to dodać..., może mi ktoś dać jakiś przykład?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.