Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedon hakeminen sivulta

mix [06.11.2014 11:31:12]

#

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">&nbsp;</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.

jaketsu [06.11.2014 20:44:45]

#

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">&nbsp;</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]);
	}

mix [07.11.2014 08:58:49]

#

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">&nbsp;</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?

jaketsu [07.11.2014 17:13:21]

#

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">&nbsp;</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]);
	}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta