Demander plusieurs points de terminaison API dans l’appel Oraclize

AlexG

Demander plusieurs points de terminaison API dans l’appel Oraclize


Je souhaite appeler plusieurs points de terminaison API. Dans mon cas, c’est parce que je ne veux pas stocker l’intégralité de la réponse JSON dans mon contrat.

Si je voulais obtenir les points de terminaison ?color=red et ?color=blue , puis-je utiliser un appel comme celui-ci?

 oraclize_query ( "URL" , 
                "json(http://my.api.com/).thing.stuff.0" , 
                "color=red" , 
                "color=blue" ); 

C’est une supposition totale. Et cela ne me permettrait pas de choisir différents chemins JSON (thing.stuff.0), ce que je voudrais.

Mais je ne vois aucune documentation à ce sujet. Je sors cette partie du code source :

 contract OraclizeI   { address public  cbAddress ; 
     function  query ( uint  _timestamp ,   string  _datasource ,   string  _arg )  external payable returns ( bytes32 _id ); 
     function  query_withGasLimit ( uint  _timestamp ,   string  _datasource ,   string  _arg ,   uint  _gaslimit )  external payable returns ( bytes32 _id ); 
     function  query2 ( uint  _timestamp ,   string  _datasource ,   string  _arg1 ,   string  _arg2 )   public  payable returns ( bytes32 _id ); 
     ... 
 } 

Crissi Mariam Robert

Veuillez mettre à jour votre question avec callback

Réponses


 Crissi Mariam Robert

Le premier id paramètre dans le __callback traitera différentes demandes dans la même fonction de rappel. L’exemple suivant traite de plusieurs demandes.

  contract verifySettlement is  usingOraclize { 

            uint   public  price ; 
            string   public  landingtime ; 
            string   public  expectedtime ; ` string public tempvalue; event Log(string text); enum oraclizeState { ForActual, ForExpected } struct oraclizeCallback { oraclizeState oState; } mapping (bytes32 => oraclizeCallback) public oraclizeCallbacks; function verifySettlement() payable { Log("Contract created."); getActualFlightDetails(); getExpectedFlightDetails(); } function getActualLandingHour() constant returns (string) { return landingtime; } function getExpectedLandingHour() constant returns (string) { return expectedtime; } function __callback(bytes32 _myid, string _result) { require (msg.sender == oraclize_cbAddress()); oraclizeCallback memory o = oraclizeCallbacks[myid]; if (o.oState == oraclizeState.ForActual) { Log("1111111111111111111111111"); } else if(o.oState == oraclizeState.Forxpected) { Log("2222222222222222222222222222222"); } } function getActualFlightDetails() payable { Log("Oraclize query was sent, waiting for the answer for getting actual flight details.."); bytes32 queryId=oraclize_query("URL","http://169.53.241.139:5000/actual/flight/1"); oraclizeCallbacks[queryId] = oraclizeCallback(oraclizeState.ForActual); } function getExpectedFlightDetails() payable { Log("Oraclize query was sent, waiting for the answer for getting actual flight details.."); bytes32 queryId=oraclize_query("URL","http://169.53.241.139:5000/expected/flight/1"); oraclizeCallbacks[queryId] = oraclizeCallback(oraclizeState.ForExpected); } } 

Références: – 1) https://medium.com/@crissimrobert/setting-up-of-oraclize-service-in-smart-contracts-9693049b2151

2) Comment invoquer plusieurs requêtes oracalisées à partir d’un même contrat

AlexG

Cette approche est bien meilleure que ce que j’essayais!

AlexG

Je ne vais pas encore l’accepter car je voudrais quand même savoir comment appeler par exemple query2 ou queryN. Dans le sens de la requête vue dans ce billet , où les paramètres API sont passés en tant qu’arguments distincts dans l’ oraclize_query fonction oraclize_query J’apprécie vraiment votre réponse et j’ai voté positivement, mais ce n’est pas exactement ce que je voulais en venir avec la question

Crissi Mariam Robert

Avez-vous besoin de connaître la requête dynamique? Comment mettre à jour la requête avec un paramètre dynamique? N’est-ce pas?


 Lucas Aschenbach

Je n’ai pas encore essayé cela mais essentiellement, vous pouvez faire un appel de calcul à Oraclize.

 oraclize_query ( "computation" ,   [ "<IPFS Hash>" ,   ...   ]) 

Vous devez télécharger un script python sur le réseau IPFS, extraire toutes les valeurs dont vous avez besoin du fichier JSON et les fusionner ensuite en une seule chaîne. Ici, vous pouvez simplement utiliser par exemple un «,» pour séparer les différents résultats, puis ajouter une fonction decode () à votre contrat intelligent pour réfracter la chaîne dans les différents résultats.

J’espère que cela aide.

 

#de, API, dans, demander, l’appel, oraclize, plusieurs, points, Terminaison

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *