Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak za pomocą PHP pobrać źródło strony stworzonej w AJAX
Forum PHP.pl > Forum > PHP
tomtheman
Witam

Potrzebuję pobrać za pomocą skryptu PHP źródło strony, która jest napisana w AJAX-ie.
CURL i FILE_GET_CONTENTS nie zdają egzaminu, ponieważ pobierają źródło strony, które zostało wygenerowane przez serwer a ja chcę pobrać źródło tego co jest wyświetlane przez przeglądarkę.
Dla przykładu:

Dane, które otrzymuję po użyciu zarówno CURL jak i GET_FILE_CONTENTS wyglądają tak:

<td id="td_desertion"></td>

Natomiast wynik wyświetlany w przeglądarce wygląda tak:

<td>236</td>

i właśnie ten drugi próbuję bezskutecznie otrzymać.
Za wszelką pomoc będę wdzięczny.
Fifi209
Jakiś firebug i zobacz jakie żądania lecą do serwera i je odtwórz w curlu
kaem
Nie wiem czy to pomoże, ale weź pod uwagę, że przeglądarka wyświetla dane wygenerowane ( a raczej zwrócone) właśnie przez serwer. A potem już sama sobie 'mieli' css, js i wyświetla wynik, czyli wszystko po pobraniu danych od serwera dzieje się po stronie klienta(przeglądarki). Jeśli, np. w nagłówku strony jest bezwględny link do styli, to te style przy wyświetlaniu zostaną uwzględnione.
tomtheman
Jestem totalnie bezradny, więc podam co chcę zrobić.

mam taką stronkę:
http://clan.z8games.com/charstat_cf.aspx?usn=12093382

Tworzę statystyki i muszę pobrać dane ze strony. Wcześniej robiłem to bez problemu ale ostatnio admin strony przeszedł na ajaxa i się wszystko sypnęło.
Chodzi mi o to żeby wyciągnąć np. liczbę headshotów, która wyświetla się jako 8569 a w kodzie źródłowym jest jako id="td_headshots". Nie wiem jak ustanowić zapytanie żeby powiązać te dwie rzeczy w jedno i w wyniku otrzymać liczbę zamiast id.
Nie wiem kompletnie jak się do tego zabrać. Jak mnie ktoś naprowadzi to pewnie dalej już jakoś pójdzie.
!*!
Sprawdź do jakiego pliku odwołują się te żądania ajax (firebug w Fx, lub narzędzia developerskie opera,chrome) po czym pobierz dane dokładnie na tej samej zasadzie jak pobierałeś do tej pory.
tomtheman
Wysłany: Pon Wrz 26, 2011 12:15 pm Temat postu:

--------------------------------------------------------------------------------

Pobrałem dane, zdekodowałem ale w wyniku dostaję NULL, które według dokumentacji oznacza, że json nie może być zdekodowany lub gdy dane są głębiej niż limit rekurencji.
Czyli w tym przypadku oznacza to, że nie da się wyciągnąć danych czy trzyba użyć innego sposobu niż dekodowanie za pomocą json_decode?
Zrobiłem to tak:

  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, 'http://clan.z8games.com/clanServices.asmx/getPlayerPublicInfo');
  4. curl_setopt($ch, CURLOPT_POST, 1);
  5. curl_setopt($ch, CURLOPT_POSTFIELDS, '{"usn":12093382}');
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  7. $odebranytekst = curl_exec($ch);
  8. curl_close($ch);
  9. $dane = json_decode($odebranytekst,true);
  10. $headshoty = $dane["d"]["headshotKillCnt"];
  11. echo $headshoty;
  12. ?>


nospor
jejkus.... zanim zabierzesz się za json, to sprawdź, czy link, który zapodajesz w ogóle działa.....
Wstaw swój link do przeglądarki i zobacz jak wygląda ten Twój "JSON"

Albo najlepiej zrób:
var_dump($odebranytekst);
tomtheman
Po potraktowaniu firebugiem wyszło, że POST-em muszę przekazać dane {"usn":12093382} na adres http://clan.z8games.com/clanServices.asmx/...layerPublicInfo, więc tak to właśnie zrobiłem.
jak zarzucę var_dumpa na $odebranytekst tak jak mówiłeś to w wyniku dostaję: string(217)"Object move to here", gdzie here przekierowuje na errora 404
nospor
No, więc nic dziwnego, że odkodowanie JSON ci nie działa - od tak banalnych rzeczy trzeba zaczynać a nie szukać błędu nie wiadomo gdzie.

Pewnie na stronie jesteś zalogowany i ajax oczekuje od Ciebie zalogowania.
Zaś używając cURL się nie logujesz.

Może też być, że stronka sprawdza czy to ajax - musisz więc wysłać cURLem odpowiednie ajaxowe nagłówki.
tomtheman
Używając firebuga nie byłem zalogowany, więc to chyba nie to. Dane, które probuję pobrać są ogólnie dostępne.
Co do ajaxowych nagłówków to szczerze mówiąc nie mam pojęcia o czym mówisz :/
nospor
Po pierwsze:
curl_setopt($ch, CURLOPT_POSTFIELDS, array('usn'=>12093382));
Nie wiem skądżeś swój sposób na postfields wynalazł.

Po drugie:
zapodaj linka do strony gdzie jest ten ajax, co trzeba kliknąć by ten ajax poszedł, to się sprawdzi resztę.
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.