Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Notowania giełdowe - dane z innej strony
Forum PHP.pl > Forum > PHP
superstrona
Witajcie.

Chcę na swojej stronie pobrać i wyświetlić aktualne notowanie jednej ze spółek na giełdzie. Znalazłem stronę, z której pobieram potrzebne mi dane - http://www.czasnazysk.pl/notowania/spolka/pgn Wykorzystuję do tego taki skrypcik:

  1. <?php
  2.  
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_URL, 'http://www.czasnazysk.pl/notowania/spolka/pgn');
  5. curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/");
  6. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8. curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
  9. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  10. curl_setopt($curl, CURLOPT_HEADER, 0);
  11. $strona = curl_exec($curl);
  12. curl_close($curl);
  13.  
  14. ?>


Wszystko ładnie śmiga, po wywołaniu zmiennej $strona wyświetla mi się zawartość żądanej strony (wiem, że można to zrobić inaczej, ale tu akurat użyłem curl-a). W treści strony fragment z którego chcę wydobyć dane wygląda tak:

  1. Ostatnia wartość: <span style="" id="kurs_PGN">3.78</span><br>
  2. Zmiana procentowa: <span style="" id="procent_PGN" class="red">-0.53%</span>



Wymyśliłem więc zapis preg_matach_all który (według mnie) pobiera wartość i zmianę procentową:

  1. preg_match_all('#<span id="kurs_PGN">([0-9 ]+\.[0-9]+)</span><br>Zmiana procentowa: <span id="procent_PGN" class="red">(-?[0-9]+\.[0-9]+%)</span>#i',
  2. $strona,$matches);


No i tu mi się inwencja kończy... Mam zatem prośbę o pomoc do was. Czy to dopasowanie jest dobre i czy pobierze mi żądane dane? No i jak wyświetlić to na stronie (bez żadnego formatowania, w osobnych liniach oddzielonych tylko <br>)?

Pomóżcie, będę wdzięczny smile.gif
wry
ja bym zrobil dwa dopasowania, tak zeby zawieraly jak najmniej kodu a jednoznacznie identyfikowaly dane,
pierwszy do popbrania wartosci, drugi do pobrania zmiany

  1. preg_match_all('/id="kurs_[^"]+">([^<]+)</', $i, $res1);
  2. preg_match_all('/id="procent_[^"]+" class="[^"]+">([^<]+)</', $i, $res2);


na wyjsciu masz dwie tablice jesli nic sie nei sypnelo beda tych samych rozmiarow i lecac indexami mozesz parowac ze soba wyniki (element o indexie 0 z tablicy $res1 bedzie wartoscia a element zerowy z tablicy $res2 bedzie zmiana procentowa itd)
superstrona
Daję kod:

  1. echo $res1[0];


i nic... tzn. pokazuje się Array i tyle... Chyba, że źle Cię zrozumiałem... wstydnis.gif
wry
tak bo tablica $res1 i $res2 sa dwuwymiarowe
za pomoca print_r($res1); mozesz sobie podgladnac cala strukture
echo $res1[1][0] zwroci pierwszy wynik, poczytaj sobie o funkcji array_pop w manualu
superstrona
Dzięki, działa smile.gif

Kod wygląda tak:

  1. preg_match_all('/id="kurs_[^"]+">([^<]+)</', $strona, $res1);
  2. preg_match_all('/id="procent_[^"]+" class="[^"]+">([^<]+)</', $strona, $res2);
  3.  
  4.  
  5. echo $res1[1][0];
  6.  
  7. echo $res2[1][0];


Musiałem zmienić tylko w dopasowaniu zmienną $i na $strona (bo w niej była treść strony). Poza tym wszystko w jak najlepszym porządku. Teraz czas na mnie by w wolnej chwili opanować dopasowania i wyrażenia regularne smile.gif Raz jeszcze dziękuję za pomoc.
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.