NS-API PHP probleem

Status
Niet open voor verdere reacties.

pilootnour5

Terugkerende gebruiker
Lid geworden
22 nov 2008
Berichten
1.895
Beste lezers,

Ik zit met een klein probleempje en ik heb na lang zoeken helaas geen antwoord gevonden. Ik ben momenteel voor mijn website aan het stoeien met de NS-API. Allemaal erg leuk! Ik ben de verschillende functies aan het uitproberen. Zo ben ik nu bezig met de routeplanner. Als voorbeeld gebruik ik de rit Tilburg Reeshof naar Utrecht Centraal. Hij geeft alle info goed door, behalve de aankomsttijd. De aankomsttijd die hij weergeeft is precies dezelfde als de vertrektijd. Hieronder zie je de API class van het betreffende gedeelte:

PHP:
function getTrips($from, $to, $options = array()) {
		if (!empty($options['dateTime'])) {
			$options['dateTime'] = date('c', strtotime($options['dateTime']));
		}
		$xmlTree = $this->getUrl('ns-api-treinplanner', array_merge(array('fromStation' => $from, 'toStation' => $to), $options)); 
		
		$output = array();
		// Loop over each option
		foreach($xmlTree as $xmlTrip) {
			$trip = (array) $xmlTrip;
			$tripOption = array('duration_scheduled' => self::hourMinutesToSeconds($trip['GeplandeReisTijd']), 
				'duration_actual' => self::hourMinutesToSeconds($trip['ActueleReisTijd']), 
				'optimal' => $trip['Optimaal'], 'departure_actual' => $trip['ActueleVertrekTijd'], 'departure_scheduled' => $trip['GeplandeVertrekTijd'],
				'departure_actual' => strtotime($trip['ActueleVertrekTijd']), 'departure_scheduled' => strtotime($trip['GeplandeVertrekTijd']),
				'arrival_actual' => strtotime($trip['ActueleVertrekTijd']), 'arrival_scheduled' => strtotime($trip['GeplandeVertrekTijd']),
				'changes' => $trip['AantalOverstappen']
			);
			
			// Loop over each part of the option
			foreach ($xmlTrip->ReisDeel as $xmlPart) {
				$part = (array) $xmlPart;
				$stops = array();
				
				// Loop over each stop
				foreach ($xmlPart->ReisStop as $xmlStop) {
					$stop = (array) $xmlStop;
					$curStop = array('station' => $stop['Naam'], 'time' => strtotime($stop['Tijd']));
					if (!empty($stop['Spoor'])) {
						$curStop['platform'] = $stop['Spoor'];
					}
					$stops[] = $curStop;
				}
				
				$tripOption['connections'][] = array('mode' => strtolower($part['@attributes']['reisSoort']), 
					'type' => $part['VervoerType'], 'service' => $part['RitNummer'], 'stops' => $stops);
			}
			$output[] = $tripOption;
		}
		return $output;
	}

En dit is een deel van de PHP pagina waar ik het een en ander oproep:

PHP:
$from = 'Tilburg Reeshof';
		$to = 'Utrecht Centraal';

		require('../php_ns_trains.class.php');
		$ns = new PhpNsTrains(API_USER, API_PASSWORD);
//		$departures = $ns->getDepartures($_POST['station']);
		$route = $ns->getTrips($from, $to);
		
		if (!is_array($route)) {
			echo '<p class="error">'.$route.'</p>';
		} else {
			foreach($route as $trip) {
				echo 'Vertrektijd: ' . date('H:i', $trip['departure_scheduled']) . '<br />';
				echo 'Aankomsttijd: ' . date('H:i', $trip['arrival_scheduled']) . ' Overstappen: ' .$trip['changes'];
			//	echo '<br />Reistijd: ' . $trip['duration_actual'];
				echo '<br />Reistijd: ' . gmdate("H:i", $trip['duration_scheduled']);
				echo "<br /><br />";
			//	echo '<br /> TESTING';
			}
		}

als ik dit uitvoer krijg ik bijvoorbeeld:

Vertrektijd: 13:35
Aankomsttijd: 13:35 Overstappen: 1
Reistijd: 01:02

Ik heb het idee dat ik gewoon iets stoms over het hoofd zie maar ik weet niet wat. Ziet iemand anders het probleem?
Alvast bedankt!
 
Laatst bewerkt:
En wat zegt de XML zelf? Dan kan je meteen kijken of het aan de class ligt of aan de API.
 
Laatst bewerkt:
De XML geeft wel de juiste gegevens. Ligt dus aan de class waarschijnlijk...
 
Het is opgelost. In de class stond het volgende wat fout was:

'arrival_actual' => strtotime($trip['ActueleVertrekTijd']),
'arrival_scheduled' => strtotime($trip['GeplandeVertrekTijd']),

Dat klopt natuurlijk niet. Moet zijn:

'arrival_actual' => strtotime($trip['ActueleAankomstTijd']),
'arrival_scheduled' => strtotime($trip['GeplandeAankomstTijd']),

Bedankt voor het meedenken!
 
Is het een bestaande class, of heb je deze zelf gemaakt?
Dan kan je een pull-request doen zodat de maker het kan corrigeren in zijn nieuwe versie.
 
Het is inderdaad een bestaande class, die ik heb gevonden op GitHub. Ik wist niet dat dat kon, maar zal zo'n pull request doen. Dan hebben anderen daar ook wat aan!
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan