<?php
/** HWA-MC MOS-Verwachting XML-Parser   
  * -------------------------------------
  *	Created By Joris Synaeve
  * Can be Used for free
  * http://www.jorissynaeve.net/weerstation
  *
  * Thanks to Sietse Roolvink
  * http://www.weerstationleeuwarden.nl
  */
/*
 * USER DEFINED VARIABLES
 */
$StationID = ---; // Put here your stationID
$SecurityCode = "------------"; // Put here your securityCode
/*
 * RETURN VARIABLES
 */
$aanmaakdatum = "";
$aanmaaktijd = "";

$plaatsid = "";
$plaatsnaam = "";
$plaatsalias = "";

$dagnaam = array();
$dag = array();
$maandnaam = array();
$maand = array();
$jaar = array();
$uur = array();
$datum = array();

$minmaxtemperatuur = array();
$onweerkans = array ();
$sneeuwkans = array ();
$windrichting = array();
$windsnelheid = array();
$neerslaghoeveelheid = array();
$neerslagkans = array();
$weersymbool = array();
$weersomschrijving = array();

$parse_error = true;
/*
 * PARSER
 */
$forecast_url = "http://www.hetweeractueel.nl/includes/custom/mosfeed.php?id=".$StationID."&securitycode=".$SecurityCode;

// Cache-script.
$xml_url = md5($forecast_url);
$cachefilename = "cache/$xml_url";//deze directory/map (cache) moet eerst handmatig worden 
$UseCache = true;
if (!file_exists($cachefilename)) $UseCache = false;
if ($UseCache){
		// Lees tijd uit cache file
	$cachecreationxmltime = mktime(0,0,0,1,1,2000);
	libxml_use_internal_errors(true);
	$doc = new DOMDocument();
	$doc->load($cachefilename);
	$errors = libxml_get_errors(); // Error handling
	if (empty($errors)){ // Error handling
		$cachetijdtag = $doc->getElementsByTagName("Verwachting");
		$cacheaanmaakdatum = $cachetijdtag->item(0)->getAttribute("aanmaakdatum");
		$cacheaanmaaktijd = $cachetijdtag->item(0)->getAttribute("aanmaaktijd");
		$cachecreationxmltime = mktime(substr($cacheaanmaaktijd,0,2),substr($cacheaanmaaktijd,3,2),0,substr($cacheaanmaakdatum,4,2),substr($cacheaanmaakdatum,6),substr($cacheaanmaakdatum,0,4));
	}
	libxml_clear_errors();
		// controleer op nieuwe xml
	
	if (date("Y",$cachecreationxmltime)==2000) $UseCache = false; // Geen correcte xml tijd in cache
		// Tijd kleiner dan 9u45 -> Zoeken naar xml gemaakt tussen 12u en 00u vorige dag
		// Tijd tussen 9u45 & 21u45 -> Zoeken naar xml gemaakt tussen 00u & 12u van zelfde dag
		// Tijd groter dan 21u45 -> Zoeken naar xml gemaakt tussen 12u en 00u zelfde dag
	$nowtime = time();
	$renewtime1 = mktime(11,45,0,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
	$renewtime2 = mktime(23,45,0,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
	if ($nowtime < $renewtime1){
		$renewinttimemin = mktime(12,0,0,date("n",$nowtime),date("j",$nowtime)-1,date("Y",$nowtime));
		$renewinttimemax = mktime(23,59,59,date("n",$nowtime),date("j",$nowtime)-1,date("Y",$nowtime));
	}
	elseif ($nowtime < $renewtime2){
		$renewinttimemin = mktime(0,0,0,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
		$renewinttimemax = mktime(12,0,0,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
	}
	else{
		$renewinttimemin = mktime(12,0,0,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
		$renewinttimemax = mktime(23,59,59,date("n",$nowtime),date("j",$nowtime),date("Y",$nowtime));
	}
	if ($cachecreationxmltime <= $renewinttimemin || $cachecreationxmltime > $renewinttimemax) $UseCache = false;
}
if (!$UseCache) // Probeer xml te downloaden, maar indien laatste cache < 10minuten, gebruik toch cache
{
    $ttl = 600;
    if (file_exists($cachefilename) && (time() - $ttl < filemtime($cachefilename))) $UseCache = true;
}
if ($UseCache)
{
	$MosXml = $cachefilename;
}
else
{
	$MosXml = $forecast_url;
	$fp = fopen($MosXml,"r");
	if (!$fp)
	{
		if (file_exists($cachefilename))
		{
			$MosXml = $cachefilename;
		}
		else
		{
			//hier kun je bijv. een variabele definieren met een 
			//tekst dat de data niet beschikbaar is en deze op de pagina uitvragen.
			//$error = "Tijdelijk niet beschikbaar";
			//dit is een voorbeeld. Dit mag je zelf bepalen
		}
	}
	else
	{
		while (!feof ($fp)) $xml .= fgets($fp, 4096);
		fclose ($fp);
		$fw = fopen($cachefilename, 'w');
		fwrite($fw, $xml);
		fclose($fw);
	}
}
// End Cache script

libxml_use_internal_errors(true); // Error handling
$doc = new DOMDocument();
$doc->load($MosXml);
$errors = libxml_get_errors(); // Error handling
if (empty($errors)){ // Error handling
	$plaats = $doc->getElementsByTagName("Plaats")->item(0);
	$plaatsid = $plaats->getAttribute("id");
	$plaatsnaam = $plaats->getAttribute("naam");
	$plaatsalias = $plaats->getAttribute("alias");
	
	$verwachtingen = $doc->getElementsByTagName("Verwachting");
	foreach($verwachtingen as $verwachting){
		// Check for aanmaakdatum/aanmaaktijd
		$check = $verwachting->getAttribute("aanmaakdatum");
		if (strlen($check)>1){
			$aanmaakdatum = $check;
			$aanmaaktijd = $verwachting->getAttribute("aanmaaktijd");
		}
		else{
			$dagnaam[] = $verwachting->getAttribute("dagnaam");
			$dag[] = $verwachting->getAttribute("dag");
			$maandnaam[] = $verwachting->getAttribute("maandnaam");
			$maand[] = $verwachting->getAttribute("maand");
			$jaar[] = $verwachting->getAttribute("jaar");
			$uur[] = $verwachting->getAttribute("uur");
			$datum[] = $verwachting->getAttribute("datum");
			
			if (strlen($verwachting->getElementsByTagName('minimumtemperatuur')->item(0)->firstChild->nodeValue)>0){
				$minmaxtemperatuur[] = $verwachting->getElementsByTagName('minimumtemperatuur')->item(0)->firstChild->nodeValue;
			}
			else{
				$minmaxtemperatuur[] = $verwachting->getElementsByTagName('maximumtemperatuur')->item(0)->firstChild->nodeValue;
			}
			$winddir[] = $verwachting->getElementsByTagName('windrichting')->item(0)->firstChild->nodeValue;
			$windrichting[] = $verwachting->getElementsByTagName('windrichting')->item(0)->firstChild->nodeValue;
			$onweerkans[] = $verwachting->getElementsByTagName('onweerkans')->item(0)->firstChild->nodeValue;
			$sneeuwkans[] = $verwachting->getElementsByTagName('sneeuwkans')->item(0)->firstChild->nodeValue;
			$windsnelheid[] = $verwachting->getElementsByTagName('windsnelheid')->item(0)->firstChild->nodeValue;
			$neerslaghoeveelheid[] = $verwachting->getElementsByTagName('neerslaghoeveelheid')->item(0)->firstChild->nodeValue;
			$neerslagkans[] = $verwachting->getElementsByTagName('neerslagkans')->item(0)->firstChild->nodeValue;
			$weersymbool[] = $verwachting->getElementsByTagName('weersymbool')->item(0)->firstChild->nodeValue;
			$weersomschrijving[] = $verwachting->getElementsByTagName('weersomschrijving')->item(0)->firstChild->nodeValue;
		}
	}
}
// Start ERROR Handling
$errors = libxml_get_errors();
if (empty($errors)){
	$parse_error = false;
}
// End ERROR Handling
?>