[ novmar @ 10.11.2016. 10:04 ] @
Pozdrav,


imam dva problema sa PHP skriptom koju pokrećem na lokalnom pc-u (XAMPP Apache Servicu).
Skriptu pokrećem u Task Sheduleru te se spaja na html stranicu i vadi trenutnu temperaturu (npr. 1.6 °C), briše °C i zaokružuje na cijeli broj, to sve radi kako treba, ali...


1. Ako se ne može spojiti na web stranicu ili ako je došlo do promjene u strukturi stranice (tr[1]/td[2][@class]), baci mi error 0, a to mi prepoznaje kao 0 stupnjeva i napravi mi krivu radnju. Trebao bih, da ako je error da stopira skriptu.
2. Kod zokruživanja broja od -0,1 do -0,4 izbaci mi -0, a ja trebam 0.

Hvala

Code:
<?php

$html = file_get_contents("http://example.htm");
$temp_doc = new DOMDocument();
libxml_use_internal_errors(TRUE);

if(!empty($html)){

    $temp_doc->loadHTML($html);
    libxml_clear_errors();

    $temp_xpath = new DOMXPath($temp_doc);
    $temp_row = $temp_xpath->query("//tr[1]/td[2][@class]");

    if($temp_row->length > 0){
        foreach($temp_row as $row){
            $fp = fopen("example.txt", "w"); fwrite($fp, floatval(round($row->nodeValue))); fclose($fp);
            $temp_now = floatval(round($row->nodeValue));
            }
    }
}
$temp_now = floatval(round($row->nodeValue));

$minTemp = -16;
$maxTemp = 16;

if ($temp_now > $minTemp && $temp_now < $maxTemp) {
    copy("c:/" . $temp_now . ".txt", "c:/nesto/nesto.txt");

} else {
    copy("c:/nema.txt", "c:/nesto/nema.txt");
}    
?>
[ Nemanja Avramović @ 11.11.2016. 21:59 ] @
Nemoj da parsiraš HTML da izvlačiš podatke o temperaturi kad već imaš (besplatne) servise za vremensku prognozu koji ti pored temperature mogu dati još dosta informacija o vremenu. Pogledaj npr. https://openweathermap.org/api

Ako ovo sve radiš da bi učio parsiranje PHP-a uz pomoć DOMDocument klase, onda je ok. Što se tiče ostalih problema koje imaš:

1) Ne znam šta ti tačno znači "error 0" ali ako dobijaš neki output samo kao "0", proveri da li je taj output "0" i u tom slučaju prekini izvršavanje skripte. Ako stranica neće da se učita trebalo bi da to obradiš drugačije, odnosno nemoj sa file_get_contents() nego nađi neku biblioteku koja će da baci exception kada stranica ne može da se učita.
2) Isto tako, proveri ako je "-0" onda stavi da je samo "0"
[ novmar @ 12.11.2016. 14:19 ] @
hvala na pomoći.
treba mi isključivo samo jedna određena stranica, tako da ne mogu koristiti ni jednu drugu i treba mi samo trenutna temperatura.

uspio sam sa checkdnsrr provjeriti dostupnost stranice, i to radi.
stavio sam i da je "-0" = "0", i to je ok

još imam problem ako se u ostatku skripte dogodi neki error, output je "0".
Dal to mogu izbjeći sa exceptions (try, catch) i kako? Samo ne smijem imati "0"
[ Nemanja Avramović @ 13.11.2016. 11:36 ] @
Pa proveri ako je output samo "0" (bez "°C") onda reaguj, tj. odradi šta već treba u tom slučaju da se odradi.