Moi,
Olen tekemässä palvelua, jossa keskeisessä roolissa on polttoaineen hinta. Tieto pitäisi kuitenkin hakea sivulta (http://polttoaine.net/index.php?t=PK-Seutu), jolla ei ole APIa. Tieto mikä pitäisi hakea, on Dieselin keskihinta. HTML:ssä tämä on:
<tr class="bg1"><td class="Keskihinnat">Keskihinnat:</td><td class="Pvm"> </td><td class="Hinnat"><span style="background: #AEAEAE;">-</span>/<br />1.549</td><td class="Hinnat">1.608</td><td class="Hinnat">1.436</td></tr>
tuo viimeinen hinta, eli 1.436.
Miten tämän saisi järkevinten toteutettua? File_get_contentsilla saa koko sivun haettua muuttujaan, mutta pitäisi saada muuttujaan tuo 1.436.
Tuohon on monia tapoja. Yksi esimerkki, ei välttämättä se järkevin, mutta toimiva tässä tapauksessa:
$hinnat = '<tr class="bg1"><td class="Keskihinnat">Keskihinnat:</td><td class="Pvm"> </td><td class="Hinnat"><span style="background: #AEAEAE;">-</span>/<br />1.549</td><td class="Hinnat">1.608</td><td class="Hinnat">1.436</td></tr>'; if(preg_match_all("/[0-9]{1}\.[0-9]{3}/", $hinnat, $diesel, PREG_SET_ORDER)) { print_r ($diesel[2][0]); }
jaketsu kirjoitti:
Tuohon on monia tapoja. Yksi esimerkki, ei välttämättä se järkevin, mutta toimiva tässä tapauksessa:
$hinnat = '<tr class="bg1"><td class="Keskihinnat">Keskihinnat:</td><td class="Pvm"> </td><td class="Hinnat"><span style="background: #AEAEAE;">-</span>/<br />1.549</td><td class="Hinnat">1.608</td><td class="Hinnat">1.436</td></tr>'; if(preg_match_all("/[0-9]{1}\.[0-9]{3}/", $hinnat, $diesel, PREG_SET_ORDER)) { print_r ($diesel[2][0]); }
Jes, kiitos. Mietinkin, että preg:llä tällainen onnistuisi, joskus olen sillä jotain tehnyt, mutta osaan käyttää sitä todella huonosti.
Sitten pitäisi saada tuo tietty rivi $hinnat-muuttujaan, miten?
Sekin onnistuu monella eri tavalla. Tässä malliksi yksinkertainen, ei yhtään tyylikäs eikä missään nimessä suositeltava mihinkään vakavasti otettavaan palveluun. Toimii nyt, mutta jos lähdekoodiin tulee sopivaan kohtaan pienikin muutos, niin lakkaa toimimasta. Eli tämä on siis ihan perinteinen purkkaviritys. Kannattaa tehdä toisin, tutustu esim. DOM-parserointiin, johon löytyy täältäkin opas .
$polttoaineet = implode('', file('http://polttoaine.net/index.php?t=PK-Seutu')); $start = strpos($polttoaineet, '<tr class="bg1"><td class="Keskihinnat">Keskihinnat:</td><td class="Pvm"> </td><td class="Hinnat">'); # halutaan hinnat tästä alkaen $end = strpos($polttoaineet, '<tr class="bg1"><td colspan="5" class="hinnat"><b>Espoo</b></td></tr>'); # ei haluta hintoja tämän jälkeen $hinnat = substr($polttoaineet, $start, $end - $start); # tallennetaan keskihinnat sisältävä pätkä muuttujaan if(preg_match_all("/[0-9]{1}\.[0-9]{3}/", $hinnat, $diesel, PREG_SET_ORDER)) { print_r ($diesel[2][0]); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.