» HTTP-Request an JSON API

Ein sinnvolle App, sucht ihren Macher....Neuen Thread eröffnenNeue Antwort erstellenScript für automatisierte Antworten in Facebook-Gruppen
AutorNachricht
Gesperrt 
Anmeldedatum: 29.01.2016
Beiträge: 1
29.01.2016, 17:46
zitieren

Hallo zusammen,

ich habe ein System welches über HTTP-Requests mit an anderen Systemen Daten austauschen kann. Ich würde gerne von einem System mit einem HTTP-POST auf die JSON API des anderen System zugreifen und dieser Werte übermitteln. Dabei bietet mir das System von dem ich senden will schon einige Einstellmöglichkeiten an.
Die IP und Authentifizierungsdaten sind dem System schon bekannt. Unter dem Feld Parameter muss ich /api/ eintragen und im header nur den Content-Type:application/json;

Wenn ich die zu übertragenden Werte in den HTML-Teil als String
{
"jsonrpc": "2.0",
"method": "IPS_RunScript",
"params": [28073],
"id": 1
}

hineinschreibe funktioniert alles wie gewünscht. Da ich aber gerne einen mit "params" einen variablen Wert übertragen will muss ich daraus eine Funktion machen. Das ist genau der Teil an dem ich nicht weiß wie ich es machen muss. Ich weiß das das Skript mit function data(v) beginnen muss. Ich habe es ganz banal so versucht:

function data (v)
jsonrpc :2.0
method :"IPS_RunScript"
params : '..v'
id : 1
end

Leider funktioniert meine Idee nicht und ich hoffe jemand von euch könnte mir bei meinem Problem etwas helfen. DerWert für v wird hinterher vom System übergeben und als Skriptsprache steht hier glaube ich Lua zur Verfügung.

Falls wichtige Informationen fehlen sollten, bitte bescheid geben. Ich habe von dieser Materie leider nicht viel Ahnung. Ich habe im Anhang einmal mein Befehl, welcher funktioniert und ein Beispiel für Sonos lautsprecher. Dieser Befehl übergibt die Lautstärke. Leider verstehe ich in diesem Beipsiel nicht was genau passiert.

Lieben Gruß
Snook


 Funktioniert

funktioniert 1.png
funktioniert 1.png - [Bild vergrößern]


 Sonos Beispiel

Beispiel Sonos.png
Beispiel Sonos.png - [Bild vergrößern]


pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52420
Wohnort: Lohmar


Meine eBay-Auktionen:
05.02.2016, 17:24
zitieren

Dieser HTML Teil ist in JSON formatiert:
{
"jsonrpc": "2.0",
"method": "IPS_RunScript",
"params": [28073],
"id": 1
}

Mit JSON werden statische Daten auf eine bestimmte Art formatiert. Durch diesen Standard können dann verschiedene Betriebssysteme/Softwares miteinander Daten austauschen. Das ist vergleichbar mit einer Person, die von dir eine Excel-Tabelle erwartet. Mit anderen Dokumenten kann der Empfänger also nichts anfangen.

JSON fängt (bei einem Objekt als Inhalt) immer mit der geschweiften Klammer an und endet auch so. Wenn Du nun mit "function" anfängst oder sonstigen Buchstaben und Zeichen, dann resultiert daraus am Ende kein JSON mehr. Der Empfänger kann also nichts mit deinen gesendeten Daten anfangen.

Allerdings habe ich deinem 2. Screenshot entnommen, dass dein Formular, in dem du den JSON-Datensatz eingetragen hast, eine Sprache spricht, die es dir ermöglicht den JSON-Datensatz vor dem Absenden noch zu ändern. Du meinst es handelt sich um Lua. Ich habe bisher kein Lua eingesetzt, aber es sieht nicht großartig anders aus als andere Sprachen, weshalb ich dir die Logik erklären kann. Und zwar hast Du folgendes in deinem funktionierenden Beispiel (habe es gekürzt):
function data(Volume)
return '<s:Envelope>'..Volume..'</s:Envelope>'
end

Beachte hierbei das
..Volume..
mitten in der Funktion. Das findest Du auch in deinem funktionierenden Beispiel:


Ich gehe nun davon aus, dass irgendwas die Funktion
data
startet. Vielleicht findest Du heraus ob Funktionen mit dem Namen
data
grundsätzlich von deiner Software ausgeführt werden oder ob du vorher eine Liste mit Funktionennamen irgendwo hinterlegen musst. Das sollte sich aus der Software-Anleitung ergeben. Ich gehe jetzt mal davon aus, dass die Software eine Grundeinstellung besitzt, die Funktionen mit dem Namen
data
immer automatisch ausführt.

Jetzt zu dem was passiert. Die Funktion
data
bekommt den Wert
Volume
und verarbeitet ihn. Anschließend wird über
return
ein Ergebnis ausgegeben. Quasi das Ergebnis einer Mathe-Aufgabe oder wie im jetzigen Fall einen Text. Da sich die Variable
Volume
mitten in dem Text befindet, wird diese ersetzt und am Ende kommt das heraus:
<s:Envelope>100</s:Envelope>

Den Punkt musst du jetzt nur verstehen. Die Sonos Box bekommt also nicht
function data....
usw. zugesendet, sondern nur den genannten Text. Auch die einfachen Anführungszeichen sind verschwunden. Die sollen dem Programm nämlich nur helfen zwischen Variablen, Text, Zahlen und Funktionen zu unterscheiden. D.h.
'Volume'
ist in Lua ein Text und
Volume
ist eine Variable.

Was auch wichtig ist - und eine Eigenheit von Lua - ist das Verbinden eines Textes mit einer Variablen. Dazu braucht es wohl zwei Punkte
..
. Daher muss es so geschrieben werden:
'<s:Envelope>'..Volume..'</s:Envelope>

so würde es dagegen nicht funktionieren:
'<s:Envelope>' Volume '</s:Envelope>'

Ich hoffe du konntest mir soweit folgen. Nun zurück zu den JSON-Daten, die Du verändern möchtest:
{
"jsonrpc": "2.0",
"method": "IPS_RunScript",
"params": [28073],
"id": 1
}

Du willst, dass die Zahl "28073" variabel ersetzt werden kann mit einem Wert aus deiner Software. Du hast als Name "Test1" hinterlegt:


aber in der Funktion hast Du "v" geschrieben:


Das sollte denke ich falsch sein, denn im
Volume
-Beispiel heißt der Befehl genau wie die Variable.

Demnach müsste es mit "Test1" stattdessen so aussehen:
function data(Test1)
return '{
"jsonrpc": "2.0",
"method": "IPS_RunScript",
"params": ['..Test1..'],
"id": 1
}'
end

Bitte beachte
return
und den Einsatz der einfachen Anführungszeichen. Dadurch wird am Ende das dabei herauskommen, wenn digital "0" ergibt:
{
"jsonrpc": "2.0",
"method": "IPS_RunScript",
"params": [0],
"id": 1
}

Damit habe ich im Grunde alles erklärt. Allerdings glaube ich, dass Du mit JSON falsch liegst. Schließlich ist das funktionierende Sonos-Beispiel anders formatiert. Oder spricht Sonos JSON und XML? Denn noch mal zum Vergleich. So sieht im Allgemeinen JSON aus:
{
  "Herausgeber": "Xema",
  "Nummer": "1234-5678-9012-3456",
  "Deckung": 2e+6,
  "Waehrung": "EURO",
  "Inhaber": {
    "Name": "Mustermann",
    "Vorname": "Max",
    "maennlich": true,
    "Hobbys": [ "Reiten", "Golfen", "Lesen" ],
    "Alter": 42,
    "Kinder": [],
    "Partner": null
  }
}

und so die gleichen Daten in XML:
<Kreditkarte
  Herausgeber="Xema"
  Nummer="1234-5678-9012-3456"
  Deckung="2e+6"
  Waehrung="EURO">
  <Inhaber
    Name="Mustermann"
    Vorname="Max"
    maennlich="true"
    Alter="42"
    Partner="null">
    <Hobbys>
      <Hobby>Reiten</Hobby>
      <Hobby>Golfen</Hobby>
      <Hobby>Lesen</Hobby>
    </Hobbys>
    <Kinder />
  </Inhaber>
</Kreditkarte>

Es wird also statt mit geschweiften Klammern mit spitzen gearbeitet und der Aufbau ist auch etwas anders. Daher die Frage warum du JSON in deinem Versuch stehen hast?!


 
beispiel_sonos.png
beispiel_sonos.png - [Bild vergrößern]


 
funktioniert_1.png
funktioniert_1.png - [Bild vergrößern]


 
2016-02-06 11_10_05-Fotos.png
2016-02-06 11_10_05-Fotos.png - [Bild vergrößern]


30x bearbeitet
pn email
Gast 
05.02.2016, 17:24
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "HTTP-Request an JSON API" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
HashMap-JSON
Hallo, bitte siehe unten JSON. wie kann ich dafür HashMap schreiben? 2 HashMap ? JSON: { "data": { "abNumberCodeAndDescription1": { "KeM5": 40 }, "abNumberCodeAndDescription2": { "KeM5": 40...
[Java]von Junior Java
1
198
06.03.2021, 13:55
mgutt
Request for help from community
Hello all First let me state i dont speak German so please reply to me in English if possible or simple German google translate can correctly work :) I have recently moved into Luxembourg and would like to ask if you know anyone that knows really well...
von unhuzpt
3
628
14.12.2018, 16:57
unhuzpt
Special request - manifold and exhaust housing
Hi everybody I'l looking for a hand made manifold and a hot side (exhaust housing) for a kkk k24 turbo near Trier. Is somebody knows or can help me?? Thank you in...
von olivenoire
9
596
09.09.2012, 19:57
olivenoire
Informatiker:in / ITSM Prozessmanager:in Service Request- und Identity Access Management | enercity
Bewerben Sie sich bis zum 01.08.2024. Jetzt bewerben!(https://api.relaxx.center/r/571d69da19d4469d9b1c2db4d11a9c23?pid=2170917&mpid=1350859&prid=1021081&tid=30) Zur Stellenanzeige auf Mein IT Job(https://s.jobboarddeutschland.de/1nak) Ihre...
[Jobs & Stellenangebote]von kimjob
0
48
07.06.2024, 16:13
kimjob
22-08-10 | L1/L2/L3 HTTP Proxies (925)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
70
21.08.2010, 19:55
extremeboy
02-08-10 | L1/L2/L3 HTTP Proxies (727)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
67
01.08.2010, 18:39
extremeboy
01-08-10 | L1/L2/L3 HTTP Proxies (712)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
82
31.07.2010, 18:41
extremeboy
31-07-10 | L1/L2/L3 HTTP Proxies (768)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
83
30.07.2010, 17:38
extremeboy
30-07-10 | L1/L2/L3 HTTP Proxies (779)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
63
29.07.2010, 17:52
extremeboy
29-07-10 | L1/L2/L3 HTTP Proxies (758)
Checked & filtered with ProxyFire MasterSuite (Timeout: 10) >>Download Lists<< ...
von extremeboy
0
78
28.07.2010, 17:49
extremeboy
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |