Lettura di dati JSON con un'API REST
Problema
Alcuni siti Web forniscono a RIPOSO API per leggere i dati e spesso la risposta è un testo in formato JSON. Come lo inseriamo in JMP?
Soluzione
Ecco un esempio usando il API REST di meetup.com . È relativamente semplice poiché utilizza il comune metodo "GET", che è l'impostazione predefinita per la lettura delle pagine web. I messaggi più elaborati utilizzano il metodo "POST" che richiederebbe un approccio diverso. Con la richiesta GET, gli input vengono aggiunti all'URL stesso.
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.
Discussione
Dopo aver letto i dati, spesso eseguo alcune operazioni di pulizia e creo colonne di convenienza, come:
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)));
Avere questo in uno script rende facile aggiornare i miei dati secondo necessità. Ora sono pronto per fare un po' di esplorazione..
Ri: Leggere i dati JSON con un'API RESTC'è qualche possibilità che questo possa essere trasformato in un video tutorial?
Ri: Leggere i dati JSON con un'API RESTFantastico.
Pubblicherò altri esempi [concreti] nella sezione degli script JMP.
-Bryan
Ri: Leggere i dati JSON con un'API RESTCiao Bryan,
Grazie mille.Sono in grado di inviare e ricevere correttamente il modulo e cercherò di inserirlo nel mio script.
Saluti,
Howard
Ri: Leggere i dati JSON con un'API REST
Ciao Howard,
In genere, quando si utilizza il metodo HTTP "POST", si "pubblicano" i dati del modulo.
Il metodo esatto è definito dalla RestAPI del servizio Web poiché possono interpretare "POST", "PUT", "GET", ecc. Per implicare determinate cose. (come questo: https://www.w3schools.com/tags/ref_httpmethods.asp )
Quando usi la richiesta HTTP (come nel tuo esempio), la stringa di query diventa parte dell'URL (come:
" http://httpbin.org/post?key1=value1&key2=value2 ")
Nel tuo esempio, se vuoi POST dati, dovresti fare questo:
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 );
La stringa di query viene sostituita con Form.
Il modulo contiene due elementi, Fields e Files, entrambi array associativi.
In alternativa, puoi comporre il tuo codice come:
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 );
a seconda di come si desidera creare le coppie chiave/valore per il modulo.
-Bryan
Ri: Leggere i dati JSON con un'API RESTSto cercando di inviare richieste POST con dati tabulari formattati come JSON.Il codice seguente fa eco alla richiesta POST con gli input come args, simile a una richiesta GET.
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 );
Tuttavia, voglio POST con i dati in formato JSON.Ecco come lo farei dal terminale Mac OSX:
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
Sospetto di dover sostituire "Query String", ma la documentazione non è chiara su cosa sostituirla.Qualsiasi guida sarebbe apprezzata.
Grazie in anticipo!
Howard
Ri: Leggere i dati JSON con un'API RESTFreddo!
Questo è più facile del codice che ho usato Qui . In JMP 13 può essere semplice come
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station positionPosizione della Stazione Spaziale Internazionale
Nota il trucco del numero casuale: l'URL ha un aspetto diverso ogni volta in modo da non ottenere una copia dei dati vecchia, obsoleta e memorizzata nella cache. La ?r= alla fine avvia un parametro chiamato r. Questo sito web non ne ha bisogno. Se c'erano parametri denominati, come "?time=3:00&place=space" puoi aggiungere il tuo nome di parametro che il sito ignorerà: "?time=3:00&place=space&r=" (aggiungi qui il numero casuale).
In JMP 12 otterrai la stringa JSON: "{\!"iss_position\!": {\!"latitudine\!": \!"-41.6934\!", \!"longitudine\!": \!"-140.2738\!"}, \!"timestamp\!": 1518704338, \!"messaggio\!": \!"successo\!"}"