Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pobieranie danych z innej strony
Forum PHP.pl > Forum > PHP
stan89
Wtam!

Jak w temacie ćwiczę pobieranie danych z jakiejś innej strony. Jako przykład napisałem prostą stronę z napisem i liczbą. Chcę, żeby kod znalazł tą liczbę i pobrał. Jeśli zamiast "^[a-z]+$" wpiszę czego konkretnie ma szukać jest ok. Czy w ogóle w dobrą stronę idę? Wiem, że są podobne tematy na forum i to na ich podstawie napisałem to:

Pozdrawiam!

<?php
$url="http://ja89.cba.pl/tekst.html";
$zawartosc = file_get_contents($url);

if(ereg("^[0-9]+$", $zawartosc, $kurs))
{
echo "<p>znaleziono: ";
echo $kurs[0];
echo '</p>';
}
else
{
echo '<p>nic nie znaleziono</p>';
};
?>[php]
NoWay
Z tego co wiem, to wyrażenie regularne powinno wyglądać tak:
/^[0-9]+$/
Czyli twój kod powinien wyglądać tak:
  1. <?php
  2. $url="http://ja89.cba.pl/tekst.html";
  3. $zawartosc = file_get_contents($url);
  4.  
  5. if(ereg("/^[0-9]+$/", $zawartosc, $kurs))
  6. {
  7. echo "<p>znaleziono: ";
  8. echo $kurs[0];
  9. echo '</p>';
  10. }
  11. else
  12. {
  13. echo '<p>nic nie znaleziono</p>';
  14. };
  15. ?>


Ale nie sprawdzałem tego, musisz sam zobaczyć.

Na przyszłość polecam pokazywanie kodu w znacznikach [PHP][/PHP]
fate
nie uywaj ereg tylko preg_match
stan89
Być może i tak powinien wyglądać, aczkolwiek błąd jest chyba gdzieś indziej. Poprawiłem i nie działa.
NoWay
I tak jak kolega wyżej napisał, spróbuj z funkcją preg_match() bądź preg_match_all(). Gdzieś miałem nawet napisany taki właśnie skrypt, tylko on wyszukuje danego wyrażenia regularnego w tekście, który podaje w textboxie.
by_ikar
Daszek ^ oznacza początek ciągu, a znak dolara $ jego koniec. Czyli według tego wyrażenia ma dopasować wszystkie cyfry do ciągu który składa się TYLKO z cyfr. W przeciwnym razie nic nie zostaje dopasowane i nic ci nie zwraca.
stan89
Niestety. Już nawet wcześniej próbowałem preg_match i też nic. No ale dzięki za podpowiedzi!

by_ikar

if(eregi("5", $zawartosc, $kurs)) - eregi lub preg_match
funkcja eregi wyszukuje po całym tekście tylko tej jednej wartości, ale jeżeli dam "/^[0-9]+$/" to cały tekst musi być dopasowany do tego wyrażenia jeśli rozumiem?
Czyli jeżeli na mojej stronie jako tekst dam jedna cyfrę to powinno mi zadziałać? No chyba nie bo też nie działa.
NoWay
Masz tutaj taki prosty skrypt:
  1. <?php
  2.  
  3. if (isset($_GET['check']))
  4. {
  5. $check = 0;
  6. $tekst = $_POST['tekst'];
  7. $sprawdzanie = '/.....\\-.....\\-...../';
  8. preg_match_all($sprawdzanie, $tekst, $wyniki);
  9. for ($a=0; $a<count($wyniki[0]);$a++)
  10. {
  11. echo $wyniki[0][$a] . '<br>';
  12. }
  13. $checked = array_unique($wyniki[0]);
  14. for ($b=0; $a < count($checked); $b++)
  15. {
  16. if ($checked[$b] == '')
  17. {
  18. $check = 1;
  19. }
  20. }
  21. if ($check == 1)
  22. {
  23. echo '<br><br><br><br>Wyrażenie sie powtarzalo!';
  24. }
  25. else
  26. {
  27. echo '<br><br><br><br>Wszystko było ok!';
  28. }
  29. }
  30. else
  31. {
  32. ?>
  33. <form action="check.php?check=1" method="post">
  34. <textarea rows="60" cols="200" name="tekst"></textarea>
  35. <br>
  36. <input type="submit" value="Wyslij"/>
  37. </form>
  38. <?php
  39. }
  40.  
  41. ?>


Sprawdza czy w tekscie pobranym z textboxa jest wyrażenie regularne zawarte w zmiennej $sprawdzanie. Póki co jest tam ustawione w sumie byle co. Możesz go sobie zmodyfikować do własnych potrzeb.
stan89
Ok, dzięki! Będę patrzeć!
by_ikar
@NoWay tutaj nie chodzi o samo użycie preg_match czy innej funkcji, tylko o nie poprawne wyrażenie. Tak @stan89, to wyrażenie działa tylko wtedy kiedy dana strona zwraca tylko cyfry, a tam przecież (w tym linku co podałeś przynajmniej) jest też kod html, więc to wyrażenie niczego nie złapie i nic ci nie zwróci. Pokaż stronę z której chcesz wybrać dane i powiedz jakie dane chcesz wybrać. Prościej jest to zrobić za kogoś niż wytłumaczyć zasadę działania wyrażeń regularnych, z czym ma problem masa ludzi.
stan89
by_ikar
W kodzie php dałem link do pustej strony html na której jest tylko napis - 'cwiczenie 5'. Jeśli możesz to napisz jak by to wyglądało, żeby z tej strony pobrał mi te 5.
W ogóle to mam jakieś takie zadanie, żeby pobrać kurs złotówki z np.https://www.google.com/finance?q=PLNUSD, potem kurs rubla, i jeszcze jakieś obliczenia na tym robić ale chciałem zaczać od czegoś wręcz banalnego.

Pozdrawiam!
by_ikar
Akurat serwer do hostowania tego typu rzeczy wybrałeś bardzo zly, dokleją ci tam masę kodu dlatego też masz problemy. W przypadku twojej strony było by to mniej więcej coś takiego:

  1. <?php
  2.  
  3. $result = file_get_contents('http://ja89.cba.pl/tekst.html');
  4.  
  5. preg_match('/cwiczenie\s([0-5]+)/', $result, $matches);
  6.  
  7. echo '<pre>'.print_r($matches, true).'</pre>';


jeżeli chciałbyś pobrać numer ćwiczenia. W przypadku kursu walut, ten html jest tam trochę bardziej skomplikowany i najlepiej byłoby dobrać się do tego za pomocą jakiejś biblioteki do poruszaniu się w drzewie DOM, ale można to też zrobić za pomocą wyrażenia:

  1. <?php
  2.  
  3. $result = file_get_contents('https://www.google.com/finance?q=PLNUSD');
  4.  
  5. preg_match('#<span class=bld>([\d]+)[^<]+</span>#', $result, $matches);
  6.  
  7. echo '<pre>'.print_r($matches, true).'</pre>';


PS do poćwiczenia wyrażeń są odpowiednie strony, jak np ta: http://www.regexr.com/ z tym że na tego typu stronach przeważnie implementacje javascriptowego regexa, więc przewidywania nie będą tam dostępne, ale i tak większość ludzi nie używa tego, bo przeważnie wyrażenia używane są do banalnych rzeczy, jak wyciągniecie cyfer etc.
stan89
Ja już Ci wciskam, że pomogło(bo chyba takie tutaj są zwyczaje). Gdybyś mi tylko jeszcze napisał czy class=bld to jest coś w rodzaju dziedziczenia?
Napewno będę nad tym jeszcze przesiadywał a Regexr na pierwsze dwa rzuty oka wydaj się być bardzo rozgarniętą stroną headsetsmiley.png

Dzięki i pozdrawiam!
NoWay
to jest poprostu tekst, którego szukasz. Wyrażenie regularne, w którym jest takie coś. smile.gif to część tego wyrażenia.
by_ikar
Cytat(stan89 @ 15.08.2014, 00:13:40 ) *
Ja już Ci wciskam, że pomogło(bo chyba takie tutaj są zwyczaje). Gdybyś mi tylko jeszcze napisał czy class=bld to jest coś w rodzaju dziedziczenia?
Napewno będę nad tym jeszcze przesiadywał a Regexr na pierwsze dwa rzuty oka wydaj się być bardzo rozgarniętą stroną headsetsmiley.png

Dzięki i pozdrawiam!


To jest zwykły html (który nawet jest niepoprawny, dlatego nie ma tam apostrofów bo powinno być tak: class="bld", dlatego może nie mogłeś się dobrać, do wartości), a stronę którą ci podesłałem sam mam na pasku zakładek nie bez powodu wink.gif
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.