Lire des données JSON avec une API REST
Problème
Certains sites Web proposent un REPOS API pour lire les données, et souvent la réponse est du texte au format JSON. Comment pouvons-nous intégrer cela dans JMP ?
Solution
Voici un exemple utilisant le API REST meetup.com . C'est relativement simple puisqu'il utilise la méthode courante "GET", qui est la méthode par défaut pour la lecture de pages Web. Les messages plus élaborés utilisent la méthode "POST" qui nécessiterait une approche différente. Avec la requête GET, les entrées sont ajoutées à l'URL elle-même.
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.
Discussion
Après avoir lu les données, je fais souvent un peu de nettoyage et je crée des colonnes pratiques, telles que :
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)));
Avoir cela dans un script facilite l'actualisation de mes données selon les besoins. Maintenant, je suis prêt à faire un peu d'exploration.
Re : Lire des données JSON avec une API RESTY a-t-il une chance que cela puisse être transformé en vidéo tutoriel ?
Re : Lire des données JSON avec une API RESTFantastique.
Je publierai d'autres exemples [concrets] dans la section Scripts JMP.
-Bryan
Re : Lire des données JSON avec une API RESTSalut Bryan,
Merci beaucoup.Je suis en mesure d'envoyer et de recevoir le formulaire avec succès et je vais tenter de l'intégrer dans mon script.
Acclamations,
Howard
Re : Lire des données JSON avec une API REST
Salut Howard,
Généralement, lorsque vous utilisez la méthode HTTP « POST », vous « publiez » des données de formulaire.
La méthode exacte est définie par RestAPI du service Web car ils peuvent interpréter "POST", "PUT", "GET", etc. pour impliquer certaines choses. (comme ça: https://www.w3schools.com/tags/ref_httpmethods.asp )
Lorsque vous utilisez une requête HTTP (comme dans votre exemple), la chaîne de requête devient une partie de l'URL (comme :
" http://httpbin.org/post?key1=value1&key2=value2 ")
Dans votre exemple, si vous souhaitez POST des données, procédez comme suit :
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 chaîne de requête est remplacée par Form.
Le formulaire contient deux éléments, des champs et des fichiers, qui sont tous deux des tableaux associatifs.
Alternativement, vous pouvez composer votre code comme :
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 );
en fonction de la manière dont vous souhaitez créer vos paires clé/valeur pour le formulaire.
-Bryan
Re : Lire des données JSON avec une API RESTJ'essaie de soumettre des requêtes POST avec des données tabulaires au format JSON.Le code suivant fait écho à la requête POST avec les entrées sous forme d'arguments, similaire à une requête 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 );
Cependant, je souhaite POST avec des données au format JSON.Voici comment je procéderais depuis le terminal 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
Je soupçonne que je dois remplacer "Query String", mais la documentation ne précise pas par quoi la remplacer.Toute orientation serait appréciée.
Merci d'avance !
Howard
Re : Lire des données JSON avec une API RESTCool!
C'est plus simple que le code que j'ai utilisé ici . Dans JMP 13, cela peut être aussi simple que
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station positionPosition de la Station spatiale internationale
Notez l'astuce des nombres aléatoires : l'URL est différente à chaque fois afin que vous n'obteniez pas une copie ancienne, obsolète et mise en cache des données. Le ?r= à la fin démarre un paramètre nommé r. Ce site Web n'en a pas besoin. S'il y avait des paramètres nommés, comme "?time=3:00&place=space", vous pouvez ajouter votre propre nom de paramètre que le site ignorera : "?time=3:00&place=space&r=" (ajoutez le nombre aléatoire ici).
Dans JMP 12, vous obtiendrez la chaîne JSON : "{\!"iss_position\!" : {\!"latitude\!": \!"-41.6934\!", \!"longitude\!": \!"-140.2738\!"}, \!"horodatage\!" : 1518704338, \!"message\!" : \!"succès\!"}"