Sivu 1/1

php fread ja tallennus ??

Lähetetty: 07 Huhti 2006, 14:24
Kirjoittaja riiali
Osaisko joku auttaa aloittelevaa php käyttäjää, että miten mä saan tallennettua tietiltä www-sivuilta aina tietyt tekstit esim .txt-tiedostoon helposti? Mulla on parikymmentä sivustoa, josta mun pitää päivittäin käydä pomimassa tietyt tiedot ja käsittääkseni se onnistuu php:llä suhteellisen helposti??

Lähetetty: 22 Huhti 2006, 04:18
Kirjoittaja Merri
file_get_contents lataa sivun suoraan tekstimuuttujaksi. Tämän jälkeen sivun tietoja täytyy parsia. Tämä puolestaan onnistuu helpoiten tutkimalla ladatun sivun koodista, millä hakusanalla saa rajattua halutun tiedon. Sivu voi olla vaikka tällainen:

Koodi: Valitse kaikki

<html><head><title>uutisia</title></head><body>
<h1>Sivukivaa</h1>
<table><tr><td>
<p>Kaikkea epäkivaa tarpeetonta.</p>
</td></tr></table>
<table><tr>
<td>Tämän</td>
<td>minä</td>
<td>haluan</td>
<td>talteen</td>
</tr><tr>
<td>Rivejä</td>
<td>on</td>
<td>tosiaan</td>
<td>useita</td>
</tr></table>
<table><tr><td>
<p>Tämä minä en halua</p>
</td></tr></table>
</body></html>
Tällöin ensimmäinen pois karsittava kohta on...

Koodi: Valitse kaikki

</td></tr></table>
<table>
<table>:n jälkeisen <tr>:n haluamme säilyttää, sillä haluamme mahdollisimman identtiset tiedot käsittelyn helpottamiseksi. Siten etsimme tuon yllä olevan tekstin (haussa täytyy olla mahd. paljon ylimääräistä ja varmasti muuttumatonta tietoa, ts. tageja), ja poistamme sen ja kaiken sitä edeltävän tiedon, tämä onnistuu esimerkiksi substr:llä.

Tämän jälkeen meidän täytyy poistaa lopustakin ei-tarpeellinen tieto. Tässä tapauksessa haku on helppo, yksinkertaisesti etsitään vain </table> ja poistetaan sen jälkeinen tieto. Tämän jälkeen meillä on jäljellä muodollisesti samanlaista dataa, joka on helppo jakaa osiin. str_replace:lla kannattaa tosin poistaa mm. rivinvaihdot sekä kaikki tarpeeton roska (jota ei tuossa yllä olevassa esimerkissä niin kauheasti ole). Tarkoituksena on, että muunnosten jälkeen on jäljellä parsimiskelpoista tietoa, joka voi olla esimerkiksi tällaisessa muodossa:

Tämän[[[]]]minä[[[]]]haluan[[[]]]talteen
Rivejä[[[]]]on[[[]]]tosiaan[[[]]]useita

Eli tässä on vaikka lisätty vielä rivinvaihdot jokaisen </td></tr>:n tilalle, poistettu <tr><td> -osuus ja sen jälkeen korvattu </td><td> muotoon [[[]]]. Sitten onkin jo helppo homma explodella hajoittaa tekstit ensin riveittäin arrayhyn ja sitten nämä rivit vielä explodettaa tuolla [[[]]]-pätkällä. Sitten voikin jo alkaa tallennella juttuja aivan minne haluaa.