Lesen von JSON-Daten mit einer REST-API
Problem
Einige Websites bieten a AUSRUHEN API zum Lesen von Daten, und oft ist die Antwort Text im JSON-Format. Wie bekommen wir das in JMP?
Lösung
Hier ist ein Beispiel mit der meetup.com-REST-API . Es ist relativ einfach, da es die übliche "GET"-Methode verwendet, die die Standardeinstellung für das Lesen von Webseiten ist. Ausgefeiltere Nachrichten verwenden die "POST"-Methode, die einen anderen Ansatz erfordern würde. Beim GET-Request werden die Eingaben an die URL selbst angehängt.
my key = load text file("meetupkey.txt"); // I stored my key in a text file<BR />event id = "246678392"; // the meetup id at the end of the event's URL<BR /><BR />url = "https://api.meetup.com/2/rsvps?key=" || my key || "&event_id=" || event id;
s = load text file( url ); // s contains the JSON result as a big string<BR /><BR />// We could store that in a file and then open the file, but here's a shortcut.<BR />// The Open() function can read data directly from a blob -- you just have to tell it the file type
b = char to blob(s);
dt = open(b, "JSON");<BR />// JMP interprets the JSON structured tree into a flat data table, with surprisingly good results.
Diskussion
Nachdem ich die Daten gelesen habe, räume ich oft etwas auf und erstelle praktische Spalten, wie zum Beispiel:
dt << New Column("reply time", formula(:results.mtime/1000 + 01Jan1970), format("ddmonyyyy"));
dt << New Column("count", formula(if(:results.response=="yes", :results.guests + 1, 0)));
Dies in einem Skript zu haben, macht es einfach, meine Daten nach Bedarf zu aktualisieren. Jetzt bin ich bereit, etwas zu erkunden..
Betreff: Lesen von JSON-Daten mit einer REST-APIGibt es eine Chance, daraus ein Tutorial-Video zu machen?
Betreff: Lesen von JSON-Daten mit einer REST-APIFantastisch.
Ich werde weitere [konkrete] Beispiele im Abschnitt JMP-Skripte veröffentlichen.
-Bryan
Betreff: Lesen von JSON-Daten mit einer REST-APIHallo Bryan,
Vielen Dank.Ich kann das Formular erfolgreich senden und empfangen und werde versuchen, dies in mein Skript zu integrieren.
Beifall,
Howard
Betreff: Lesen von JSON-Daten mit einer REST-API
Hallo Howard,
Wenn Sie die HTTP-Methode "POST" verwenden, "posten" Sie normalerweise Formulardaten.
Die genaue Methode wird von der RestAPI des Webdienstes definiert, da sie "POST", "PUT", "GET" usw. interpretieren kann, um bestimmte Dinge zu implizieren. (so was: https://www.w3schools.com/tags/ref_httpmethods.asp )
Wenn Sie eine HTTP-Anforderung verwenden (wie in Ihrem Beispiel), wird die Abfragezeichenfolge Teil der URL (wie:
" http://httpbin.org/post?key1=value1&key2=value2 ")
Wenn Sie in Ihrem Beispiel Daten POSTEN möchten, würden Sie Folgendes tun:
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields([[
"key1" => "value1", "key2" => "value2"
]])
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
Query String wird durch Form ersetzt.
Das Formular enthält zwei Elemente, Felder und Dateien, die beide assoziative Arrays sind.
Alternativ könnten Sie Ihren Code wie folgt zusammenstellen:
url = "http://httpbin.org/post";
my_fields = [=>];
for(i = 1, i <= 2, i++,
my_fields["key" || Char(i)] = "value" || Char(i);
);
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields(my_fields)
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
abhängig davon, wie Sie Ihre Schlüssel/Wert-Paare für das Formular erstellen möchten.
-Bryan
Betreff: Lesen von JSON-Daten mit einer REST-APIIch versuche, POST-Anforderungen mit tabellarischen Daten im JSON-Format zu senden.Der folgende Code wiederholt die POST-Anforderung mit den Eingaben als Argumente, ähnlich einer GET-Anforderung.
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Query String(
[[
"key1" => "value1", "key2" => "value2"
]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
Ich möchte jedoch mit Daten im JSON-Format POST.So würde ich es vom Mac OSX Terminal aus machen:
curl -d '{"table1":[{"id": 1,"value1": 10,"value2": 11},{"id": 2,"value1": 20,"value2": 21}],"table2":[{"id": 3,"value1": 30,"value2": 31},{"id": 4,"value1": 40,"value2": 41}]}' -H "Content-Type: application/json" -X POST http://httpbin.org/post
Ich vermute, dass ich "Query String" ersetzen muss, aber die Dokumentation ist nicht klar, wodurch es ersetzt werden soll.Jede Anleitung wäre willkommen.
Danke im Voraus!
Howard
Betreff: Lesen von JSON-Daten mit einer REST-APICool!
Das ist einfacher als der Code, den ich verwendet habe Hier . In JMP 13 kann es so einfach sein wie
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station positionPosition der Internationalen Raumstation
Beachten Sie den Zufallszahlentrick: Die URL sieht jedes Mal anders aus, sodass Sie keine alte, veraltete, zwischengespeicherte Kopie der Daten erhalten. Das ?r= am Ende startet einen Parameter namens r. Diese Website benötigt keine. Wenn es benannte Parameter wie „?time=3:00&place=space“ gab, können Sie Ihren eigenen Parameternamen hinzufügen, den die Site ignoriert: "?time=3:00&place=space&r=" (hier die Zufallszahl anheften).
In JMP 12 erhalten Sie den JSON-String: "{\!"iss_position\!": {\!"Breite\!": \!"-41.6934\!", \!"Längengrad\!": \!"-140.2738\!"}, \!"Zeitstempel\!": 1518704338, \!"Nachricht\!": \!"Erfolg\!"}"