NEWS
Array aus php script holen
-
ich habe das in ein js script in iobroker gepackt…
ich dachte das das php-script wie eine locale html behandelt wird...
-
-
okay, verstehe… also eine directes aufrufen ist nicht möglich...
ich habe ganz nebenbei noch einen Apache auf dem Server laufen...
aber wie bringe ich mein script dazu den interpreter zu benutzen?
-
Du musst das irgendwo im Apache-Verzeichnis ablegen. Eine kurze Google-Suche liefert:
-
Hi,
warum machst Du im PHP statt einem "print_r" kein
print (json_encode($result));
Dann würd das script nämlich JSON liefern, und man müsst sich auf der Javascript Seite mit Regex keinen Wolf parsen …
-
die Umwandlung in json hatte ich schon eingebaut… danke
Aber wenn ich nun die seite im Browser aufrufe wird mir der code angezeigt aber nicht das Ergebenis.
ist das so richtig?
https://i.imgur.com/YCrngon.jpg" /> -
Dann führt Apache den PHP-Interpreter nicht aus. Wieder eine kurze Google-Suche und ich lande hier:
https://www.strassenprogrammierer.de/ph … p_612.html
Mal ehrlich, das bekommst du doch auch hin, oder?
-
natürlich, Du hast föllig recht!
Allerdings quäle ich google permanent zu meinem Vorhaben. Ich habe den code auch nur mit hlfe von google
zusammen geschustert.
Leider hat sich auch bei ubuntu und Appache2 eine Menge geändert, so dass die Einstellungen nicht mehr
so einfach zu verstehen sind… zumindest für mich.
Nichz desto trotz habe ich zum mindest hinbekommen das nicht mehr der code angezeigt wird sondern nun
erscheint Array() im Browser... das bedeutet für mich ich bin einen Schritt weiter und werde jetzt mal google fragen
was ich noch falsch mache...
-
es gab einiges was serverseitig noch umgestellt und eingerichtet werden musste. nun klappt es aber schon mal mit dem Array bzw. der json ausgabe im Browser…
Das bedeutet ich komme jetzt an den Punkt an dem ich die json von der "webseite" abrufen möchte.
Das sollte ja mit dem Request-Modul, welchen ja onboard sein sollte...
ich habe jetzt einiges gegoogelt und probiert aber ich bekomme immer eine Info:
javascript.0 2018-05-30 12:43:30.563 info script.js.common.Test: undefined javascript.0 2018-05-30 12:43:30.563 info script.js.common.Test: undefined javascript.0 2018-05-30 12:43:30.556 info script.js.common.Test: registered 0 subscriptions and 0 schedules
const request = require('request'); request('http://192.168.1.142/server.php', (err, res, body) => { if (err) { return log(err); } log(body.url); log(body.explanation); });
das beispiel hatte ich aus der verlinkten Seite übernommen…
die "Website" gibt jett folgendes aus:
{"1973 - Ring Ring":"dir","1974 - Waterloo":"dir","1975 - Abba":"dir","1976 - Arrival":"dir","1977 - Abba The Album":"dir","1979 - Voulez Vous":"dir","1980 - Gracias Por La M\u00fasica":"dir","1980 - Super Trouper":"dir","1981 - The Visitors":"dir","1982 - The Singles - The first 10 Years":"dir","1986 - Abba Live":"dir","1992 - Abba Gold (Greatest Hits)":"dir","1993 - More Abba Gold (More Abba Hits)":"dir","1994 - Thank You For The Music":"dir","1999 - Mamma Mia (The Musical)":"dir","1999 - The Complete Single Collection 1":"dir","1999 - The Complete Singles Collection (CD1)":"dir","2000 - Waterloo Ultimate Collection":"dir","2001 - The Definitive Collection 1":"dir","2006 - Number Ones":"dir","2011 - Abba Collected":"dir","extrafanart":"dir","artist.nfo":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/artist.nfo","banner.jpg":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/banner.jpg","clearart.png":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/clearart.png","fanart.jpg":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/fanart.jpg","folder.jpg":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/folder.jpg","logo.png":"\/Datengrab_xbmc\/Musik\/Alben\/ABBA\/\/logo.png"}
edit… hab jetzt mit viel tryandError hinbekommen...!!!
-
Super dass es jetzt klappt. Setze bitte ein "[gelöst]" vor den Thementitel.
Und für andere, die hier möglicherweise drauf stoßen wäre es gut, wenn du deine Lösung noch posten könntest.
-
naja gelöst ist das ganze noch nicht… eventuell muß ich die Überschrift ändern.
die Abfrage klappt jetzt so:
const request = require('request'); const idJSON = "javascript.0.DB_Abfrage.DB_json"; request('http://192.168.1.142/server.php', (err, res, body) => { if (err) { return log(err); } log(body); setState(idJSON, body); var obj = JSON.parse(body, function (key, value) { if (value == "dir" && key != "extrafanart") log(key); }); });
allerdings würde ich grn in der json abfrage einen counter mitlaufen lassen so das ich die erhaltenen "key" auch einem state zu ordnen kann.
müsste dann wohl mit einer "for" schleife gemacht oder gibt es einen besseren Weg?
EDIT:
okay, mit counter funtioniert so:
const request = require('request'); const idJSON = "javascript.0.DB_Abfrage.DB_json"; request('http://192.168.1.142/server.php', (err, res, body) => { if (err) { return log(err); } log(body); setState(idJSON, body); var i = 1; var obj = JSON.parse(body, function (key, value) { if (value == "dir" && key !="extrafanart") { log(key); log(i); i=i+1; } }); });
-
Alternativ kannst du auch sowas machen, ist vermutlich eher das was du willst:
const parsed = JSON.parse(body); for (const key of Object.keys(parsed)) { const value = parsed[key]; // was mit den Einträgen machen. In key stehen nacheinander die Schlüssel deines Objekts, in value nacheinander die dazugehörigen Werte, wie "dir", etc... }
Oder wenn du (wie es mir scheint), nur die Verzeichnisse außer "extrafanart" willst:
const parsed = JSON.parse(body); const files = Object.keys(parsed) .filter(key => parsed[key] === "dir" && key !== "extrafanart") // Verzeichnisse filtern ; // Hier ist files jetzt ein String-Array mit Inhalt ["1973 - Ring Ring", "1974 - Waterloo", ...]
-
das schau ich mir auf jedenfall mal an…
habe jetzt mal ein wenig gespielt...
~~https://i.imgur.com/nCKLNwz.jpg" />
die states werden durch das script gefüllt… und wenn man auf den Ordner dückt wird der "Name" an einen state übergeben. dieser soll dann über das script an meine serve.php übergeben werden...
Der teil mit der Übergabe fehlt mir allerdings noch...~~