Salut Anders,
Oui ça
query_terms = dt3:organism id << get values;
est fondamentalement la clé pour l'utiliser pour obtenir toutes ces valeurs.
Et vous avez raison, il y a une limitation avec Sequoia ici, donc si vous devez le faire avec 1000
La réponse que Sequoia vous donne a des limites similaires à la vue Web, elle n'en montre que beaucoup et vous devez ensuite rechercher la prochaine "page" de résultats. Une solution pour le moment serait que vous ajoutiez un peu plus de code qui compte le nombre d'éléments dans votre liste query_items, puis vous bouclez la requête pour récupérer des sous-ensembles de ces données à chaque tour de la boucle.
Quelque chose comme loops = N items (query_terms) / (number_of_max_results_from_Sequoia) puis une boucle For i = 1, i
J'espère que cela pourra aider,
Alex
Merci Alexandre,
Je l'ai fait fonctionner avec des tables de données plus petites, mais je n'obtiens aucune réponse lors de l'utilisation de listes plus grandes (> 1000 entrées). Est-ce peut-être une limitation dans Sequoia?
Sinon, je pense que le script rappelle les données très rapidement.
Voici une petite modification que j'ai faite pour appeler ~ 10 entrées d'ID d'organisme à partir d'une table de données.
dt3 = Open("N:\Projects\High pH Amylase\ADW_GODperid\Summary data\Joined_data_Screening to FSW.xlsx",
0,
0,
0,
0);
Namespace("JSON") << show contents;
base_url = "http://nzdb.nzcorp.net/organism/all/large" || "?accept=application%2Fjson";
query_columns = {"identifier", "code", "synonym", "from"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = dt3:organism id << get values;
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) );
close (dt3, nosave);
Salut,
c'est possible, mais vous devez le script vous-même car il n'y a pas de script préconfiguré prêt. Cependant, je passe juste un peu de temps à donner un petit exemple. Vous pouvez probablement comprendre comment l'utiliser pour obtenir les informations que vous souhaitez de SEQUOIA. Ne vous attendez pas à ce que cela fonctionne très vite, pour cela il existe une manière différente, mais cela nécessite plus de pré-configuration (en bref: ajoutez le lac de données comme source de données dans JMP, puis utilisez des requêtes SQL pour obtenir les informations que vous voudriez aime obtenir).
Le script que j'ai inclus consiste en un gros morceau de code qui analyse la réponse au format JSON provenant de SEQUOIA, vous n'avez rien à faire avec cela. En dessous se trouvent quelques lignes de code qui vous montrent comment interroger et obtenir les informations dans une table JMP, que vous pouvez ensuite manipuler dans JMP pour les joindre à vos données.
Notez que vous devrez changer échantillon purifié selon où / quoi dans SEQUOIA vous recherchez.
C'est la partie du code que vous auriez besoin de manipuler pour obtenir les données qui vous intéressent dans JMP:
base_url = "http://nzdb.nzcorp.net/purifiedsample/all/large" || "?accept=application%2Fjson";
query_columns = {"organism_code","identifier", "a280"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = {"U6ESJ","U8GF4"};
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) ); (le code ci-dessus nécessite des fonctions supplémentaires qui sont incluses dans le script jsl joint à ce post, veuillez télécharger le fichier * .jsl pour exécuter l'exemple)
Pour référence, voici le script complet:
New Namespace("JSON",
{
Char Escape = Function({c},
Match(c,
"\!"", "\!"",
"b", "\!u0008",
"f", "\!u000C",
"n", "\!u000A",
"r", "\!u000D",
"t", "\!u0009",
c
)
);
,
Unicode Escape = Function( {u},
u = "\!"\!\!u" || u || "\!"";
Parse( u );
);
,
Pattern Name =
"\!"" // leading quotation mark
+ pattest( value = ""; 1) // init string accumulator
+ patrepeat(
(Pat break( "\!\\!"" ) >> temp + Pat Test( value ||= temp; 1; )) // run of characters that are not \ or "
|
("\u"+patlen(4)>>temp+pattest(value ||= JSON:Unicode Escape(temp);1)) // \uXXXX
|
("\"+patlen(1)>>temp+pattest(value ||= JSON:Char Escape(temp);1)) // \", for example...embedded quotation mark
)
+ "\!""; // trailing quotation mark
,
Pattern Number = patspan("0123456789-+eE.") >> temp + pattest(value=num(temp);1);
,
starttime=0;
,
progressTable=0;
,
progress = Function( {p},
If( Is Empty( JSON:progressTable ),
JSON:progressTable = New Table( "JSON Parsing Progress Log", New Column( "Time" ), New Column( "Percent" ) );
JSON:progressTable << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Time ), Y( :Percent ) ),
Elements(
Points( X, Y, Legend( 1 ), Jitter( 1 ) ),
Line Of Fit(
X,
Y,
Legend( 3 ),
Confidence of Fit( 1 ),
Confidence of Prediction( 0 ),
Degree( "Linear" ),
Equation( 0 ),
Root Mean Square Error( 0 ),
R²( 0 )
)
)
);
);
JSON:progressTable << addrows( 1 );
JSON:progressTable:time = Tick Seconds() - JSON:starttime;
JSON:progressTable:percent = 100 * p;
);
,
PatternParse = patpos(0) + patrepeat(patpos(/* remember how far we parsed for error message */)>>failpos
/* comment out this line for a little more speed */+pattest(if(tickseconds()-lasttime>1,JSON:progress(failpos/totalLen);lasttime=tickseconds();wait(0));1)
+patfence(/* fence off previously parsed text...ain't no going back */)
+( patregex("\s*") // ignore whitespace
| JSON:Pattern Name
| ( ":" + pattest(key=value;1) )
| JSON:Pattern Number
| ("true" + pattest(value = 1;1))
| ("false" + pattest(value = 0;1))
| ("null" + pattest(value = .;1))
| ("[" + pattest(Insert Into( stack, {{}}, 1 );value = Empty();1))
| ("{" + pattest(Insert Into( stack, Associative Array(), 1 );value = Empty();Insert Into( keys, key, 1 );1))
| ("]" + pattest(If( !Is Empty( value ),Insert Into( stack[1], value, 1 /*needs reverse later*/ ));value = stack[1];value=reverse(value);Remove From( stack, 1 );1))
| ("}" + pattest(If( !Is Empty( value ),stack[1][key] = value);value = stack[1];Remove From( stack, 1 );key = keys[1];Remove From( keys, 1 );1))
| ("," + pattest(If( Is List( stack[1] ),Insert Into( stack[1], value, 1 /*needs reverse later*/ ),stack[1][key] = value);value = Empty();1))
)) + patrpos(0);
,
Parse = Function( {json},
{stack = {}, keys = {}, key = "", value = Empty(), temp=0,totalLen = length(json),lasttime = tickseconds(),failpos=0},
JSON:starttime = tickseconds();
JSON:progressTable=empty();
if( !try(patmatch(json,JSON:PatternParse),0), Throw( "unrecognized JSON at " || Char( failpos ) ));
value;
);
,
Append Rows = Function( {dt, start, prefix, a},
{key, value, dc, c, nc, r, delta, added = 0},
If(
Is List( a ),
For( r = 1, r <= Length( a ), r++,
delta = JSON:Append Rows( dt, start + added, prefix, a[r] );
added += delta;
);
// fill empty cells
nc = N Col( dt );
For( c = 1, c <= nc, c++,
dc = Column( dt, c );
value = dc[start];
For( r = start + 1, r <= N Row( dt ), r++,
If( dc[r] == "",
dc[r] = value
)
);
);,
Is Associative Array( a ),
key = a << First;
While( !Is Empty( key ),
value = a[key];
delta = JSON:Append Rows( dt, start, If( prefix == "", key, prefix || "." || key ), value );
added = Max( added, delta );
key = a << Next( key );
);,
// else a literal
If( prefix == "",
prefix = "v"
); // can only happen in a top array of literals
dc = Try( Column( dt, prefix ), dt << New Column( prefix, "Character" ) );
added = 1; // don't count padding
If( N Rows( dt ) < start,
dt << Add Rows( start - N Rows( dt ) )
);
// fill to end in case a previous column was a JSON array
For( r = start, r <= N Rows( dt ), r++,
dc[r] = Char( a )
);
);
added;
);
,
Make Table = Function( {json},
{dt},
If( Is String( json ),
json = JSON:Parse( json )
);
dt = New Table();
dt << Begin Data Update();
JSON:Append Rows( dt, N Rows( dt ) + 1, "", json );
dt << End Data Update();
dt;
);
}); // end namespace
Delete Globals();
Namespace("JSON") << show contents;
base_url = "http://nzdb.nzcorp.net/purifiedsample/all/large" || "?accept=application%2Fjson";
query_columns = {"organism_code","identifier", "a280"};
cols = "&cols=" || Concat Items(query_columns, "%2C" );
query_terms = {"U6ESJ","U8GF4"};
query = "&q=" || Concat Items(query_terms, " OR " );;
url = base_url ||cols || query;
show(url);
dt = JSON:Make Table( open(url, HTML Table(2)) );