Difference between revisions of "PHP Examples"

From Open Rail Data Wiki
Jump to navigation Jump to search
m (Added categories)
m (Tidy up code)
Line 10: Line 10:
 
This example connects to the Network Rail data feed via STOMP, subscribes to the <code>TRAIN_MVT_ALL_TOC</code> topic, and sets up a loop listening for new frames.   
 
This example connects to the Network Rail data feed via STOMP, subscribes to the <code>TRAIN_MVT_ALL_TOC</code> topic, and sets up a loop listening for new frames.   
  
<code>
+
<code><?php
<?php
 
 
  // Network Rail Stomp Handler example by ian13
 
  // Network Rail Stomp Handler example by ian13
 
  $server = "tcp://datafeeds.networkrail.co.uk:61618";
 
  $server = "tcp://datafeeds.networkrail.co.uk:61618";
Line 36: Line 35:
 
  &nbsp;
 
  &nbsp;
 
  die('Connection lost: ' . time());
 
  die('Connection lost: ' . time());
  ?>
+
  ?></code>
</code>
 
  
 
===Durable Subscriptions===
 
===Durable Subscriptions===
Line 43: Line 41:
 
The example above will only receive messages while it is connected to the STOMP server.  By specifying a <code>client-id</code> header in the connection, and an <code>activemq.subscriptionName</code> header in the subscription, messages that were sent while the client was offline will be received upon connection.
 
The example above will only receive messages while it is connected to the STOMP server.  By specifying a <code>client-id</code> header in the connection, and an <code>activemq.subscriptionName</code> header in the subscription, messages that were sent while the client was offline will be received upon connection.
  
<code>
+
<code> // Specify a client-id header in the connection
// Specify a client-id header in the connection
 
 
  $con = new Stomp($server, $user, $password, array('client-id' => 'somename'));
 
  $con = new Stomp($server, $user, $password, array('client-id' => 'somename'));
 
  &hellip;
 
  &hellip;
 
  // Specify an activemq.subscriptionName header in the subscription
 
  // Specify an activemq.subscriptionName header in the subscription
 
  $con->subscribe("/topic/" . $channel, array('activemq.subscriptionName' => 'somename'));
 
  $con->subscribe("/topic/" . $channel, array('activemq.subscriptionName' => 'somename'));
  &hellip;
+
  &hellip;</code>
</code>
 
 
 
  
 
==Stomp library==
 
==Stomp library==
Line 59: Line 54:
 
A fixed version can be obtained from [http://mail-archives.apache.org/mod_mbox/activemq-users/201103.mbox/%3CAANLkTinetbR6w-CFzJ+q-Xk3p1xkkr3BzYBcxDAU8VPO@mail.gmail.com%3E here] or [http://mail-archives.apache.org/mod_mbox/activemq-users/201103.mbox/raw/%3CAANLkTinetbR6w-CFzJ+q-Xk3p1xkkr3BzYBcxDAU8VPO@mail.gmail.com%3E here].
 
A fixed version can be obtained from [http://mail-archives.apache.org/mod_mbox/activemq-users/201103.mbox/%3CAANLkTinetbR6w-CFzJ+q-Xk3p1xkkr3BzYBcxDAU8VPO@mail.gmail.com%3E here] or [http://mail-archives.apache.org/mod_mbox/activemq-users/201103.mbox/raw/%3CAANLkTinetbR6w-CFzJ+q-Xk3p1xkkr3BzYBcxDAU8VPO@mail.gmail.com%3E here].
  
<code>
+
<code>require_once('Stomp.php');
  require_once('Stomp.php');
 
 
    
 
    
  $con = new Stomp('tcp://datafeeds.networkrail.co.uk:61618/');
+
$con = new Stomp('tcp://datafeeds.networkrail.co.uk:61618/');
  $con->clientId = 'someclient';
+
$con->clientId = 'someclient';
  $con->connect($username, $password);
+
$con->connect($username, $password);
 
    
 
    
  $con->subscribe("/topic/TRAIN_MVT_ALL_TOC");
+
$con->subscribe("/topic/TRAIN_MVT_ALL_TOC");
  $msg = $con->readFrame();
+
$msg = $con->readFrame();
 
    
 
    
  if ($msg != null) {
+
if ($msg != null) {
    foreach (json_decode($msg->body) as $event) {
+
  foreach (json_decode($msg->body) as $event) {
      // do stuff with $event here
+
    // do stuff with $event here
    }
 
    $con->ack(msg);
 
 
   }
 
   }
 +
  $con->ack(msg);
 +
}
 
    
 
    
  $con->disconnect();
+
$con->disconnect();</code>
</code>
 
  
 
{{Navtable-DataFeeds}}
 
{{Navtable-DataFeeds}}

Revision as of 16:30, 8 December 2014

There are two ways to access the Network Rail data feeds from PHP: the PECL Stomp package or the Stomp library.

PECL Stomp Package

The PECL Stomp Package can be installed through the PECL command line tool; this is part of the PHP PEAR extensions package. Instructions for installing PEAR and PECL on different systems can be found by searching the web. Once PECL is installed, type pecl install stomp at the command line.

Documentation for the PECL Stomp package can be found on the PHP:Stomp Manual page.

Basic Example

This example connects to the Network Rail data feed via STOMP, subscribes to the TRAIN_MVT_ALL_TOC topic, and sets up a loop listening for new frames.

<?php

// Network Rail Stomp Handler example by ian13
$server = "tcp://datafeeds.networkrail.co.uk:61618";
$user = "username";
$password = "password";
$channel = "TRAIN_MVT_ALL_TOC";
 
$con = new Stomp($server, $user, $password);
if (!$con) {
   die('Connection failed: ' . stomp_connect_error());
}
 
$con->subscribe("/topic/" . $channel);
 
while($con){
   if ($con->hasFrame()){
       $msg = $con->readFrame();
       foreach (json_decode($msg->body) as $event) {
         // do stuff with $event here
       }
       $con->ack($msg);
   }
}
 
die('Connection lost: ' . time());
?>

Durable Subscriptions

The example above will only receive messages while it is connected to the STOMP server. By specifying a client-id header in the connection, and an activemq.subscriptionName header in the subscription, messages that were sent while the client was offline will be received upon connection.

// Specify a client-id header in the connection

$con = new Stomp($server, $user, $password, array('client-id' => 'somename'));
…
// Specify an activemq.subscriptionName header in the subscription
$con->subscribe("/topic/" . $channel, array('activemq.subscriptionName' => 'somename'));
…

Stomp library

An alternative Stomp client is available from Fuse Source. It has some minor issues, such as injecting spaces in the username/password, and sleeping on message retrieval.

A fixed version can be obtained from here or here.

require_once('Stomp.php');

$con = new Stomp('tcp://datafeeds.networkrail.co.uk:61618/'); $con->clientId = 'someclient'; $con->connect($username, $password);

$con->subscribe("/topic/TRAIN_MVT_ALL_TOC"); $msg = $con->readFrame();

if ($msg != null) {

 foreach (json_decode($msg->body) as $event) {
   // do stuff with $event here
 }
 $con->ack(msg);

}

$con->disconnect();


Network Rail Open Data Feeds
Data Feeds About the Feeds Account States Durable Subscriptions Example Code ( PHP / C# / Java / Ruby / Node.js) • Advanced UsesFAQ Release Notes
RTPPM RTPPM Feed
Train Movements Train Movements Feed Train Activation Train Cancellation Train Movement Train Reinstatement Change of Origin Change of Identity Change of Location TSPEED Field Planned Cancellations Cancellation Codes
TD TD Feed C-Class Messages S-Class Messages Train Describers TD Berths
VSTP VSTP Feed
TSR TSR Feed Route Codes
SCHEDULE SCHEDULE Feed Schedule and Location Records Association Records CIF Codes How Scheduling Works Allowances
Reference Data Reference Data Feed TOC Codes CIF Codes Delay Attribution Codes Identifying Locations (STANOX, TIPLOC, NLC and 3-Alpha Codes) STANOX Geographical Areas Train Planning data