Gå til innhold

XML-feed inn i db, trøbbel


Anbefalte innlegg

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 av banansplitt™
Lenke til kommentar
Videoannonse
Annonse

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...