» 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
Chats: 0
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: 50934
Chats: 11159
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
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
494
09.09.2012, 19:57
olivenoire
Motoröl nachfüllen - API-Klasse
Hallihallo liebe Hondagemeinde, wird wahrscheinlich euch wie eine Anfängerfrage vorkommen, aber da ich bei meinem 93er Civic Öl nachfüllen muss, habe ich folgende Frage. Im Handbuch steht ich darf nur Öl der API-Service-Klasse SF und SJ...
von Shao
10
845
20.08.2009, 20:13
Ganwalf
API LHalliste einer speziellen Kategorie
Hallo, bin neu hier und hoffe ihr könnt mir helfen! Ich möchte über die API des MediaWiki eine Liste aller Seite einer einzelnen Kategorie erhalten. Ist dies möglich? Wenn ja, wie? Google und Suche hat mich bisher nicht weiter gebracht...
von elton
1
199
08.09.2010, 12:13
Rina6489
Youtube gehackt? Redirect web-search-api.com / blueseek.com
Hi, ich werde bei Youtube ständig auf mysearchcorp.com, dann auf web-search-api.com, dann auf blueseek.com und und schlussendlich auf memoletter.com weitergeleitet?! Muss ich nicht verstehen...
von mgutt
6
885
23.07.2010, 06:58
mgutt
Z27x API beschreibt den Upload von LUT Daten, wie geht das?
Ich habe bei HP eine API Beschreibung gefunden, die denke ich mal für die Hersteller von Kolorimetern gedacht ist. Die Frage ist, ob man nicht auch irgendwie manuell LUTs auf diese Art installieren könnte. LUT Upload/Download API’s LUT...
von mgutt
1
117
15.10.2014, 19:06
mgutt
PHP-Fachmann für Google Custom Search bzw. Azure Bing Search API gesucht?
Wer für sein PHP-Projekt Suchergebnisse von Suchmaschinen verarbeiten möchte, dem stehe ich als Entwickler gerne zur Verfügung. Meine...
[Jobs & Stellenangebote]von mgutt
0
38
09.04.2015, 10:25
mgutt
hidemyass.com - http Proxyserver
Link: http://hidemyass.com Anbieterkennzeichnung: unbekannt Beschreibung: Der Proxyserver von hidemyass.com ist schnell. Leider erscheinen regelmäßig Popunder-Werbeflächen (unter dem eigentlichen...
von mgutt
0
13.929
28.11.2007, 00:56
mgutt
http:// Links im Wiki
Habe folgendes Problem: Wenn ich eine neune Wiki-Eintrag erstelle in dem ein Weblink [http://www.seite.com] enthalten ist und ich auf "Vorschau anzeigen" oder "Seite speichern" klicke kommt sofort ein "500 Internal Server...
von gizl
4
227
20.07.2011, 15:02
carchaias
http://www.retail-wholesale.com - Betrug!!!
Achtung keine Radios Navi, und andere Produkte bei http://www.retail-wholesale.com kaufen. Es wird nichts geliefert!!!...
von plorenz
0
295
27.02.2012, 10:16
plorenz
http://www.jp-sports.de/
http://www.jp-sports.de/ kennt jemand die internetseite und wie schnell liefern die ? bzw war sind sie vertrauenswürdig...
von s2k_1989
0
245
14.09.2012, 16:22
s2k_1989
© 2004 - 2016 www.programmierer-forum.de | Communities | Impressum |