Skip to content
Snippets Groups Projects
Commit 0d5ef305 authored by 2deep4real's avatar 2deep4real
Browse files

added departure grabber to panel/departure

TODO fix grabber not loading data
parent 38c7e138
No related branches found
No related tags found
No related merge requests found
<?php
namespace App\Controller\Component;
use Cake\Controller\Component;
class DeparturesComponent extends Component {
const VERSION = "0.1";
const VRRF_VERSION = "0.07";
public function grabData($options) {
$alldata = array();
$rawdata = array();
foreach ($options['stops'] as $n => $stop) {
$stopsplit = explode(":",$stop);
// errors?
if ($stopsplit == $stop)
echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>";
// get departures
$plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json");
$data = json_decode($plain, true);
// version
$alldata["version"] = $this::VERSION;
$alldata["vrrf_version"] = $data['version'];
$alldata["used_vrrf_version"] = $this::VRRF_VERSION;
// api_errors
$alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error'];
// data
$rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw'];
}
$reftime = date("dHi");
$alldata['lines'] = array();
foreach ($rawdata as $stop => $data) {
// process
foreach ($data as $i => $entry) {
// filter
if (isset($options['filter']['bl'])) {
if (isset($options['filter']['bl']['line']) ) {
if (in_array($entry['line'], $options['filter']['bl']['line'])) {
continue;
}
}
if (isset($options['filter']['bl']['type']) ) {
if (in_array($entry['type'], $options['filter']['bl']['type'])) {
continue;
}
}
if (isset($options['filter']['bl']['platform']) ) {
if (in_array($entry['platform'], $options['filter']['bl']['platform'])) {
continue;
}
}
}
if (isset($options['filter']['wl'])) {
if (isset($options['filter']['wl']['line']) ) {
if (!in_array($entry['line'], $options['filter']['wl']['line'])) {
continue;
}
}
if (isset($options['filter']['wl']['type']) ) {
if (!in_array($entry['type'], $options['filter']['wl']['type'])) {
continue;
}
}
if (isset($options['filter']['wl']['platform']) ) {
if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) {
continue;
}
}
}
// !filter
$scheddate = explode(".",$entry['sched_date']);
$schedtime = explode(":",$entry['sched_time']);
$deptime = $scheddate[0].$schedtime[0].$schedtime[1];
//echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>";
if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) {
$buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']);
foreach ($alldata['lines'] as $key => $value) {
if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) {
$ibuf = sizeof($alldata['lines'][$key]['stops']);
while ($buf != null) {
if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) {
$alldata['lines'][$key]['stops'][$ibuf] = $buf;
$buf = null;
} else {
$alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1];
$ibuf--;
}
}
break;
}
}
if ($buf != null) {
$dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf));
$alldata['lines'][] = $dbuf;
}
}
}
}
// sort
usort($alldata['lines'], function($a, $b) {
// atime
$scheddate = explode(".",$a['stops'][0]['date']);
$schedtime = explode(":",$a['stops'][0]['time']);
$atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
// btime
$scheddate = explode(".",$b['stops'][0]['date']);
$schedtime = explode(":",$b['stops'][0]['time']);
$btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
// compare
return intval($atime) - intval($btime);
});
// clean
$lines_count = count($alldata['lines']);
if ($lines_count > $options['max']) {
$max = min($lines_count, $options['max']);
for ($i = $max; $i < $lines_count; $i++) {
unset($alldata['lines'][$i]);
}
foreach ($alldata['lines'] as $id => $line) {
unset($alldata['lines'][$id]['key']);
unset($alldata['lines'][$id]['identifier']);
}
return $alldata;
}
}
}
\ No newline at end of file
<?php
error_reporting (-1);
ini_set ('display_errors', 1);
// initialize frontend
header('Content-type: text/javascript');
// set root
chdir($_SERVER['DOCUMENT_ROOT']);
// version-info
$version = "0.05";
$vrrf_version = "0.07";
// options
$options = array();
// max entries
$max = 1000000;
// configuration
if (isset($_GET['config'])) {
$file = $_GET['config'];
if (!file_exists($file)) {
$result['error'] = 'config file "'.$file.'" not found';
$result['config']['name'] = $file;
$result['options'] = $options;
echo json_encode($result);
exit;
}
$config = file_get_contents($file);
$buffer = json_decode($config, true);
$options['stops'] = $buffer['stops'];
$options['filter'] = $buffer['filter'];
if (is_numeric($buffer['max'])) {
$max = $buffer['max'];
}
if (count($options['stops']) == 0) {
$result['error'] = 'no stops defined';
$result['config']['name'] = $config_name;
$result['config']['type'] = 'panel/departure';
$result['options'] = $options;
echo json_encode($result);
exit;
}
} else {
$result['error'] = 'no config defined';
$result['config']['name'] = $config_name;
$result['config']['type'] = 'panel/departure';
$result['options'] = $options;
echo json_encode($result);
exit;
}
usort($options['stops'], function($a, $b) {
return strcmp($a, $b);
});
// cache
$name = json_encode($options);
$cachefile = "cache/vrr_".md5($name).".json";
$cachetime = 60;
$cache_ablauf = 0;
$cacheused = false;
$rawdata = array();
$alldata = array();
if (is_file($cachefile))
$cache_ablauf=filemtime($cachefile)+$cachetime;
if (!isset($_GET["nocache"]) && is_file($cachefile) && (time() < filemtime($cachefile)+$cachetime)) {
$plain = file_get_contents($cachefile);
$alldata = json_decode($plain, true);
$cacheused = true;
} else {
foreach ($options['stops'] as $n => $stop) {
$stopsplit = explode(":",$stop);
// errors?
if ($stopsplit == $stop)
echo "<div error><h1>NAME ERROR!</h1>$stop<br/>Not a propper stop name. Usage: city:stop[;city:stop]*</div>";
// get departures
$plain = file_get_contents("http://vrrf.finalrewind.org/$stopsplit[0]/$stopsplit[1].json?frontend=json");
$data = json_decode($plain, true);
// version
$alldata["version"] = $version;
$alldata["vrrf_version"] = $data['version'];
$alldata["used_vrrf_version"] = $vrrf_version;
// api_errors
$alldata["errors"]["$stopsplit[0] - $stopsplit[1]"] = $data['error'];
// info
$alldata["info"] = ""; // TODO generate informations
// data
$rawdata["$stopsplit[0] - $stopsplit[1]"] = $data['raw'];
}
$reftime = date("dHi");
$alldata['lines'] = array();
foreach ($rawdata as $stop => $data) {
// process
foreach ($data as $i => $entry) {
// filter
if (isset($options['filter']['bl'])) {
if (isset($options['filter']['bl']['line']) ) {
if (in_array($entry['line'], $options['filter']['bl']['line'])) {
continue;
}
}
if (isset($options['filter']['bl']['type']) ) {
if (in_array($entry['type'], $options['filter']['bl']['type'])) {
continue;
}
}
if (isset($options['filter']['bl']['platform']) ) {
if (in_array($entry['platform'], $options['filter']['bl']['platform'])) {
continue;
}
}
}
if (isset($options['filter']['wl'])) {
if (isset($options['filter']['wl']['line']) ) {
if (!in_array($entry['line'], $options['filter']['wl']['line'])) {
continue;
}
}
if (isset($options['filter']['wl']['type']) ) {
if (!in_array($entry['type'], $options['filter']['wl']['type'])) {
continue;
}
}
if (isset($options['filter']['wl']['platform']) ) {
if (!in_array($entry['platform'], $options['filter']['wl']['platform'])) {
continue;
}
}
}
// !filter
$scheddate = explode(".",$entry['sched_date']);
$schedtime = explode(":",$entry['sched_time']);
$deptime = $scheddate[0].$schedtime[0].$schedtime[1];
//echo intval($deptime)." + ".intval($entry['delay'])." - ".intval($reftime)." = ".(intval($deptime) + intval($entry['delay']) - intval($reftime))."<br/>";
if (intval($deptime) + intval($entry['delay']) - intval($reftime) > 0) {
$buf = array('date' => $entry['sched_date'], 'time' => $entry['sched_time'], 'delay' => $entry['delay'], 'cancel' => $entry['is_cancelled'], 'name' => $stop, 'info' => $entry['info']);
foreach ($alldata['lines'] as $key => $value) {
if (($entry['key'] == $value['key']) && ($entry['lineref']['identifier'] == $value['identifier']) && ($entry['line'] == $value['line'])) {
$ibuf = sizeof($alldata['lines'][$key]['stops']);
while ($buf != null) {
if ($ibuf < 1 || strcmp($buf['time'], $alldata['lines'][$key]['stops'][$ibuf - 1]['time']) > 0) {
$alldata['lines'][$key]['stops'][$ibuf] = $buf;
$buf = null;
} else {
$alldata['lines'][$key]['stops'][$ibuf] = $alldata['lines'][$key]['stops'][$ibuf - 1];
$ibuf--;
}
}
break;
}
}
if ($buf != null) {
$dbuf = array('line' => $entry['line'], 'destination' => $entry['destination'], 'type' => $entry['type'], 'key' => $entry['key'], 'identifier' => $entry['lineref']['identifier'], 'stops' => array($buf));
$alldata['lines'][] = $dbuf;
}
}
}
}
// sort
usort($alldata['lines'], function($a, $b) {
// atime
$scheddate = explode(".",$a['stops'][0]['date']);
$schedtime = explode(":",$a['stops'][0]['time']);
$atime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
// btime
$scheddate = explode(".",$b['stops'][0]['date']);
$schedtime = explode(":",$b['stops'][0]['time']);
$btime = $scheddate[2].$scheddate[1].$scheddate[0].$schedtime[0].$schedtime[1];
// compare
return intval($atime) - intval($btime);
});
// clean
foreach ($alldata['lines'] as $id => $line) {
unset($alldata['lines'][$id]['key']);
unset($alldata['lines'][$id]['identifier']);
}
// save cache
file_put_contents($cachefile,json_encode($alldata));
}
echo json_encode($alldata);
?>
......@@ -65,7 +65,7 @@ this.loaded = function(panel, config) {
var update = function(config, fields) {
console.log("departures: get data [" + config + "]");
$.get("panels/departure/test.json", function(decodedData) {
$.get("panels/departure/departures.php?config=config/panel/departure/" + config + ".json", function(decodedData) {
console.log("departures: check vrrf errors [" + config + "]");
if (!!decodedData.errors) {
......
{"version":"0.1","vrrf_version":"0.07-41-gaf10544","used_vrrf_version":"0.07","errors":{"Dortmund - Josef-von-Fraunhover Stra\u00dfe":null,"Dortmund - Meitnerweg":null,"Dortmund - Universit\u00e4t S":null},"lines":[{"line":"462","destination":"Dortmund Marten S\u00fcd S","type":"Bus","stops":[{"date":"12.06.2015","time":"20:10","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""},{"date":"12.06.2015","time":"20:12","delay":"0","cancel":0,"name":"Dortmund - Meitnerweg","info":""},{"date":"12.06.2015","time":"20:13","delay":"0","cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""}]},{"line":"465","destination":"Dortmund Oespel S","type":"Bus","stops":[{"date":"12.06.2015","time":"20:11","delay":"0","cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""}]},{"line":"462","destination":"Barop","type":"Bus","stops":[{"date":"12.06.2015","time":"20:16","delay":"0","cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""},{"date":"12.06.2015","time":"20:17","delay":"0","cancel":0,"name":"Dortmund - Meitnerweg","info":""},{"date":"12.06.2015","time":"20:22","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"447","destination":"Dortmund Revierpark","type":"Bus","stops":[{"date":"12.06.2015","time":"20:18","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Dortmund Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"20:29","delay":"5","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Solingen Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"20:30","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"465","destination":"Dortmund Oespel S","type":"Bus","stops":[{"date":"12.06.2015","time":"20:31","delay":"1","cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""}]},{"line":"447","destination":"Dortmund Hacheney","type":"Bus","stops":[{"date":"12.06.2015","time":"20:34","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"447","destination":"Dortmund Bandelstra\u00dfe","type":"Bus","stops":[{"date":"12.06.2015","time":"20:38","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"447","destination":"Dortmund Bandelstra\u00dfe","type":"Bus","stops":[{"date":"12.06.2015","time":"20:54","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Dortmund Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"20:59","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Solingen Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"21:00","delay":"0","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"447","destination":"Dortmund Hacheney","type":"Bus","stops":[{"date":"12.06.2015","time":"21:04","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"465","destination":"Dortmund Bandelstra\u00dfe","type":"Bus","stops":[{"date":"12.06.2015","time":"21:24","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Dortmund Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"21:29","delay":"7","cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"S1","destination":"Solingen Hbf","type":"S-Bahn","stops":[{"date":"12.06.2015","time":"21:30","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"447","destination":"Dortmund Hacheney","type":"Bus","stops":[{"date":"12.06.2015","time":"21:34","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"465","destination":"Dortmund Revierpark","type":"Bus","stops":[{"date":"12.06.2015","time":"21:54","delay":null,"cancel":0,"name":"Dortmund - Universit\u00e4t S","info":""}]},{"line":"462","destination":"Dortmund Huckarde Bushof","type":"Bus","stops":[{"date":"13.06.2015","time":"08:22","delay":null,"cancel":0,"name":"Dortmund - Meitnerweg","info":""},{"date":"13.06.2015","time":"08:23","delay":null,"cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""}]},{"line":"462","destination":"Barop","type":"Bus","stops":[{"date":"13.06.2015","time":"08:36","delay":null,"cancel":0,"name":"Dortmund - Meitnerweg","info":""},{"date":"13.06.2015","time":"08:36","delay":null,"cancel":0,"name":"Dortmund - Josef-von-Fraunhover Stra\u00dfe","info":""}]}]}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment