Parse podatkov iz Arsove strani

Kako bi s strani http://www.arso.gov.si/vode/podatki/stanje_voda.html dobil vrednosti: Vodostaj, pretok in temperatura za konkretno postajo (Soča Log Čezsoški) ?

Vrednosti bi se izpisale s pomočjo PHP modula v Joomli.

Verjetno bi se dalo z @preg_match in echo ukazom, samo ne vem kako bi zastavil celoten skript.

Tole je del izvorne kode kjer se nahajajo navedene 3 vrednosti:

<tr><td class="onlineimena">Soča - Log Čezsoški</td><td class="onlinedesno">79</td><td class="onlinedesno">13.9</td><td class="onlinedesno"> </td><td class="onlinedesno">9.1</td><td class="onlinedesno">4.</td></tr>

Kakšen namig ?

45 odgovorov

zelo na hitro:

$text = '<tr><td class="onlineimena">Soča - Log Čezsoški</td><td class="onlinedesno">79</td><td class="onlinedesno">13.9</td><td class="onlinedesno">&nbsp;</td><td class="onlinedesno">9.1</td><td class="onlinedesno">4.</td></tr>';
preg_match_all("/\">(.*?)<\/td/si", $text, $result);
print_r($result);

[1] => Array
(
[0] => Soča - Log Čezsoški
[1] => 79
[2] => 13.9
[3] =>  
[4] => 9.1
[5] => 4.
)

3

Arso ima za to poseben servis http://meteo.arso.gov.si/met/sl/service/. Bo verjetno lažje.

Lp,
Mitja

3

Arso ima za to poseben servis http://meteo.arso.gov.si/met/sl/service/. Bo verjetno lažje.

Ima, samo tam ne najdem podatkov o stanju voda ampak samo vremensko napoved.

Blackmamba, hvala za idejo, edino problem je da je na strani vrstic s podobno strukturo več (za vsako postajo po ena) Jaz bi rabil samo za navedeno (Soča - Log Čezsoški). Kako bi dobil samo podatke za to postajo ?

Sem sam nekaj po kmecko skupaj spravil. Takole zgleda in tudi deluje edino vrne samo 1. vrednost (vodostaj), ne vem pa kako bi izpisal se pretok in temperaturo.

<?php
preg_match_all("/Čezsoški<\/td><td class\=\"onlinedesno\">([0-9\.]*?)<\/td/si",file_get_contents('http://www.arso.gov.si/vode/podatki/stanje_voda.html'), $result);
echo "Vodostaj: ";
echo $result[1][0];
?>

<Offtopic>

inkanet: a delaš nov kajakaški portal ki bi zamenjal "pokojnega" mokr.si ?

$text = file_get_contents("http://www.arso.gov.si/vode/podatki/stanje_voda.html");

preg_match_all("/<table class\=\"online\">(.*?)<\/table>/si", $text, $result);

$table_1 = $result[1][0];
$table_2 = $result[1][1];

$tr_ji = explode("\n", $table_1);  //ker sta na strani 2 tabeli, si tukaj zberi iz katere hočeš podatke

$data = array();
foreach ($tr_ji as $key=>$tr){
    preg_match_all("/\">(.*?)<\/td/", $tr, $tmp);
    if(count($tmp[0])>0)
        $data[] = $tmp[1];
}

print_r($data);

Array
(
[0] => Array
(
[0] => Mura - Gornja Radgona
[1] => 105
[2] => 111
[3] => pada
[4] => 13.6
[5] => 4.
)

[1] => Array
    (
        [0] => Mura - Petanjci
        [1] => 178
        [2] => 127
        [3] => pada
        [4] => 13.8
        [5] => 6.
    )

....

4

Mene pa zanima, če znajo biti zaradi tega kakšni problemi pri ARSO?

Po moje veljajo enaka pravila kot za statisticni zavod (oz. vse institucije, ki se financirajo iz proracuna) ... Podatke je dovoljeno uporabljati ob navedbi vira, brez posebnih dovoljenj ...

Blackmamba

Hvala za pomoc, sedaj imam vse tri podatke (in malo vec znanja PHP-ja =)

Za parse podatkov za eno postajo sem uporabil tole kodo

$source=file_get_contents("http://www.arso.gov.si/vode/podatki/stanje_voda.html");
$patern='<\/td><td class\=\"onlinedesno\">';
preg_match_all("/Čezsoški$patern(.*?)$patern(.*?)$patern(.*?)$patern(.*?)$patern(.*?)<\/td><\/tr>/si",$source, $result);

$vodostaj=$result[1][0];
$pretok=$result[2][0];
$pada=$result[3][0];
$temperatura=$result[4][0];
$pretok2=$result[5][0];

Provincjalc

Offtopic - ne, se ne gre za kajakaski portal, bo pa sluzilo kot info za kajakase in raftarje.

Perun, G-force

Bom vprasal na ARSO in sporocim odgovor