Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobieranie danych z innej strony
Forum PHP.pl > Forum > Przedszkole
Izagra
Witam

Przeszukałam trochę forum i znalazłam kilka odpowiedzi z interesującym mnie zagadnieniem, aczkolwiek nie wiem czy będę sobie sama umiała z tym poradzić.
Robię poradnik dla pewnej gry online i potrzebuję do niego danych, np nazwy rang czy tam umiejętności....chodzi o to że w źródle strony pokazuje mi jedynie wartość wykonaną z bazy/pliku(?) i nie mogę się nigdzie doszukać tych informacji gdzie są zawarte i skąd się pobiera (przeszukałam wszystkie js), więc zapewne z bazy danych. Teraz pytanie jak się za to zabrać. Nie liczę na gotowe rozwiązanie, bo chciałabym się przy okazji i nauczyć nowych rzeczy, ale prosiłabym o takie nieco łopatologiczne wytłumaczenie lub naprowadzanie choćby na materiały (jak to umieścić, wykonać działanie).

Z góry dziękuję za poświęcenie mi jakże cennego czasu ;-)
d3ut3r
Tak na prawdę to nie bardzo rozumiem o co pytasz smile.gif jeżeli chcesz pobierać dane nie ze swojej bazy danych tylko z innej strony zainteresuj się rozszerzeniem CURL.
Izagra
Dokładnie. Chodzi o inna bazę na innej stronie gdyż brak kontaktu z kimkolwiek, aby to opracować w normalny cywilizowany sposób (-;
Jakbyś był miły naprowadzić mnie bardziej z tym CURLem na jakieś przykłady lub jakie jeszcze funkcje będą potrzebne żeby to ogarnąć w mojej głowie za jednym razem, bo asem w PHP nie jestem.
Dz.
d3ut3r
http://php.pl/Wortal/Artykuly/PHP/Bibliote...i-protokol-HTTP

Wszystko polega na tym, aby wykonać zapytanie do strony x w odpowiedzi dostajemy wygenerowany kod html, później możemy ten kod przetwarzać aby znaleźć tylko interesujące nas dane.

Gdy już uda Ci się wczytać zawartość zewnętrznej strony może Ci się przydać manual:

http://php.net/manual/en/book.dom.php

innym sposobem na dotarcie do danych są wyrażenia regularne.
Izagra
Jednak porwałam się na zbyt zaawansowaną wiedzę dla mnie.
No nic dzięki serdeczne i trzeba niestety zagryźć zęby.

Pozdrawiam

Edit: No dobra....walczę z tym dalej ;-)
Udało mi się odpalić wreszcie stronę za pomocą localhosta - problem polegał na ustawieniach w php.ini na localhost gdzie był średnik w cURL, który uniemożliwiał wykonanie tej funkcji.
Więc teraz czas na kolejny krok z analizą danych. Jakby co dam znać, buziaki *(-;


Jak na jedną zmarnowaną noc i pierwszą poważna styczność z kodowaniem - udało mi się wreszcie wyświetlić dane przy pomocy simple html dom.
Jeżeli ktoś by mógł przejrzeć kod i wytknąć błędy oraz co można uprościć to będę wdzięczna, bo póki co jestem jeszcze w tym zaawansowanie zielona, choć osiągam już poziom kum(k)ania:

  1. <?php
  2. include_once('simple_html_dom.php');
  3. function scraping_digg() {
  4.  
  5. $html = file_get_html('http://www.wawawars.pl/rating/clans');
  6.  
  7. foreach($html->find('table.list') as $article)
  8. {
  9. $item['1'] = trim($article->find('span.clan-name',0)->plaintext);
  10. $item['2'] = trim($article->find('span.clan-name',1)->plaintext);
  11. $item['3'] = trim($article->find('span.clan-name',2)->plaintext);
  12. $item['4'] = trim($article->find('span.clan-name',3)->plaintext);
  13. $item['5'] = trim($article->find('span.clan-name',4)->plaintext);
  14. $ret[] = $item;
  15. }
  16.  
  17. $html->clear();
  18. unset($html);
  19. return $ret;
  20. }
  21.  
  22. ini_set('user_agent', 'My-Application/2.5');
  23. $ret = scraping_digg();
  24.  
  25. foreach($ret as $v) {
  26. echo '<b>Top 5</b><br>';
  27. echo $v['1'];
  28. echo '<br>';
  29. echo $v['2'];
  30. echo '<br>';
  31. echo $v['3'];
  32. echo '<br>';
  33. echo $v['4'];
  34. echo '<br>';
  35. echo $v['5'];
  36. }
  37.  
  38. ?>


ad.1 Trochę mam teraz bolączkę jak wyświetlić obok pobieranej nazwy obrazek który jest tej nazwie przypisany....

  1. <span class="clan-name"><i class="resident" title="Mieszkaniec"></i><img src="/@images/clan/clan_18_ico.png" class="clan-icon" title="BROWAR"><a href="/clan/18/">BROWAR</a><span class="level">&nbsp;[2]</span></span>


Teoretycznie każdy będzie miał inną nazwę i jest przypisany do danej nazwy....i cholera wie jak to ruszyć.

ad.2 Czy za pomocą tej biblioteki można wyciągnąć dane? Np: stara wyga - jaka składnia by za to odpowiadała jeżeli za pomocą tego DOMa dało by radę?

  1. <div class="bar"><div><div class="percent" style="width: 30%;"></div></div></div>
  2. <div class="rank">Ranking: Stara wyga</div>
d3ut3r
co do 2 problemu to ten kod działa, sama funkcja DOMinnerHTML wzięta ze StackOverlow:

  1. function DOMinnerHTML($element)
  2. {
  3. $innerHTML = "";
  4. $children = $element->childNodes;
  5. foreach ($children as $child)
  6. {
  7. $tmp_dom = new DOMDocument();
  8. $tmp_dom->appendChild($tmp_dom->importNode($child, true));
  9. $innerHTML.=trim($tmp_dom->saveHTML());
  10. }
  11. return $innerHTML;
  12. }
  13.  
  14.  
  15. $text='<div class="bar"><div><div class="percent" style="width: 30%;"></div></div></div>
  16. <div class="rank">Ranking: Stara wyga</div>';
  17.  
  18. $dom = new DOMDocument;
  19. $dom->loadHTML($text);
  20.  
  21. $el=$dom->getElementsByTagName("div");
  22.  
  23. if ($el->length>0){
  24.  
  25. foreach ($el as $div){
  26.  
  27. $classes=explode(' ',$div->attributes->getNamedItem('class')->nodeValue);
  28. if (in_array('rank',$classes)){
  29. echo str_replace('Ranking:','',DOMinnerHTML($div));
  30. }
  31.  
  32. }
  33.  
  34. }


co do obrazka to w sumie na tej samej zasadzie co kod powyżej:

  1. $text='<span class="clan-name"><i class="resident" title="Mieszkaniec"></i><img src="/@images/clan/clan_18_ico.png" class="clan-icon" title="BROWAR"><a href="/clan/18/">BROWAR</a><span class="level"> [2]</span></span>';
  2.  
  3. $dom = new DOMDocument;
  4. $dom->loadHTML($text);
  5.  
  6. $el=$dom->getElementsByTagName("img");
  7.  
  8. if ($el->length>0){
  9.  
  10. foreach ($el as $img){
  11.  
  12. $src=$img->attributes->getNamedItem('src')->nodeValue;
  13.  
  14. //lub
  15. //$src='http://host.pl/'.$img->attributes->getNamedItem('src')->nodeValue;
  16.  
  17. echo $src;
  18.  
  19. }
  20.  
  21. }

Izagra
OK z samym wyświetlaniem idzie mi już coraz lepiej. Nurtuje mnie tylko już ostatnie zagadnienie - czy idzie jakoś doszukać się zapisanej tablicy z wszystkimi danymi. Jeżeli wyświetla mi np "styczeń" na stronie z bazy, gdzie są zapisane wszystkie nazwy danych miesięcy - to idzie się doszukać tej tablicy? Żeby zobaczyć jakie nazwy są w niej zapisane czyli styczeń, luty, marzec, itd... Wtedy znając nazwy mogę np je opisać, bo inaczej żeby poznać kolejną np miesiąc czyli kolejny luty - musiałabym czekać do lutego żeby wiedzieć że będzie następny. Czy to już trzeba mieć dostęp do takiej bazy danych z loginem i hasłem? Choć te dane mogły by być również w jakimś pliku tekstowym....po takim "styczniu" idzie się doszukać odwołania skąd no i jakie tam są zawarte nazwy?

Dzięki i już nie męczę ;-]
d3ut3r
jeżeli czegoś nie ma w dokumencie który pobierasz to nie ma raczej opcji na odczytanie tego. Pozostaje próba kontaktu z adminem strony i dogadania się w sprawie współpracy.
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.