1
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Sähkönkulutuksen seurantaa PHP+cURL+AJAX
« : 30.10.12 - klo:10.34 »
Tarkoituksena on tehdä komentoriviltä käsin toimiva sovellus, joka hakee Elenian palvelimelta käyttöpaikan kulutustiedot.
Olen päässyt siihen saakka, että pääsen kirjautumaan ja hakemaan viimeisten päivien kokonaiskulutuksen:
Tämä tulostaa taulukon:
Nyt pitäisi keksiä, miten saan tietyn päivän tuntikohtaiset lukemat haettua. Tuo sivusto on varsin monimutkainen rakenteeltaan ja samaa sivua päivitetään käyttäjän tekemien pyyntöjen mukaan Ajaxilla. Tähän loppuukin sitten oma osaaminen. Jos haluan vaikkapa päivämäärän 25.10.2012 tuntiraportit, niin miten sen teen?
Tarkoituksena on sitten tehdä toinen sovellus, joka kerran päivässä hakisi tiedot ja analysoisi niitä sekä tarvittaessa hälyttäisi jos jotain poikkeavaa on tapahtunut, kuten jäänyt taas erillistilassa olevan pakastimen ovi raolleen pariksi viikkoa
Olen päässyt siihen saakka, että pääsen kirjautumaan ja hakemaan viimeisten päivien kokonaiskulutuksen:
Koodia: [Valitse]
<?php
$kayttajatunnus = "XXXXXXXXXXXXXXX";
$salasana = "XXXXXXXXXXXXXXX";
//kirjautumissivulle
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "keksi");
curl_setopt($ch, CURLOPT_URL,"https://vfonline.vattenfall.fi/main/default.asp");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "form=login&process=Login&pn=1&s_Event=cmdLogin&s_DynWindow=&Block=1&dataBase=1&CustId=$kayttajatunnus&pwd=$salasana");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$vastaus = curl_exec($ch);
//energiaraportointisivulle
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "keksi");
curl_setopt($ch, CURLOPT_URL,"https://vfonline.vattenfall.fi/main/default.asp?form=EnergyReports&process=EnergyReports&pstart=true");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
//etsitään uuteen ikkunaan avautuva linkki
$startsAt = strpos($out, "<script>openNewWindowAll('") + strlen("<script>openNewWindowAll('");
$endsAt = strpos($out, "');", $startsAt);
$result = substr($out, $startsAt, $endsAt - $startsAt);
//ladataan energiaraportin pääsivu
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "keksi");
curl_setopt($ch, CURLOPT_URL,"$result");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
//etsitään viimeisten päivien kulutustiedot
$word1 = 'Title="Aika:';
$word2 = '" alt=';
preg_match_all('/'.preg_quote($word1).'(.*?)'.preg_quote($word2).'/is', $out, $match);
//siistitään rivejä ja tulostetaan ne
foreach($match[1] as $child) {
$rivi = preg_replace("/[\r\n]+/", "\n", $child);
$rivi = preg_replace("/\s+/", ' ', $rivi);
echo "pvm:".$rivi."\n";
}
curl_close($ch);
?>
Tämä tulostaa taulukon:
Koodia: [Valitse]
pvm: 28.10.2012 Siirto: 0
pvm: 27.10.2012 Siirto: 2,46
pvm: 26.10.2012 Siirto: 4,4
pvm: 25.10.2012 Siirto: 3,75
pvm: 24.10.2012 Siirto: 4,42
pvm: 23.10.2012 Siirto: 5,22
Nyt pitäisi keksiä, miten saan tietyn päivän tuntikohtaiset lukemat haettua. Tuo sivusto on varsin monimutkainen rakenteeltaan ja samaa sivua päivitetään käyttäjän tekemien pyyntöjen mukaan Ajaxilla. Tähän loppuukin sitten oma osaaminen. Jos haluan vaikkapa päivämäärän 25.10.2012 tuntiraportit, niin miten sen teen?
Tarkoituksena on sitten tehdä toinen sovellus, joka kerran päivässä hakisi tiedot ja analysoisi niitä sekä tarvittaessa hälyttäisi jos jotain poikkeavaa on tapahtunut, kuten jäänyt taas erillistilassa olevan pakastimen ovi raolleen pariksi viikkoa
