\n"; return $result; } else { $result .= ">"; } if ($text_count==1 && !$normal_count) { for ($i=0;$i\n"; } else { $result .= "\n"; for ($i=0;$i\n"; } return $result; } function http_post($host,$page,$request) { $result = ""; $fp = fsockopen($host, 80, $errno, $errstr, 30); if (!$fp) { error("HTTP POST error #".$errno.", ".$errstr); } else { $out = "POST ".$page." HTTP/1.1\r\n"; $out .= "Host: ".$host."\r\n"; $out .= "Connection: close\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Content-Length: ".strlen($request)."\r\n\r\n"; $out .= $request; fwrite($fp, $out); $redirect = false; while (!feof($fp) && !$redirect) { $line = fgets($fp, 1024); if (preg_match("@HTTP/1.1 ([^ ]+)@",$line,$regs) && $regs[1]{0}=="4") { error("HTTP POST error #".$regs[1]); } // echo $line; $result .= $line; if (preg_match("/^Location: (.*)/",$line,$regs)) { $redirect=true; $rhost = $regs[1];} } fclose($fp); if ($redirect) { if (preg_match("@^http@",$rhost)) { error("Connection can not be found."); } $result .= http_post($host,"/blind/".$regs[1],""); } } return $result; } function http_get($host,$page) { $result = ""; $fp = fsockopen($host, 80, $errno, $errstr, 30); if (!$fp) { error("HTTP GET error #".$errno.", ".$errstr); } else { $out = "GET ".$page." HTTP/1.1\r\n"; $out .= "Connection: close\r\n"; $out .= "Host: ".$host."\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { $line = fgets($fp, 1024); if (preg_match("@HTTP/1.1 ([^ ]+)@",$line,$regs) && $regs[1]{0}=="4") { error("HTTP GET error #".$regs[1]); } $result .= $line; } fclose($fp); } return $result; } function get_and_send() { global $host, $a; $values = array(); $pairs = array(); switch ($a) { case "s": $page = "/blind/ConnForm.asp"; /* zjistime link pro tento den: */ $data = http_get($host,$page."?tt=X"); if (!preg_match("@name=\"link\"[^>]*value=\"([^\"]*)@",$data,$regs)) { error("Cannot determine today's code."); } /* a pokracujeme */ if ($_GET["t"] == "v") { $values["tt"] = "a"; $page .= "?tt=a"; } if ($_GET["t"] == "a") { $values["tt"] = "J"; $page .= "?tt=J"; } if ($_GET["t"] == "x") { $values["tt"] = "X"; $page .= "?tt=X"; } if ($_GET["t"] == "m") { $values["tt"] = $_GET["m"]; $page .= "?tt=".$_GET["m"]; } $from = $_GET["1"]; $to = $_GET["2"]; /* convert unicode request into cp1250, because of idos */ $from = iconv("UTF-8","CP1250",$from); $to = iconv("UTF-8","CP1250",$to); $values["link"] = $regs[1]; $values["FromStn"]=urlencode($from); $values["ToStn"]=urlencode($to); /* $values["FromStn"]= $_GET["1"]; $values["ToStn"]= $_GET["2"]; */ $values["ConnDate"]=$_GET["d"]; $values["ConnTime"]=$_GET["c"]; $values["ConnIsDep"]=1; $values["search"] = "Vyhledat"; $values["ConnAlg"] = 1; $values["Prest"] = 7; $values["cl"] = "C"; foreach ($values as $key=>$value) { $pairs[] = $key."=".$value; } $req = implode("&",$pairs); return http_get($host,$page, $req); break; case "d": $page = "/blind/Route.asp"; $values["tt"] = $_GET["t"]; $values["i"] = $_GET["i"]; $values["s1"] = $_GET["s1"]; $values["s2"] = $_GET["s2"]; $values["cl"] = "C"; foreach ($values as $key=>$value) { $pairs[] = $key."=".$value; } $req = implode("&",$pairs); $page .= "?".$req; return http_get($host,$page); break; case "z": $page = "/blind/Delay.asp"; $values["tt"] = $_GET["t"]; $values["i"] = $_GET["i"]; $values["cl"] = "C"; foreach ($values as $key=>$value) { $pairs[] = $key."=".$value; } $req = implode("&",$pairs); $page .= "?".$req; return http_get($host,$page); break; case "m": $page = "/blind/JRMHD.asp"; return http_get($host,$page); break; case false: header("Location: client/"); die(); break; } } function safe($str) { $stripped = trim(strip_tags($str)); return preg_replace("/&[^;]+;/","",$stripped); } function parse_zastavky($blok) { $zastavky = array(); preg_match_all("@]*>(.*?)@",$blok,$regs2); // var_dump($regs2); /* z $regs2[1] nas zajimaji indexy: 1 - datum, 3 - stanice, 5 - odjezd, 7 - prijezd, 9 - poznamka, 11 - zpozdeni, 12 - link na spoj */ /* stanice */ $tmp = $regs2[1][3]; $parts = explode("
",$tmp); $pocet = count($parts); if (count($parts) != $pocet) { error("Parse error #3"); } for ($i=0;$i<$pocet;$i++) { $str = $parts[$i]; $zastavka = array(); $zastavky[] = array("station",$zastavka); $zastavky[$i][1][] = array("@name",safe($str)); } /* datum */ $tmp = $regs2[1][1]; $parts = explode("
",$tmp); for ($i=0;$i",$tmp); if (count($parts) < $pocet) { error("Parse error #5"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@arr",safe($parts[$i])); } /* prijezd */ $tmp = $regs2[1][7]; $parts = explode("
",$tmp); if (count($parts) < $pocet) { error("Parse error #7"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@dep",safe($parts[$i])); } /* poznamka */ $tmp = $regs2[1][9]; $parts = explode("
",$tmp); if (count($parts) < $pocet) { error("Parse error #9"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@remark",safe($parts[$i])); } /* zpozdeni? */ $tmp = $regs2[1][11]; $parts = explode("
",$tmp); for ($i=0;$i]*tt=([^&]+)[^>]*i=([^&]+)[^>]*s1=([^&]+)[^>]*s2=([^']+)@",$parts[$i],$regs3); if ($regs3) { $t = $regs3[1]; $id = $regs3[2]; $s1 = $regs3[3]; $s2 = $regs3[4]; $zastavky[$i][1][] = array("@delay","t=".$t."&i=".$id); } } /* link */ $tmp = $regs2[1][12]; $parts = explode("
",$tmp); for ($i=0;$i]*tt=([^&]+)[^>]*i=([^&]+)[^>]*s1=([^&]+)[^>]*s2=([^&]+)[^>]*title=\"([^\"]*)@",$parts[$i],$regs3); $t = $regs3[1]; $id = $regs3[2]; $s1 = $regs3[3]; $s2 = $regs3[4]; $zastavky[$i][1][] = array("@vehicle",safe($parts[$i])); $zastavky[$i][1][] = array("@description",$regs3[5]); $zastavky[$i][1][] = array("@link","t=".$t."&i=".$id."&s1=".$s1."&s2=".$s2); } return $zastavky; } function parse($data) { global $a; switch ($a) { case "s": /* rozlisit, jestli jde o nalezena spojeni, nebo jen upresnujici formular */ preg_match_all("@ 1) { /* nalezena spojeni, nejvetsi maso */ $result = array(); $status = array(); $status[] = array("@code",0); $status[] = array("#text","Results"); $result[] = array("status",$status); $info = array(); /* upresneni */ preg_match("@class='ConnDesc'[^>]*>([^<]*)@",$data,$regs1); // var_dump($regs1); $dep = array(); $dep[] = array("#text",$regs1[1]); $info[] = array("from",$dep); preg_match("@class='ConnDescS'[^>]*>([^<]*)@",$data,$regs1); // var_dump($regs1); $arr = array(); $arr[] = array("#text",$regs1[1]); $info[] = array("to",$arr); $result[] = array("info",$info); $results = array(); preg_match_all("@(.*?)(.*?)@",$regs1[0][$i],$regs2); $res = array(); $blok = $regs2[0]; $res[] = array("stations",parse_zastavky($blok)); /* poznamky */ $remarks = array(); preg_match_all("@(.*?)@",$regs1[1][$i],$regs2); for ($j=0;$j]*title=\"([^\"]*)\"[^>]*>@","$1",$regs2[1][$j]); $remark[] = array("#text",$tmp); $remarks[] = array("remark",$remark); } $res[] = array("remarks",$remarks); $results[] = array("result",$res); } $result[] = array("results",$results); } else { /* upresneni */ $result = array(); $status = array(); $status[] = array("@code",2); $status[] = array("#text","Specify"); $result[] = array("status",$status); $input = array(); /* datum */ preg_match("@name=\"ConnDate\"[^>]*value=\"([^\"]*)\"@",$data,$regs1); // var_dump($regs1); $datum = array(); $datum[] = array("#text",$regs1[1]); $input[] = array("date",$datum); /* cas */ preg_match("@name=\"ConnTime\"[^>]*value=\"([^\"]*)\"@",$data,$regs1); //var_dump($regs1); $cas = array(); $cas[] = array("#text",$regs1[1]); $input[] = array("time",$cas); /* startovni stanice */ $dep = array(); if (preg_match("@]*name=\"FromStn\".*?@",$data,$regs1)) { /* vic moznosti */ preg_match_all("@]*value=\"([^\"]*)\"[^>]*>([^<]*)<@",$regs1[0],$regs2); //var_dump($regs2); for ($i=0;$i]*name=\"FromStn\"[^>]*value=\"([^\"]*)@",$data,$regs1); $opt = array(); $opt[] = array("#text",$regs1[1]); $dep[] = array("option",$opt); /* jeste je sance, ze objekt vubec nebyl nalezen */ preg_match("@]*name=\"FromStn\".*?]*name=\"ToStn\".*?@",$data,$regs1)) { /* vic moznosti */ preg_match_all("@]*value=\"([^\"]*)\"[^>]*>([^<]*)<@",$regs1[0],$regs2); //var_dump($regs2); for ($i=0;$i]*name=\"ToStn\"[^>]*value=\"([^\"]*)@",$data,$regs1); $opt = array(); $opt[] = array("#text",$regs1[1]); $arr[] = array("option",$opt); /* jeste je sance, ze objekt vubec nebyl nalezen */ preg_match("@]*name=\"ToStn\".*?(.*?)@",$data,$regs1); preg_match("@([^<]*)@",$regs1[1],$regs2); preg_match("@img.*title=\"([^\"]*)@",$regs1[1],$regs3); $nazev = array(); $nazev[] = array("#text",$regs2[2]); $typ = array(); $typ[] = array("#text",$regs2[1]); $detail = array(); $detail[] = array("#text",$regs3[1]); $info[] = array("name",$nazev); $info[] = array("type",$typ); $info[] = array("detail",$detail); // var_dump($regs2); // var_dump($regs3); $result[] = array("info",$info); preg_match("@]*>(.*?)@",$data,$regs1); preg_match_all("@]*>(.*?)@",$regs1[1],$regs2); // var_dump($regs2); /* z $regs2[1] nas zajimaji indexy: 0 - nazev, 1 - prijezd, 2 - odjezd, 4 - poznamka, 5 - km (ne u mhd) */ /* nazev */ $zastavky = array(); $tmp = $regs2[1][0]; preg_match("@document\.write\('(.*)'\)@",$tmp,$regs3); $parts = explode("
",$regs3[1]); $pocet = count($parts); for ($i=0;$i<$pocet;$i++) { $str = $parts[$i]; $zastavka = array(); $zastavka[] = array("@name",safe($str)); if (preg_match("@@",$str)) { $zastavka[] = array("@important","important"); } $zastavky[] = array("station",$zastavka); } //var_dump($regs4); /* prijezd */ $tmp = $regs2[1][1]; $parts = explode("
",$tmp); if (count($parts) != $pocet) { error("Parse error #1"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@arr",safe($parts[$i])); } //var_dump($parts); /* odjezd */ $tmp = $regs2[1][2]; $parts = explode("
",$tmp); if (count($parts) != $pocet) { error("Parse error #2"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@dep",safe($parts[$i])); } //var_dump($parts); /* poznamka */ $tmp = $regs2[1][4]; $parts = explode("
",$tmp); if (count($parts) != $pocet) { error("Parse error #4"); } for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@remark",safe($parts[$i])); } //var_dump($parts); /* km */ $tmp = $regs2[1][5]; $parts = explode("
",$tmp); // if (count($parts) != $pocet) { error("Parse error #5"); } if (count($parts) == $pocet) for ($i=0;$i<$pocet;$i++) { $zastavky[$i][1][] = array("@km",safe($parts[$i])); } //var_dump($parts); $result[] = array("stations",$zastavky); /* ostatni poznamky */ $remarks = array(); preg_match("@
(.*)([^<]*)[^<]*@",$regs1[1],$regs2); for ($i=0;$i.*?@m",$data,$regs1); $tr = $regs1[0][5]; preg_match("@(.*?)@",$tr,$regs2); if ($regs2) { $status[] = array("@code",0); $status[] = array("#text","Delay"); $result[] = array("status",$status); $parts = explode("
",$regs2[1]); $station = $parts[0]; $planned = $parts[1]; $real = $parts[2]; $delay = $parts[3]; $d = array(); $d[] = array("@station",$station); $d[] = array("@planned",$planned); $d[] = array("@real",$real); $d[] = array("@delay",$delay); $result[] = array("delay",$d); } else { $status[] = array("@code",1); $status[] = array("#text","No data available"); $result[] = array("status",$status); } break; case "m": /* kody mest */ $result = array(); preg_match_all('@]* value="([^"]+)[^>]*>[^<]*]*>()?(.+?)()?@',$data,$regs,PREG_SET_ORDER); for ($i=0;$i'."\n"; echo ''."\n"; echo php2xml($data,"idos",0); // print_r($data); } $a = false; if (isset($_GET["a"])) { $a = $_GET["a"]; } $data = get_and_send(); $data = str_replace(array("\n","\r"),"",$data); $data = str_replace(" "," ",$data); $data = iconv("CP1250","UTF-8",$data); $parsed = parse($data); output($parsed); ?>