ich versuche momentan eine möglichkeit zu finden um Quelltext aus einer Homepage in Variablen zu schreiben.
Da ich eine Siemens GLT mit hunderten Datenpunkten Auslesen und verarbeiten will ist es mühsam die alle per Hand
reinzuhacken. Ich habe es dennoch getan und 200 www Reader und dazu passende Textparser anzulegen, nun sind Maus und Tastatur defekt
Ich bin daher auf die Idee zu kommen die Webpage per PHP abzufragen und durch einen Code Schnipsel den ich gefunden habe durchzuparsen und in eine Variable zu schreiben.
Das Funktioniert soweit ganz gut allerdings bekomme ich jetzt nur noch einen einstelligen Wert zurück. ( zb. 17,00 °C ist im echo eine 1 ) … momentan stecke ich fest. Hat jemand ne Idee dazu ?
<?
// Das ist der www Reader in Scriptform. Der Reader gibt ein Array aus.
// das Array wird Implodet. Dann werden die Variablen vor und nach dem Wert definiert.
// Wir machen aus dem String dann noch einen Float Wert.
$lines = file("http://localhost:47800/explorer/2098177/0/312");
$stringlines = implode($lines);
$start = "present-value";
$ende = "object-typeanalog";
// ausschneiden vom Ende von $start bis zum Anfang von $ende
$search = substr($stringlines,
// Ende von $start = Anfang von $start + Länge von $start
strpos($stringlines, $start) + strlen($start),
// Anzahl Zeichen bis zum Anfang von $ende = Anfang von $ende minus Ende von $start
strpos($stringlines, $ende) - (strpos($stringlines, $start) + strlen($start)));
$daten = settype($search, "Integer"); // Wandelt String in Integer um
SetValueInteger(25278,$daten); // Setzt die Daten in die Integer Variable
// print_r($lines);
{
echo $daten;
// echo $stringlines;
}
?>
Nö … leider nichts gebracht, Die SetValue Variable ist auch eine Float Variable.
Bekomme nur eine 1 ausgegeben.
<?
// Das ist der www Reader in Scriptform. Der Reader gibt ein Array aus.
// das Array wird Implodet. Dann werden die Variablen vor und nach dem Wert definiert.
// Wir machen aus dem String dann noch einen Float Wert.
$lines = file("http://localhost:47800/explorer/2098177/0/312");
$stringlines = implode($lines);
$start = "present-value";
$ende = "object-typeanalog";
// ausschneiden vom Ende von $start bis zum Anfang von $ende
$search = substr($stringlines,
// Ende von $start = Anfang von $start + Länge von $start
strpos($stringlines, $start) + strlen($start),
// Anzahl Zeichen bis zum Anfang von $ende = Anfang von $ende minus Ende von $start
strpos($stringlines, $ende) - (strpos($stringlines, $start) + strlen($start)));
$daten = settype($search, "float"); // Wandelt String in Integer um
SetValue(53397,$daten); // Setzt die Daten in die Integer Variable
// print_r($lines);
{
echo $daten;
// echo $stringlines;
}
?>
floatval brachte leider garkeinen Wert, zumindestens vermute ich das da nur eine 0 ausgegeben wird.
$daten = floatval($search); // Wandelt String in Integer um
SetValue(53397,$daten); // Setzt die Daten in die Integer Variable
Du solltest nicht imploden, sondern besser das Array durchsuchen, da du auch " und ’ im String hast, bringt das manche Funktionen durcheinander. Wenn das Ergebnis der Seite immer gleich ist, dann könnte der Wert eventuell immer in der gleichen Arrayzeile stehen.
Hast du dir die tatsächlich gefundenen Start- und Endepositionen angesehen? Ist das wirklich die korrekte Position? Gib doch erstmal nur den gefunden String aus, umwandeln kannst du dann immer noch.
Die Frage ist, wie die Zeile mit dem Wert wirklich genau aussieht, inkl. eventueller LF und CR.
danke für deine Unterstützung bin echt am verzweifeln …
Das mit dem Daten aus dem Array ziehen habe ich mir am anfang auch überlegt. Ich habe
blos noch keinen Weg gefunden die Daten aus dem Array zu bekommen.
An der [16] bin ich Interessiert, habe aber im moment keine Idee wie ich den wert zwischen present-value24.6object-typeanalog in einen Float wert bekomme.
Bei den Arrays haperts bei mir noch ein bissl mitm verständniss.
Langsam nähere ich mich dem Ziel, nun sind Leerzeilen und Leerzeichen draussen, aber dennoch kein Erfolg.
Ich glaube ihn stört das ganze HTML im String, kann des sein ?
Nochn kleines Update, ich werd noch Verrückt mit dem Datensatz Ich glaub ich stell mich schon arg
Blöd an … aber ich versuche mich da reinzufinden.
Habe nun mal Paresys Code verwendet. Dieser funktioniert sicherlich ganz gut wenn man einen kompletten String verwendet. Habe mal die Leerzeilen und die Leerzeichen komplett entfernt und das HTML Gedönse am Anfang.
Getestet, nichts … garnichts, noch nichtmal die Uhrzeit an der Zielvariable ändert sich.
Der Code sieht nun so aus :
<?
$content = Sys_GetURLContent("http://localhost:47800/explorer/2098177/0/312"); // Hier wird der Inhalt der Page Geholt als Quelltext
$string = preg_replace('/
|\r|
/', ' ', $content); // Entfernt Leerzeilen aus dem String
$clearstring = str_replace(' ','',$string); // Entfernt Leerzeichen aus dem String
$clearstring_01 = str_replace('body{padding-top:60px;padding-bottom:40px;}.sidebar-nav{padding:9px0;}@media(max-width:980px){/*Enableuseoffloatednavbartext*/.navbar-text.pull-right{float:none;padding-left:5px;padding-right:5px;}}','',$clearstring);
if (preg_match('/'.preg_quote("present-value").'(.*?)'.preg_quote("object-typeanalog").'/s', $clearstring_01, $matches)) {
$value = floatval($matches[1]);
// $value = settype($matches[1], 'float');
SetValue(12059 /*[AMBIANCE\Kontrollzentrum\Cloud\Test2]*/,$value); // Schreibe Float Wert in Variable
}
?>
Die Variable $clearstring_01 gibt dann folgendes aus. Und dann gehts nicht mehr weiter.