Parse podatkov iz Arsove strani
16 naročnikov
16 naročnikov
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"> </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.
)
Arso ima za to poseben servis http://meteo.arso.gov.si/met/sl/service/. Bo verjetno lažje.
Lp,
Mitja
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];
?>
$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.
)
....
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