Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie danych ze strony- skrypt php
Forum PHP.pl > Forum > PHP
playlottoeu
Witam, wiem że ten temat był wielokrotnie poruszany, ale mam problem z pobraniem odpowiedniej treści:
mój kod wygląda tak:
  1. <?php
  2. require('simple_html_dom.php');
  3. $html = file_get_html("https://www.lottoland.pl/euromillions");
  4. echo $html->find(".amount",2)->innertext;
  5. ?>

wynik skryptu:
http://lottoonline.com.pl/index2.php

dane pochodzą z div'a z class="currentJackpot" a w nim span class="amount"
tylko amount występuje wiele razy na stronie i co kilka dni się zmienia kolejność i za każdym razem zwraca mi inną wartość, a ja chce konkretnie kwotę kumulacji gry euromilions
Proszę o podpowiedz jak to zrobić aby pobrane dane były zawsze z tego pola z kwotą kumulacji?

zrobiłem to również za pomocą innej metody:

  1. <?php
  2. $euromillions = file_get_contents('https://www.lottoland.pl/euromillions');
  3. preg_match_all('[<span class="amount">(.+?)<\/span>]', $euromillions, $kwota);
  4. print_r($kwota[0][0]);
  5. ?>


pokazuje oczekiwany przeze mnie wynik, ale co w przypadku jeśli amount zmieni swoja kolejność na stronie?
a trochę tego jest:
  1. Array ( [0] => Array ( [0] => 322 [1] => 2 [2] => 300 [3] => 250 [4] => 44 [5] => 322 [6] => 1,6 [7] => 86 [8] => 3 [9] => 11 [10] => 4,4 [11] => 34,2 [12] => 23,9 [13] => 580 [14] => 35 [15] => 7,2 [16] => 17,7 [17] => 146 [18] => 355,3 [19] => 59 [20] => 579 ) [1] => Array ( [0] => 322 [1] => 2 [2] => 300 [3] => 250 [4] => 44 [5] => 322 [6] => 1,6 [7] => 86 [8] => 3 [9] => 11 [10] => 4,4 [11] => 34,2 [12] => 23,9 [13] => 580 [14] => 35 [15] => 7,2 [16] => 17,7 [17] => 146 [18] => 355,3 [19] => 59 [20] => 579 ) )


i mam jeszcze jedno pytanie, bardzo ważne, jak można wykonać kod zapisany w polu formularza?
  1. <h4 class="font-30"><?php the_field('kwota_do_wygrania')?></h4>

mam pole "kwota do wygrania" i w nim wcześniej wpisywałem aktualne dane, teraz chciałbym wpisać tam kod skryptu loterii, aby WordPress automatycznie aktualizował te dane, ale jest problem ponieważ ten kod się nie wykonuje, występuje błąd.

pewnie związane jest to z funkcja the_field, ale jak to zrobić żeby wyświetlało wynik skryptu? Proszę o pomoc w rozwiązaniu problemu.
LowiczakPL
najpierw pobieraj "currentJackpot" a dopiero "amount" z jacpota
playlottoeu
Tylko jak to zrobić? Nie znam się wogóle na php z tym kodem walczyłem dość długo, a wyciągnięcie danych span z div to już problem...
LowiczakPL
sprawdziłem i okazuje się że
na stronie (w DOM) tych danych nie ma są dodane za pomocą JS
playlottoeu
da się to zrobić w jakiś inny sposób? albo z innej podstrony np:

  1. <?php
  2. $euromillions = file_get_contents('https://www.lottoland.pl/loterie');
  3. preg_match_all('[<span class="amount">(.*?)<\/span>]', $euromillions, $kwota);
  4. print_r($kwota);
  5. ?>


tu jest trochę łatwiej, ale nie wiem jak wyłapać kwotę z div lotteryName a następnie amount?

Jeśli ktoś czuje się w tym dobry to może coś takiego dla mnie napisać za odpowiednia opłatą, proszę o wiadomości na pm.
Pyton_000
  1. $tekst = file_get_content('https://www.lottoland.pl/euromillions');
  2. preg_match_all('/<h2>EuroMillions<\/h2>.*?"amount">(\d+)/', $text, $match);
playlottoeu
nie działa mi to w żaden sposob:

1.
  1. <?php
  2. $text = file_get_contents('https://www.lottoland.pl/euromillions');
  3. preg_match_all('/<div class="label">EuroMillions<\/div>.*?<span class="amount">(\d+)<\/span>/', $text, $match);
  4. print_r($match);
  5. ?>

2.
  1. <?php
  2. $text = file_get_contents('https://www.lottoland.pl/loterie');
  3. preg_match_all('/<span class="lotteryName">EuroMillions<\/span>.*?<span class="amount">(\d+)<\/span>/', $text, $match);
  4. print_r($match);
  5. ?>
LowiczakPL
na tej stronie https://www.lottoland.pl/loterie wynik jest w DOMie więc tu bez problemu tą pierwszą klasą do DOMa dasz radę

playlottoeu
Sam tego nie wykombinuje, dzięki za chęci.
LowiczakPL
To rozwiązanie, liczę że więcej nie trzeba rozpisywać i dasz sobie radę to obrobić

  1. require('simple_html_dom.php');
  2. $html = file_get_html("https://www.lottoland.pl/loterie");
  3.  
  4.  
  5. $get = $html->find('.lotteryTeaserBoxColumn');
  6.  
  7. foreach($get as $a) {
  8. $ret1 = str_get_html($a->innertext);
  9. $ret2 = $ret1->find('.lotteryName',0);
  10. $ret3 = $ret1->find('.amount',0);
  11. $title = $ret2->innertext;
  12. $kumulacja = $ret3->innertext;
  13. echo '<br>tytuł:'. $title. ', kumulacja: '.$kumulacja;
  14.  
  15. }
playlottoeu
  1. <?php
  2. require('simple_html_dom.php');
  3. $html = file_get_html("https://www.lottoland.pl/loterie");
  4. echo $html->find(".superEnalotto .amount",0)->innertext;
  5. ?>

wynik:
http://lottoonline.com.pl/superenalotto.php

działa już jak należy po prostu źle pobierana była klasa, głównym znacznikiem jest <a class=""></a> a następnie w nim amount
Proszę o pomoc w przełożeniu tego na ten kod bez wykorzystania pliku dom, aby nie martwic się czy plik jest na serwerze czy go nie ma.

  1. <?php
  2. $elGordo = file_get_contents('https://www.lottoland.pl/loterie');
  3. preg_match_all('[<a class="ajaxNavi lotteryTeaserBox elGordoPrimitiva page-link"><\/a> <span class="amount">(.*?)<\/span>]', $elGordo, $kwota);
  4. print_r($kwota);
  5. ?>

wynik:
http://lottoonline.com.pl/elgordo.php

Prosze o podpowiedz jak to naprawić aby działało jak powyższy kod.
LowiczakPL
odpaliłeś w ogóle ten kod, który Ci napisałem ?
playlottoeu
Jestem już na etapie aktualizacji danych w bazie WordPress, proszę podpowiedzcie mi co jest nie tak, że zwraca mi komunikat o tym rekord nie został dodany?

  1. <?php
  2. require('simple_html_dom.php');
  3. $superenalotto = file_get_html("https://www.lottoland.pl/loterie");
  4. $kwota = $superenalotto->find(".superEnalotto .amount",0);
  5. $kum1 = $kwota->innertext;
  6. if($kum1) {
  7. $connection = @mysql_connect('localhost', 'baza', '*****')
  8. or die('Brak połączenia z serwerem MySQL');
  9. $db = @mysql_select_db('baza', $connection)
  10. or die('Nie mogę połączyć się z bazą danych');
  11. $aktualizacja = @mysql_query("INSERT INTO lt_postmeta SET meta_id='484', post_id='47', meta_key='kwota_do_wygrania', meta_value='$kum1'");
  12. if($aktualizacja) echo "Rekord został dodany poprawnie";
  13. else echo "Błąd nie udało się dodać nowego rekordu";
  14. mysql_close($connection);
  15. }
  16. ?>
  17.  


tak wygląda tabela

Pyton_000
http://php.net/manual/en/function.mysql-error.php
playlottoeu
  1. <?php
  2. require('simple_html_dom.php');
  3. $loterie = file_get_html("https://www.lottoland.pl/loterie");
  4. $superenalotto = $loterie->find(".superEnalotto .amount",0);
  5. $kum1 = $superenalotto->innertext;
  6. $elgordo = $loterie->find(".elGordoPrimitiva .amount",0);
  7. $kum2 = $elgordo->innertext;
  8.  
  9. if($loterie) {
  10. $connection = @mysql_connect('localhost', 'baza', '****')
  11. or die('Brak połączenia z serwerem MySQL');
  12. mysql_select_db('baza', $connection);
  13. echo mysql_errno($connection) . ": " . mysql_error($connection) . "\n";
  14. mysql_query("SET CHARSET utf8");
  15. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
  16. mysql_query("UPDATE lt_postmeta SET meta_value='$kum1 mln zł' WHERE meta_id='484'", $connection);
  17. mysql_query("UPDATE lt_postmeta SET meta_value='$kum2 mln zł' WHERE meta_id='466'", $connection);
  18. echo mysql_errno($connection) . ": " . mysql_error($connection) . "\n";
  19. mysql_close($connection);
  20. }


Wszystko już działa jak trzeba, pozdrawiam smile.gif

Witam, proszę o pomoc, bo napotkałem teraz problem związany z rożnymi kwotami kumulacji, np jest w Irish lotto 39,9 mln, a polskim lotto 6 mln, chciałbym teraz zmienić sposób prezentacji kwot, tzn. rozwinąć je o "zera" czyli 39 900 000 i 6 000 000 jak to zrobić żeby po odczytaniu danych przez "dom" skrypt automatycznie dodawał 5 albo 6 zer i usuwał przecinek? Ewentualnie zrobić tak, aby pobrane zostały tylko 2 lub 3 cyfry (są kumulacje po kilkaset milionów) przed przecinkiem wtedy z reszta nie powinno być problemu.
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.