// Y'a plein de commentaires du coup j'ai remarqué que la fonction est très dure à lire x) je l'ai recopié en dessous // sans les commentaires private void buttonPoloniex_Click(object sender, EventArgs e) { // Chronometre Stopwatch w = new Stopwatch(); w.Start(); string url = "https://poloniex.com/public?command=returnTicker"; // On créé une WebRequest qui va prendre notre url WebRequest req = WebRequest.Create(url); // On récupère la réponse using (WebResponse res = req.GetResponse()) { // using est un bloc qui prend une ressource et s'assure qu'elle soit détruite à la fin // (peu importe ce qui arrive, elle sera détruite, ça évite les fuites de mémoires) // la ressource est disponible uniquement dans la portée des { } et est détruite à la fin using (var reader = new StreamReader(res.GetResponseStream())) { // On récupère la réponse entière ici string responseJSON = reader.ReadToEnd(); // On utilise le Parser pour créer un objet JSON dynamic // (c'est un truc que je viens de découvrir ! il est résolu uniquement en runtime) dynamic json = System.Web.Helpers.Json.Decode(responseJSON); // On créé et on instancie notre liste de PoloniexResult List <PoloniexResult> listPX = new List <PoloniexResult>(); // On utilise un foreach pour cycler sur tous les résultats du parser // Ici "item" est un KeyValuePair (encore un truc que je viens de découvrir, c'est cool) // il est décomposé en <Key> et <Value>. // Key c'est une string, c'est le nom de l'item // Value c'est un object, donc ça peut être n'importe quoi foreach (var item in json) { // J'ai écrit une méthode qui convertit direct l'item en PoloniexResult, va la voir, // c'est important de comprendre comment utiliser ce KeyValuePair si tu veux utiliser ce Parser ! PoloniexResult pxRes = PoloniexResult.FromJSONDynamic(item); listPX.Add(pxRes); } w.Stop(); AddOutputLine("Time of query, parsing and inventoring " + listPX.Count + " objects : " + w.ElapsedMilliseconds + " ms"); } } }
/// <summary> /// Les résultats qu'on récupère depuis Poloniex sont sous cette forme : /// /// "BTC_BBR":{"id":6,"last":"0.00015809","lowestAsk":"0.00015858","highestBid":"0.00015809", /// "percentChange":"-0.11140464","baseVolume":"25.02305421","quoteVolume":"146999.50952728", /// "isFrozen":"0","high24hr":"0.00018692","low24hr":"0.00015012"} /// /// Si tu as vu mes commentaires plus haut, j'ai parlé de KeyValuePair /// /// Ici <Key> c'est BTC_BBR et <Value> c'est tout le reste entre { } /// donc pour l'utiliser, faut faire "item.Key" pour avoir son nom, /// et "item.Value.Champ" pour avoir le champ qui t'intéresse (Champ = lowestAsk par exemple) /// /// Au final, cette fonction prend un objet json et le parse en objet PoloniexResult pour etre plus facile à manipuler /// </summary> public static PoloniexResult FromJSONDynamic(dynamic item) { // Sert à faire comprendre à cte connerie d'ordi que le séparateur de décimal c'est un point et pas une virgule *^ù*$ù*ù NumberFormatInfo numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "." }; PoloniexResult pxRes = new PoloniexResult(); pxRes.Coin = item.Key; pxRes.ID = item.Value.id; // Chaque valeur est récupérée en string, donc je la parse en decimal pour la récupérer et pouvoir la manipuler pxRes.Last = decimal.Parse(item.Value.last, numberFormatInfo); pxRes.LowestAsk = decimal.Parse(item.Value.lowestAsk, numberFormatInfo); pxRes.HighestBid = decimal.Parse(item.Value.highestBid, numberFormatInfo); pxRes.PercentChange = decimal.Parse(item.Value.percentChange, numberFormatInfo); pxRes.BaseVolume = decimal.Parse(item.Value.baseVolume, numberFormatInfo); pxRes.QuoteVolume = decimal.Parse(item.Value.quoteVolume, numberFormatInfo); pxRes.IsFrozen = int.Parse(item.Value.isFrozen, numberFormatInfo); pxRes.High24hr = decimal.Parse(item.Value.high24hr, numberFormatInfo); pxRes.Low24hr = decimal.Parse(item.Value.low24hr, numberFormatInfo); return(pxRes); }