Ejemplo n.º 1
0
        // 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");
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }