Exemplo n.º 1
0
        static void Main(string[] args)
        {
            LocalBitcoins_API lb_api = new LocalBitcoins_API("auth key", "auth secret"); // укажите свои учётные данные API отсюда https://localbitcoins.com/accounts/api/

            PlacesSerializationClass list_Places = lb_api.Places("53.950609", "40.475365");
            //AdListBitcoinsOnlineSerializationClass list_Ads = lb_api.AdsByFilter();
            Dictionary <string, TickerAllCurrenciesSerializationClass> list_TickerAllCurrencies = lb_api.TickerAllCurrencies;
            List <ClassCurrencies> list_currencies = lb_api.Currencies;
            AdListBitcoinsOnlineSerializationClass sell_bitcoin_online = lb_api.SellBitcoinsOnline(null, null, "rub", "qiwi"); // коды валют берём из: Currencies

            TradeItemSerializationClass[] list_trades = lb_api.Trades("RUB");

            Dictionary <string, PaymentMethodsSerializationClass> list_PaymentMethods = lb_api.PaymentMethods("RU");
            OrdersSerializationClass       list_orders       = lb_api.Orderbook("RUB");
            CountryCodesSerializationClass list_CountryCodes = (CountryCodesSerializationClass)lb_api.CountryCodes;
        }
        /// <summary>
        /// [async] запросить обновление BTC курса по публичным данным биржи LocalBitcoin
        /// </summary>
        protected override void ScheduleBodyAsyncAction()
        {
            SetStatus("Запрос к API-LocalBitcoins (не-авторизованый)");

            AdListBitcoinsOnlineSerializationClass adListBitcoins = lb_api.BuyBitcoinsOnline(null, null, CurrentFiatCurrency, PaymentMethod);

            if (EnableFullRawTracert)
            {
                SetStatus("response body: " + Environment.NewLine + lb_api.api_raw.responsebody, StatusTypes.DebugStatus);
            }

            if (adListBitcoins == null)
            {
                SetStatus("Ошибка получения данных с сервера API", StatusTypes.ErrorStatus);

                SetStatus("http request status:" + lb_api.api_raw.HttpRequestStatus, StatusTypes.ErrorStatus);

                SetStatus(null);
                return;
            }


            List <AdListItem> buy_bitcoin_online = adListBitcoins.data.ad_list.Where(x => x.data.get_min_amount_as_double() <= SumFilter && x.data.profile.feedback_score >= FilterProfileFeedbackScore && x.data.get_temp_price() > 0) as List <AdListItem>;

            if (buy_bitcoin_online is null)
            {
                buy_bitcoin_online = new List <AdListItem>();
            }

            string pagination_next = adListBitcoins.pagination?.next;

            while (adListBitcoins is null || (buy_bitcoin_online.Count() < 3 && !string.IsNullOrWhiteSpace(pagination_next)))
            {
                adListBitcoins = lb_api.BuyBitcoinsOnline(null, null, null, null, pagination_next);

                if (EnableFullRawTracert)
                {
                    SetStatus("response body: " + Environment.NewLine + lb_api.api_raw.responsebody, StatusTypes.DebugStatus);
                }

                if (adListBitcoins is null)
                {
                    SetStatus("Ошибка получения данных от сервера", StatusTypes.ErrorStatus);
                    SetStatus("HttpRequestStatus: " + lb_api.api_raw.HttpRequestStatus, StatusTypes.ErrorStatus);
                    SetStatus("Ещё одна попытка...");

                    continue;
                }

                SetStatus("Получено [" + adListBitcoins.data.ad_list.Count() + "] объявлений");

                pagination_next = adListBitcoins.pagination?.next;
                IEnumerable <AdListItem> ie_ads = adListBitcoins.data.ad_list.Where(x => x.data.get_min_amount_as_double() <= SumFilter && x.data.profile.feedback_score >= FilterProfileFeedbackScore && x.data.get_temp_price() > 0);
                if (ie_ads != null)
                {
                    SetStatus("После применения фильтров к объявлениям осталось [" + ie_ads.Count() + "] объявлений");

                    buy_bitcoin_online.AddRange(ie_ads.ToList());
                }
            }

            if (buy_bitcoin_online.Count() == 0)
            {
                SetStatus("Ошибка получения курса. Ни одного предложения.", StatusTypes.ErrorStatus);
                SetStatus(null);
                return;
            }

            BtcRateLocalbitcoinsModel btcRate = new BtcRateLocalbitcoinsModel()
            {
                CountRates = buy_bitcoin_online.Count, DateCreate = DateTime.Now, Information = "Снимок состяния Localbitcoins qiwi", MaxRate = double.MinValue, MinRate = double.MaxValue
            };

            foreach (AdListItem ad_item in buy_bitcoin_online.Take(3))
            {
                btcRate.MaxRate = Math.Max(btcRate.MaxRate, ad_item.data.get_temp_price());
                btcRate.MinRate = Math.Min(btcRate.MinRate, ad_item.data.get_temp_price());
            }
            lock (RatesBTC)
            {
                RatesBTC.Add(btcRate);

                RatesBTC = new ConcurrentBag <BtcRateLocalbitcoinsModel>(RatesBTC.OrderBy(x => x.DateCreate));
                if (MaxSizeTransit < RatesBTC.Count)
                {
                    RatesBTC = new ConcurrentBag <BtcRateLocalbitcoinsModel>(RatesBTC.Skip(RatesBTC.Count - MaxSizeTransit));
                }
            }

            SetStatus(null);

            SetStatus("В памяти зафиксирована информация Localbitcoins RatesBTC[" + RatesBTC.Count + "]");

            CurrentBtcRate = (btcRate.MaxRate + btcRate.MinRate) / 2;
            SetStatus(null);
        }