NEWS
String & Wert Parsen
-
Moin Zusammen,
folgendes habe ich vor:
Ich habe einen statischen String & einen Objekt in IObroker.
An den String möchte ich den Wert des Objektes anhängen. Das ganze ohne Leerzeichen o.ä.
Also soll das ganze dann: DasHieristderStringunddirektdarandieValueDas soll dann an ein HTTP-Request übergeben werden, der eine Anmeldung benötigt. Der gebaute String soll hierbei die URL sein.
Ich hoffe ihr könnt mir helfen!
Danke euch! -
@Niklas-Schoen sagte in String & Wert Parsen:
An den String möchte ich den Wert des Objektes anhängen
das ist aber nicht parsen!
Das ist eine Textverkettung -
das ist möglich. leider hast du nicht geschrieben wo du das machen möchtest.
als skript. in einem adapter, in einem widget.als lösung gibt es diverse node bibliotheken wie request,axios oder auch direkt in node eingebaut http
gut zu wissen, wäre welche technologie für das anmelden verwendet wird:
formular-basiert, basic authentication, oauth, etc. -
@Homoran Danke für die Info!
-
@OliverIO Danke für die Hilfe, das ganze will ich in Node-Red umsetzen.
Wie kann ich denn herausfinden,welche Auth. eingesetzt wird?
Im Firefox bekomme ich dann ein Popup für Benutzername & Kennwort.danke!
-
@Niklas-Schoen sagte in String & Wert Parsen:
das ganze will ich in Node-Red umsetzen.
dann bin ich leider raus, in Blockly müsste das ganz einfach gehen
-
@Homoran An sich spricht auch nichts gegen Blocky, wie bekommen ich denn das Zusammensetzung des Strings und vor allem, den Http-Request mit Auth hin?
-
@Niklas-Schoen sagte in String & Wert Parsen:
den Http-Request mit Auth hin?
da habe ich keine Ahnung, ich dachte du wolltest "nur" den URL zusammensetzen
-
@Niklas-Schoen
das bekommt man meist nur über die developer konsole im browser heraus.
dort einfach F12 drücken, auf den reiter Network oder so ähnlich gehen.
Dann die Seite Neu laden und auf die Anmeldeseite gehen und am besten schon die Login-Daten eingeben,
aber nochg nicht bestätigen
Dann die Netzwerkliste löschen.
Dann dier Logindaten bestätigen.
Dann müssen die einzelnen requests des browsers in der networkliste untersucht werden.
Form-Login: erkannt man, wenn ein Post-Request ausgelöst wird, in dem deine Login-Daten an den Server übermittelt wird
OAUTTH erkennt man meist an einem Request, in dem irgendwo in den Daten oauth vorkommt.
basic auth ist erigentlich nicht mehr üblich, hier würde der browser selbst ein meist hässliches Eingabefeld anzeigen.
Alternativ, wenn es eine bekannte Seite ist, kann man auch mal im Internet suchen. evtl gibt es dafür ja bereits eine bibliothek
oder du nennst hier die Seite und ich kann mal schauendenk aber daran, dein vorhaben ist nicht trivial (besonders mit deinen Vorkenntnissen, wie ich annehme)
aber ich find es toll wenn sich jemand da etwas weiterbilden will. -
@OliverIO Danke dir für die gute Beschreibung, dass es etwas Aufwand wird ist mir klar, aber wie du schon sagst, irgendwann muss man ja anfangen sich etwas beizubringen!
Es handelt sich um Basic-Auth....Ja es gibt ein hässliches Eingabefeld und ich finde im Request Header: Authorization: Basic
Ab das ganze in Blockly, Node-Red oder JS gelöst wird ist mir eigentlich ziemlich egal (wobei ich nicht glaube, dass Blockly dafür gut geeignet ist)....Auf's ergebnis kommt es an und ich möchte etwas lernen!
-
@Niklas-Schoen
sehr schön, dann lese mal diesen artikel.
https://www.haykranen.nl/2011/06/21/basic-http-authentication-in-node-js-using-the-request-module/kannst auch noch nach weiteren im internet mittels den suchbegriffen
node request basic authorizationsuchen.
wir machen es mit dem javascript adapter, dann haben wir nicht noch eine weitere komplexitätsstufe durch node-red oder blockly (welches ich nicht kenn/mag)auch kannst du dich mal bei der request bibliothek einlesen:
https://www.npmjs.com/package/request
Diese wird von iobroker selbst verwendet und ist bereits vorinstalliert.
Störe dich nicht an dem deprecated. Es ist immer noch eine der meist verwendeten bibliotheken bei node. -
@Niklas-Schoen Mit Node-Red ist es doch sehr einfach.
Du liest über einen iobroker in Node Dein Objekt aus - baust über einen Change Node die URL und übergibst diesem einem HTTP-Request Node - der auch eine Basic Authentication übergibt.
Das sind 3-4 Nodes je nachdem wie Du das triggern möchtest.
Ich mach Dir mal ein Beispiel - ich lese als Datenpunkt den String z. Bsp "microsoft" und hänge dann ".com" und den Rest für die URL an und übergebe das dem HTTP-Request Node.
Basic Authentication habe ich nichts angegeben aber das ist selbsterklärend in dem HTTP-Request Node.
Hier der Flow zum Testen:
[ { "id": "7c137d0b.bd8124", "type": "http request", "z": "dce8fa20.2e93c8", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "", "tls": "", "persist": false, "proxy": "", "authType": "", "x": 1350, "y": 320, "wires": [ [ "f9dc7268.16b3b" ] ] }, { "id": "6c167017.42f4e", "type": "ioBroker get", "z": "dce8fa20.2e93c8", "name": "test", "topic": "0_userdata.0.test", "attrname": "payload", "payloadType": "value", "x": 960, "y": 320, "wires": [ [ "88c1b523.772e08" ] ] }, { "id": "bcdaa5e0.3c0fb8", "type": "inject", "z": "dce8fa20.2e93c8", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "trigger", "payloadType": "str", "x": 810, "y": 320, "wires": [ [ "6c167017.42f4e" ] ] }, { "id": "88c1b523.772e08", "type": "change", "z": "dce8fa20.2e93c8", "name": "", "rules": [ { "t": "set", "p": "url", "pt": "msg", "to": "\"http://\" & payload & \".com\"", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1130, "y": 320, "wires": [ [ "67c5e032.4345e", "7c137d0b.bd8124" ] ] }, { "id": "67c5e032.4345e", "type": "debug", "z": "dce8fa20.2e93c8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "url", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1350, "y": 260, "wires": [] }, { "id": "f9dc7268.16b3b", "type": "debug", "z": "dce8fa20.2e93c8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 1550, "y": 320, "wires": [] } ]
Hier ein Screenshot - wie gesagt die Basic Authentisierung musst Du nur in der Request Node anhacken und Credentials eingeben.
Die Ausgabe des letzten Debug Nodes zeigt Dir dann den Output der HTML Page.
Wenn Du keinen externen/manuellen Trigger brauchst - setzt Du anstelle des iobroker get und inject nodes einfache eine iobroker in node - und der ruft Dir die Seite bei jeder Aktualisierung/änderung des Objektes im iobroker auf.
Das Analysieren der HTML Daten/Codes, die von der Webpage zurückgeliefert werden - das ist dann das Parsen - da bin ich raus.
Um das evtl. bisschen praxisnäher zu machen - habe ich mal die Webseite dieses Threads zusammengestellt.
Ausserdem gibt es html parser node - da musst dann die Dich interessierenden Sections angeben und werden Dir als Array zurückgegeben.
Hier siehst DU also als URL diesen Thread hier - wobei genau dieser als Object im iobroker abgelegt ist. "40556/"String & Wert Parsen"
Im HTML Parser habe ich angegeben, dass ich alle title Sections haben möchte und dann siehst im Debug wie das extrahiert wird - oben drüber siehst den HTML Output. Aber wie gesagt da müssen Dir dann Leute ggf. helfen die Web programmierung mehr beherrschen.Hier noch der Flow:
[ { "id": "7c137d0b.bd8124", "type": "http request", "z": "dce8fa20.2e93c8", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "", "tls": "", "persist": false, "proxy": "", "authType": "", "x": 1410, "y": 280, "wires": [ [ "f9dc7268.16b3b", "f3944e9.d49e5b" ] ] }, { "id": "6c167017.42f4e", "type": "ioBroker get", "z": "dce8fa20.2e93c8", "name": "test", "topic": "0_userdata.0.test", "attrname": "payload", "payloadType": "value", "x": 1030, "y": 280, "wires": [ [ "88c1b523.772e08" ] ] }, { "id": "bcdaa5e0.3c0fb8", "type": "inject", "z": "dce8fa20.2e93c8", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "trigger", "payloadType": "str", "x": 910, "y": 280, "wires": [ [ "6c167017.42f4e" ] ] }, { "id": "88c1b523.772e08", "type": "change", "z": "dce8fa20.2e93c8", "name": "", "rules": [ { "t": "set", "p": "url", "pt": "msg", "to": "\"https://forum.iobroker.net/topic/\" & payload", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1190, "y": 280, "wires": [ [ "67c5e032.4345e", "7c137d0b.bd8124" ] ] }, { "id": "67c5e032.4345e", "type": "debug", "z": "dce8fa20.2e93c8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "url", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1400, "y": 220, "wires": [] }, { "id": "f9dc7268.16b3b", "type": "debug", "z": "dce8fa20.2e93c8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 1610, "y": 220, "wires": [] }, { "id": "f3944e9.d49e5b", "type": "html", "z": "dce8fa20.2e93c8", "name": "", "property": "payload", "outproperty": "payload", "tag": "title", "ret": "html", "as": "single", "x": 1590, "y": 280, "wires": [ [ "8e34c445.0d1158" ] ] }, { "id": "8e34c445.0d1158", "type": "debug", "z": "dce8fa20.2e93c8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 1830, "y": 220, "wires": [] } ]