Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

trenutna temperatura parsher

[es] :: PHP :: trenutna temperatura parsher

[ Pregleda: 4357 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

novmar
student

Član broj: 221598
Poruke: 25
92.242.243.*



Profil

icon trenutna temperatura parsher10.11.2016. u 10:04 - pre 169 dana i 17h
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");
}    
?>
 
Odgovor na temu

Nemanja Avramović
Senior backend developer
Cloud Horizon
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4325
*.dynamic.isp.telekom.rs.

Sajt: avramovic.info


Profil

icon Re: trenutna temperatura parsher11.11.2016. u 21:59 - pre 168 dana i 5h
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"
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

novmar
student

Član broj: 221598
Poruke: 25
*.novi-net.net.



Profil

icon Re: trenutna temperatura parsher12.11.2016. u 14:19 - pre 167 dana i 13h
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"
 
Odgovor na temu

Nemanja Avramović
Senior backend developer
Cloud Horizon
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4325
*.dynamic.isp.telekom.rs.

Sajt: avramovic.info


Profil

icon Re: trenutna temperatura parsher13.11.2016. u 11:36 - pre 166 dana i 16h
Pa proveri ako je output samo "0" (bez "°C") onda reaguj, tj. odradi šta već treba u tom slučaju da se odradi.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

[es] :: PHP :: trenutna temperatura parsher

[ Pregleda: 4357 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.