Example #1
0
        public async Task <IActionResult> GetSecuritiesInDb(string security_name, int source_security_id)
        {
            var g = Request.Form.Keys;

            var security_list = await _db.GetAllSourceSecurity();

            //RequestToFinam request_to_finam
            List <BrokerRepositorySecurity> listSecurities = await FinamArraySecuritiesNames.GetSecurityComboList(_db, security_name, source_security_id);

            //if(listSecurities)

            //В начале есть возможность откуда брать информацию об инструментах которые нужно качать
            ViewBag.SourceSecurityList         = security_list;
            ViewBag.SecName                    = security_name;
            ViewBag.BrokerRepositorySecurities = listSecurities;
            ViewBag.SecCount                   = listSecurities.Count();

            return(View("DownloadSecurities"));
        }
Example #2
0
        public async Task <IActionResult> InspectSecurity(string source_security_id)
        {
            var list_of_sources = await _db.GetAllSourceSecurity();

            ViewBag.SourceSecurityList = list_of_sources;

            //пытаюсь распарсить источник инструмента из комбобокс
            bool parsed = Int32.TryParse(source_security_id, out int intIdSource);

            if (!parsed || intIdSource < 0)
            {
                return(NotFound("Не удалось привести к int идентификатор, выбранного в комбобоксе инструмента."));
            }

            var securities_list = await FinamArraySecuritiesNames.InspectSecuritiesInDb(_db, intIdSource);

            await _db.UpdateAllSecuritiesFromSource(securities_list, intIdSource);

            return(View("SourcesSecurity"));
        }
Example #3
0
        public async Task <IActionResult> DownloadFileFromFinam(int combo_security_id, DateTime start_date, DateTime end_date)
        {
            StringBuilder sb = new StringBuilder();

            var security = await _db.GetSecurityById(combo_security_id);



            var           nowDate = start_date;
            StringBuilder sb2     = new StringBuilder();

            WebClient wb = new WebClient();

            while (nowDate <= end_date)
            {
                string url = FinamArraySecuritiesNames.GetTrades(security, start_date);

                HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

                await using (Stream stream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException()))
                    {
                        Dictionary <string, int> dict_headers = new Dictionary <string, int>();

                        string line = "";
                        //получил массив за день
                        while ((line = reader.ReadLine()) != null)
                        {
                            //разбил строку по запятым
                            //<DATE>,<TIME>,<LAST>,<VOL>,<ID>,<OPER>
                            var mass = line.Split(',');
                            //проверяю - заголовочная это строка или нет
                            if (line.Contains("<"))
                            {
                                if (mass.Contains("<DATE>"))
                                {
                                    dict_headers["<DATE>"] = Array.IndexOf(mass, "<DATE>");
                                }
                                if (mass.Contains("<TIME>"))
                                {
                                    dict_headers["<TIME>"] = Array.IndexOf(mass, "<TIME>");
                                }
                                if (mass.Contains("<LAST>"))
                                {
                                    dict_headers["<LAST>"] = Array.IndexOf(mass, "<LAST>");
                                }
                                if (mass.Contains("<VOL>"))
                                {
                                    dict_headers["<VOL>"] = Array.IndexOf(mass, "<VOL>");
                                }
                                if (mass.Contains("<ID>"))
                                {
                                    dict_headers["<ID>"] = Array.IndexOf(mass, "<ID>");
                                }
                                if (mass.Contains("<OPER>"))
                                {
                                    dict_headers["<OPER>"] = Array.IndexOf(mass, "<OPER>");
                                }

                                //после заполнения заголовочного файла переходу на следующую строку
                                continue;
                            }

                            //если нет заголовка то дальше ничего не делаю и сообщаю, что невозможно идентифицировать
                            if (!dict_headers.ContainsKey("<DATE>") ||
                                !dict_headers.ContainsKey("<TIME>") ||
                                !dict_headers.ContainsKey("<LAST>") ||
                                !dict_headers.ContainsKey("<VOL>") ||
                                !dict_headers.ContainsKey("<ID>") ||
                                !dict_headers.ContainsKey("<OPER>")
                                )
                            {
                                break;
                            }

                            //формируем данные для БД и проверяем если тики для данной даты и данного инструмента присутствуют
                            //то обрываем цикл

                            //TODO сделать процедуру для проверки тика к определенной дате, и если такой тик уже есть обрывать цикл
                            //DateTime date_in_db = new DateTime();
                            if (!DateTime.TryParse(mass[dict_headers["<DATE>"]], out DateTime date_in_db))
                            {
                                return(null);
                            }

                            var f = date_in_db;

                            sb2.Append(line);
                        }
                    }
                }
                response.Close();

                // await wb.DownloadStringTaskAsync(sb.ToString());


                nowDate = nowDate.AddDays(1);
            }

            //
            //    WebClient wb = new WebClient();
            //
            //    try
            //    {
            //        string res = await wb.DownloadStringTaskAsync(sb.ToString());
            //    }
            //    catch (Exception)
            //    {
            //        wb.Dispose();
            //        return "Ошибка при скачивании";
            //    }
            //
            //    //прибавляю один день
            //    nowDate = nowDate.AddDays(1);

            return(View("DownloadSecurities"));
        }