Create central config file, just in case
Kick out old oebbApi Move old LICENSE and README files out of the way Add phpQuery
This commit is contained in:
parent
81513b12f5
commit
6a9fa3917f
5 changed files with 5709 additions and 445 deletions
7
config.php
Normal file
7
config.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$apipath = "oebbApi_v0.3.php";
|
||||||
|
|
||||||
|
// --------------------------------------
|
||||||
|
|
||||||
|
require_once($apipath);
|
445
oebbApi_v0.2.php
445
oebbApi_v0.2.php
|
@ -1,445 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
require_once 'phpquery/phpQuery/phpQuery.php';
|
|
||||||
|
|
||||||
class oebbApi {
|
|
||||||
protected $i = 0;
|
|
||||||
protected $data = array();
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
session_start();
|
|
||||||
$_SESSION["oebbApi"]["get"] = false;
|
|
||||||
$_SESSION["oebbApi"]["getDetails"] = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get($departure, $arrival, $amount, $date = null, $time = null, $timeMode = false) {
|
|
||||||
$date = ($date == null ? date("d.m.Y") : $date);
|
|
||||||
$time = ($time == null ? date("H:i") : $time);
|
|
||||||
|
|
||||||
$url = 'http://fahrplan.oebb.at/bin/query.exe/dn?start=1&S='
|
|
||||||
. urlencode(utf8_decode($departure)) .
|
|
||||||
'&Z='
|
|
||||||
. urlencode(utf8_decode($arrival)) .
|
|
||||||
'&REQ0JourneyDate='
|
|
||||||
. ($date) .
|
|
||||||
'&time='
|
|
||||||
. $time;
|
|
||||||
|
|
||||||
if ($timeMode == true) {
|
|
||||||
$url .= "×el=arrive";
|
|
||||||
}
|
|
||||||
$this->loadUrl($url);
|
|
||||||
|
|
||||||
if (!$this->isValid($departure, $arrival)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
|
|
||||||
while ($amount > $this->i) {
|
|
||||||
$tempOkey = (pq('#trOverviewC0-' . $i)->getString());
|
|
||||||
if (!empty($tempOkey)) {
|
|
||||||
$this->data[] = $this->getConnection($i);
|
|
||||||
$this->i++;
|
|
||||||
$i++;
|
|
||||||
} else {
|
|
||||||
$time = $this->getConnection($i - 1);
|
|
||||||
$time = strtotime($time["startTime"] . ' + 1 minute');
|
|
||||||
$time = date("H:i", $time);
|
|
||||||
|
|
||||||
$date = $this->getConnection($i - 1);
|
|
||||||
$date = $date["startDate"];
|
|
||||||
$this->get($departure, $arrival, $amount, $date, $time);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$_SESSION["oebbApi"] = $this->data;
|
|
||||||
$_SESSION["oebbApi"]["get"] = true;
|
|
||||||
return $this->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCoords() {
|
|
||||||
if($_SESSION["oebbApi"]["getDetails"] == false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$details = $_SESSION["oebbApi"]["detail"];
|
|
||||||
$returnArray = array();
|
|
||||||
foreach ($details AS $detail) {
|
|
||||||
$url = $detail["data"]["productUrl"];
|
|
||||||
|
|
||||||
if ($url != null) {
|
|
||||||
$this->loadUrl($url);
|
|
||||||
$temp = (pq('.detailContainer')->HTML());
|
|
||||||
|
|
||||||
$temp = str_replace("zebracol-2", "zebracol", $temp);
|
|
||||||
$temp = str_replace("zebracol-1", "zebracol", $temp);
|
|
||||||
$temp = str_replace('title="Anfang Ihrer Verbindung -> Einstieg"', 'class="pqOkey"', $temp);
|
|
||||||
$temp = str_replace('title="Ende Ihrer Verbindung -> Ausstieg"', 'class="pqOkey"', $temp);
|
|
||||||
//$temp = $this->str_replace_once("center sepline", "ankunftPq", $temp);
|
|
||||||
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
$j = 0;
|
|
||||||
$img = pq('.resultTable:ep(0) td')->html();
|
|
||||||
$img = explode('<a href="', $img);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
$stations = pq('.nowrap.sepline:ep(' . $i . ')')->html();
|
|
||||||
$ankunft = pq('.zebracol')->html();
|
|
||||||
$abfahrt = pq('.zebracol:ep(' . $i . ') ')->html();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$stations = explode("</a>", $stations);
|
|
||||||
$finalStations = "";
|
|
||||||
foreach ($stations as $station) {
|
|
||||||
$tempStation = strip_tags($this->trim($station));
|
|
||||||
$tempStation = preg_replace('/\([^)]*\)|[()]/', '', $tempStation);
|
|
||||||
$oneStation = json_decode(file_get_contents("http://www.oebb.at/__ressources/system/stationsHafas.jsp?q=" . urlencode($tempStation)), true);
|
|
||||||
|
|
||||||
if (isset($oneStation[0]) && $oneStation[0] != null) {
|
|
||||||
if (strpos($img[$j], 'oc.gif') !== false) {
|
|
||||||
|
|
||||||
$finalStations[] = array(
|
|
||||||
"name" => $oneStation[0]["value"],
|
|
||||||
"xcoord" => $oneStation[0]["xcoord"],
|
|
||||||
"ycoord" => $oneStation[0]["ycoord"],
|
|
||||||
"realName" => $tempStation,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$j++;
|
|
||||||
}
|
|
||||||
if (pq('.zebracol:ep(' . $i + 1 . ')')->text() == "") {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
$returnArray[] = $finalStations;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $returnArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function validate($name) {
|
|
||||||
$temp = json_decode(file_get_contents("http://www.oebb.at/__ressources/system/stationsHafas.jsp?q=" . urlencode($name)), true);
|
|
||||||
$return = array();
|
|
||||||
foreach($temp as $temp1) {
|
|
||||||
$return[] = array(
|
|
||||||
"value" => $temp1["value"],
|
|
||||||
"id" => $temp1["extId"],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getDetails($index) {
|
|
||||||
if ($index > count($_SESSION["oebbApi"])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if($_SESSION["oebbApi"]["get"] == false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->loadUrl($_SESSION["oebbApi"][$index]["changesLink"]);
|
|
||||||
|
|
||||||
$temp = (pq('.detailContainer')->HTML());
|
|
||||||
$temp = str_replace("conFirstSecFirstRow", "intermediateSection", $temp);
|
|
||||||
$temp = str_replace("conLastSecLastRow", "intermediateSection", $temp);
|
|
||||||
$temp = str_replace('title="Fahrtinformation"', 'id="connectionInfo"', $temp);
|
|
||||||
|
|
||||||
phpQuery::newDocumentHTML($temp, $charset = 'utf-8');
|
|
||||||
$changes = array();
|
|
||||||
$i = 0;
|
|
||||||
$j = 0;
|
|
||||||
$fuss = 0;
|
|
||||||
$lastDate = "";
|
|
||||||
while (1) {
|
|
||||||
$startDateTemp =
|
|
||||||
pq('.intermediateSection .date:eq(' . $i . ')')->text();
|
|
||||||
$startDateTemp = $this->trim($startDateTemp);
|
|
||||||
if ($startDateTemp == "") {
|
|
||||||
$startDate = $lastDate;
|
|
||||||
} else {
|
|
||||||
$lastDate = $startDateTemp;
|
|
||||||
$startDate = $startDateTemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
$startStation =
|
|
||||||
pq('.intermediateSection .station:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$startTime =
|
|
||||||
pq('.intermediateSection .timeValue:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$startPlattform =
|
|
||||||
pq('.intermediateSection .platform:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$startPrognose =
|
|
||||||
pq('.intermediateSection .realTime:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$productName =
|
|
||||||
pq('.intermediateSection img.product:eq(' . $j . ')')->attr("alt");
|
|
||||||
|
|
||||||
$productImg =
|
|
||||||
"http://fahrplan.oebb.at" .
|
|
||||||
(pq('.intermediateSection img.product:eq(' . $j . ')')->attr("src"));
|
|
||||||
if ($productImg == "http://fahrplan.oebb.at/img/vs_oebb/fuss_pic.gif") {
|
|
||||||
$productUrl = null;
|
|
||||||
$fuss -= 1;
|
|
||||||
} else {
|
|
||||||
$productUrl =
|
|
||||||
(pq('#connectionInfo:eq(' . $fuss . ')')->attr("href"));
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
|
|
||||||
$endDateTemp =
|
|
||||||
pq('.intermediateSection .date:eq(' . $i . ')')->text();
|
|
||||||
$endDateTemp = $this->trim($endDateTemp);
|
|
||||||
if ($endDateTemp == "") {
|
|
||||||
$endDate = $lastDate;
|
|
||||||
} else {
|
|
||||||
$lastDate = $endDateTemp;
|
|
||||||
$endDate = $endDateTemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
$endStation =
|
|
||||||
pq('.intermediateSection .station:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$endTime =
|
|
||||||
pq('.intermediateSection .timeValue:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$endPlattform =
|
|
||||||
pq('.intermediateSection .platform:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
$endPrognose =
|
|
||||||
pq('.intermediateSection .realTime:eq(' . $i . ')')->text();
|
|
||||||
|
|
||||||
|
|
||||||
$startStation = $this->trim($startStation);
|
|
||||||
$endStation = $this->trim($endStation);
|
|
||||||
|
|
||||||
$startTime = substr($startTime, 3);
|
|
||||||
$endTime = substr($endTime, 3);
|
|
||||||
|
|
||||||
$startTime = $this->trim($startTime);
|
|
||||||
$endTime = $this->trim($endTime);
|
|
||||||
|
|
||||||
$startPrognose = $this->trim($startPrognose);
|
|
||||||
$endPrognose = $this->trim($endPrognose);
|
|
||||||
|
|
||||||
$startPlattform = $this->trim($startPlattform);
|
|
||||||
$endPlattform = $this->trim($endPlattform);
|
|
||||||
|
|
||||||
$startPlattform = $this->trim($startPlattform);
|
|
||||||
$endPlattform = $this->trim($endPlattform);
|
|
||||||
|
|
||||||
$startPlattform = empty($startPlattform) ? "" : $startPlattform;
|
|
||||||
$endPlattform = empty($endPlattform) ? "" : $endPlattform;
|
|
||||||
|
|
||||||
$sTime = strtotime($startTime . " " . $startDate);
|
|
||||||
$eTime = strtotime($endTime . " " . $endTime);
|
|
||||||
$dur = $eTime - $sTime;
|
|
||||||
$duration = date("H:m", $dur);
|
|
||||||
|
|
||||||
if ($startStation != "") {
|
|
||||||
$changes[] = array(
|
|
||||||
"start" => array(
|
|
||||||
"station" => $startStation,
|
|
||||||
"time" => $startTime,
|
|
||||||
"plattform" => $startPlattform,
|
|
||||||
"date" => $startDate,
|
|
||||||
"prognose" => $startPrognose,
|
|
||||||
),
|
|
||||||
"end" => array(
|
|
||||||
"station" => $endStation,
|
|
||||||
"time" => $endTime,
|
|
||||||
"plattform" => $endPlattform,
|
|
||||||
"date" => $endDate,
|
|
||||||
"prognose" => $endPrognose,
|
|
||||||
),
|
|
||||||
"data" => array(
|
|
||||||
"productName" => $productName,
|
|
||||||
"productImg" => $productImg,
|
|
||||||
"productUrl" => $productUrl,
|
|
||||||
"duration" => $duration,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
$i++;
|
|
||||||
$j++;
|
|
||||||
$fuss++;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$_SESSION["oebbApi"]["detail"] = $changes;
|
|
||||||
$_SESSION["oebbApi"]["getDetails"] = true;
|
|
||||||
return $changes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The Crap begins here */
|
|
||||||
|
|
||||||
protected function getChangesLink($pos) {
|
|
||||||
$temp = (pq('#linkDtlC0-' . $pos)->attr("href"));
|
|
||||||
return $temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getChanges($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .changes')->text());
|
|
||||||
return intval($temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getStartTime($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .planed')->html());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
return substr($temp[0], 1, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getStartTimeEarly() {
|
|
||||||
$temp = (pq('#trOverviewC1-0 .planed')->html());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
return substr($temp[0], 1, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getStartDateEarly() {
|
|
||||||
$temp = (pq('#trOverviewC1-0 .date')->html());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
return $temp[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getEndTime($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .planed')->html());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
return substr($temp[1], 1, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getDuration($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .duration')->text());
|
|
||||||
return str_replace("\n", "", $temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getPrognose($pos) {
|
|
||||||
$temp = (pq('.prognosis:eq(' . $pos . ')')->html());
|
|
||||||
return $this->trim($temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getStartStation($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .station div ')->getString());
|
|
||||||
return $this->trim($temp[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getEndStation($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .station div ')->getString());
|
|
||||||
return $this->trim($temp[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getBuyLink($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .fares a')->attr("href"));
|
|
||||||
return $temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getStartDate($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .date')->HTML());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
return $temp[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getEndDate($pos) {
|
|
||||||
$temp = (pq('#trOverviewC0-' . $pos . ' .date')->HTML());
|
|
||||||
$temp = explode("<br>", $temp);
|
|
||||||
|
|
||||||
if ($temp[1] == "\n") {
|
|
||||||
return $temp[0];
|
|
||||||
} else {
|
|
||||||
return $temp[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function loadUrl($url) {
|
|
||||||
|
|
||||||
$file = file_get_contents($url);
|
|
||||||
phpQuery::newDocumentHTML($file);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getConnection($pos) {
|
|
||||||
$data = array(
|
|
||||||
"startStation" => $this->getStartStation($pos),
|
|
||||||
"endStation" => $this->getEndStation($pos),
|
|
||||||
"startDate" => $this->getStartDate($pos),
|
|
||||||
"endDate" => $this->getEndDate($pos),
|
|
||||||
"startTime" => $this->getStartTime($pos),
|
|
||||||
"endTime" => $this->getEndTime($pos),
|
|
||||||
"duration" => $this->getDuration($pos),
|
|
||||||
"changes" => $this->getChanges($pos),
|
|
||||||
"buyLink" => $this->getBuyLink($pos),
|
|
||||||
"changesLink" => $this->getChangesLink($pos),
|
|
||||||
"products" => $this->getProducts($pos),
|
|
||||||
"prognose" => $this->getPrognose($pos),
|
|
||||||
"id" => $this->i,
|
|
||||||
"earlier" => $this->getEarlierLink(),
|
|
||||||
|
|
||||||
);
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function isValid($start, $end) {
|
|
||||||
$temp = (pq('#trOverviewC0-0')->getString());
|
|
||||||
|
|
||||||
if (empty($temp)) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function str_replace_once($str_pattern, $str_replacement, $string) {
|
|
||||||
if (strpos($string, $str_pattern) !== false) {
|
|
||||||
$occurrence = strpos($string, $str_pattern);
|
|
||||||
return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern));
|
|
||||||
}
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function stringInsert($str, $pos, $insertstr) {
|
|
||||||
if (!is_array($pos))
|
|
||||||
$pos = array($pos);
|
|
||||||
|
|
||||||
$offset = -1;
|
|
||||||
foreach ($pos as $p) {
|
|
||||||
$offset++;
|
|
||||||
$str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
|
|
||||||
}
|
|
||||||
return $str;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getProducts($pos) {
|
|
||||||
$products = "";
|
|
||||||
$i = 0;
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
$src = (pq('#trOverviewC0-' . $pos . ' .product:eq(' . $i . ')')->attr('src'));
|
|
||||||
$alt = (pq('#trOverviewC0-' . $pos . ' .product:eq(' . $i . ')')->attr('alt'));
|
|
||||||
if(empty($src)) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
$products[] = array(
|
|
||||||
"name" => $alt,
|
|
||||||
"img" => "http://fahrplan.oebb.at" . $src,
|
|
||||||
);
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $products;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getEarlierLink(){
|
|
||||||
$temp = (pq('.navi a:ep(0)')->attr("href"));
|
|
||||||
$this->loadUrl($temp);
|
|
||||||
$start = $this->getStartTimeEarly();
|
|
||||||
return $start;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function trim($string) {
|
|
||||||
return trim($string, "\xC2\xA0\n\t\r\0\x0B");
|
|
||||||
}
|
|
||||||
}
|
|
5702
phpQuery-onefile.php
Normal file
5702
phpQuery-onefile.php
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue