banansplitt™ Skrevet 27. mars 2012 Del Skrevet 27. mars 2012 (endret) Jeg har laget et værvarsel der jeg henter data fra yr.no og setter det inn i en database. Jeg henter og setter inn for 4 tidsperioder per dag i 4 dager fremover, inkludert dagen i dag. Altså totalt 16 rader med data. eksempel: man X X X X tir X X X X ons X X X X tor X X X X XML-varselet til yr.no fungerer sånn at første rad med data er den vi er i nå eller den neste (usikker på når de går videre til neste rad). I øyeblikket opererer de med den neste tidsperioden, altså 28.03 00.00-06.00. Jeg sjekker opp dette for at dataene som hentes inn plasseres i riktig rad. Problemet mitt er at alle radene blir oppdatert riktig, utenom første rad, som ikke blir oppdatert i det hele tatt. Noen som ser en logisk brist her? Jeg har nemlig sett meg blind. Funksjon med kommentarer: 1. Jeg henter XML-feeden fra yr og setter det inn i et array 2. Jeg setter nyttige variabler: dagens dato, morgendagens dato, starttidspunkt for første oppdatering fra XML-feed, og dato for første oppdatering fra XML-feed 3. Regner ut hvilken rad i databasen oppdateringene skal starte utifra hvilke data som er tilgjengelige gjennom XML-feeden fra yr. Hvis datoen i dag er den samme som første væroppdatering fra yr, så deler jeg starttidspunkt på 6 og plusser på 1, f.eks. 12:00 / 6 = 2 + 1, da vet jeg at den skal starte å oppdatere fra tredje rad, ettersom 12:00 er den tredje perioden første dag. Om datoen i dag ikke er den samme som første oppdatering, så setter jeg start til 5, ettersom 5 er den første raden for i morgen. 4. Så looper jeg gjennom XML-dataene fra yr, og oppdaterer de radene som skal oppdateres. Loopen avsluttes når den har nådd dag nr 4 og tidsperiode nr 4. /** * Retrieve weather data and update db */ function updateWeatherForecast($start) { // Get XML feed $url = curl_init("http://www.yr.no/sted/Norge/Akershus/Asker/Vollen/varsel.xml"); curl_setopt($url, CURLOPT_RETURNTRANSFER, true); curl_setopt($url, CURLOPT_HEADER, 0); $data = curl_exec($url); curl_close($url); $weatherForecast = new SimpleXmlElement($data, LIBXML_NOCDATA); // Set time values $todayDate = date("d"); $tomorrowDate = date("d", time() + 86400); $firstWeatherForecastHour = substr($weatherForecast->forecast->tabular->time[0]['from'], 11, 2); $firstWeatherForecastDate = substr($weatherForecast->forecast->tabular->time[0]['from'], 8, 2); // Calculate the start row for data merging if($todayDate == $firstWeatherForecastDate) { $start = ($firstWeatherForecastHour / 6) + 1; } else { $start = 5; } // Loop through XML data and merge with db $i = 0; foreach($weatherForecast->forecast->tabular->time as $weatherForecast6H) { // Update db $query = "UPDATE arnsfo_weatherForecast SET date = '".$weatherForecast6H['from']."', `condition` = ".$weatherForecast6H->symbol['number'].", temperature = ".$weatherForecast6H->temperature['value']." WHERE ID = ".($i + $start); $result = mysql_query($query) or die(mysql_error()); // Kill loop when last table row is reached if(($i + $start) == 16) { break; } $i++; } return $result; } Endret 27. mars 2012 av banansplitt™ Lenke til kommentar
MikkelRev Skrevet 27. mars 2012 Del Skrevet 27. mars 2012 Sjekk ut Magpie RSS, det gjør XML-parsing til en lek. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå