예제 #1
0
        public ExchangeRateTicket DownloadTicketForDate(DateTime date)
        {
            ValidateDate(date);
            string url   = String.Format("{0}{1}{2}", URL_FRONT, date.ToString("yyyy-MM-dd"), URL_END);
            string input = null;

            if (DownloadXMLText(url, out input))
            {
                ExchangeRateTicket ticket = ParseDayTicket(input, date);
                if (ticket != null)
                {
                    return(ticket);
                }
                else
                {
                    new CSOBInvalidData("This ticket doesn't exist.");
                }
                return(null);
            }
            else
            {
                new CSOBInvalidDate(input);
                return(null);
            }
        }
예제 #2
0
        // Converting of raw data to managable form
        private ExchangeRateTicket ParseDayTicket(string text, DateTime date)
        {
            byte[]               bytes  = Encoding.UTF8.GetBytes(text);
            ExchangeRate         er     = null;
            ExchangeRateTicket   ticket = new ExchangeRateTicket();
            List <ICurrencyData> data   = new List <ICurrencyData>();

            using (MemoryStream ms = new MemoryStream(bytes))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(ExchangeRate));
                er = (ExchangeRate)serializer.Deserialize(ms);
            }
            if (er.Country != null)
            {
                foreach (var cur in er.Country)
                {
                    data.Add(new ERDataBase(cur.ID, null, cur.Country, cur.quota, (float)cur.FXcashless.Buy, (float)cur.FXcashless.Sale));
                    ticket.AddExchangeRateData(data[data.Count - 1]);
                }
                ticket.TicketDate = date;
                return(ticket);
            }
            else
            {
                return(null);
            }
        }
예제 #3
0
        public List <ICurrencyMetada> DownloadCurrencyMetada()
        {
            ExchangeRateTicket ticket = DownloadTodaysTicket();

            ICurrencyData[]        data     = ticket.GetExchangeRateData();
            List <ICurrencyMetada> metaData = new List <ICurrencyMetada>(data.Length);

            return(metaData);
        }
예제 #4
0
        private void ParseDayTicketHeader(string[] header, ref ExchangeRateTicket ticket)
        {
            string[] firstLine = header[0].Split(' ', StringSplitOptions.RemoveEmptyEntries);
            string[] headers   = header[1].Split('|', StringSplitOptions.RemoveEmptyEntries);

            DateTime ticketDate = DateTime.ParseExact(firstLine[0], "dd.MM.yyyy", CultureInfo.CurrentCulture);

            ticket.TicketDate = ticketDate;
        }
예제 #5
0
        public ExchangeRateTicket DownloadTicketForDate(DateTime date)
        {
            this.ValidateDate(date);
            var                dateString = date.ToString("dd.MM.yyyy");
            string             url        = $"{this.URL_FOR_DAY_TICKET}?date={dateString}";
            string             text       = this.DownloadTicketText(url);
            ExchangeRateTicket ticket     = this.ParseDayTicket(text);

            return(ticket);
        }
예제 #6
0
        private ExchangeRateTicket ParseYearExchangeRateData(string[] section, List <ICurrencyMetada> currencyInfos)
        {
            ExchangeRateTicket ticket = new ExchangeRateTicket();

            for (int i = 1; i < section.Length; i++)
            {
                float           buy    = float.Parse(section[i], CultureInfo.GetCultureInfo("cs-CZ"));
                ICurrencyMetada metada = currencyInfos[i - 1];

                ERDataBase data = new ERDataBase(metada, buy, null);
                ticket.AddExchangeRateData(data);
            }
            return(ticket);
        }
예제 #7
0
        private List <ExchangeRateTicket> ParseYearBody(string[] body, ref List <ICurrencyMetada> metadata)
        {
            List <ExchangeRateTicket> tickets = new List <ExchangeRateTicket>(body.Length);

            foreach (string line in body)
            {
                string[]           sections = line.Split('|');
                DateTime           date     = DateTime.ParseExact(sections[0], "dd.MM.yyyy", CultureInfo.CurrentCulture);
                ExchangeRateTicket ticket   = this.ParseYearExchangeRateData(sections, metadata);
                ticket.TicketDate = date;
                tickets.Add(ticket);
            }
            return(tickets);
        }
예제 #8
0
        // Converting of raw data to managable form
        private ExchangeRateTicket ParseDayTicket(string text, DateTime date)
        {
            List <RootObject>    obj    = JsonConvert.DeserializeObject <List <RootObject> >(text);
            ExchangeRateTicket   ticket = new ExchangeRateTicket();
            List <ICurrencyData> data   = new List <ICurrencyData>();

            foreach (var cur in obj[0].exchangeRates)
            {
                data.Add(new ERDataBase(cur.currencyISO, cur.currencyFullName, cur.country, cur.currencyUnit, cur.cashBuy, cur.cashSell));
                ticket.AddExchangeRateData(data[data.Count - 1]);
            }
            ticket.TicketDate = date;
            return(ticket);
        }
예제 #9
0
        private void ParseDayTicketBody(string[] body, ref ExchangeRateTicket ticket)
        {
            foreach (string line in body)
            {
                string[] sections = line.Split('|', StringSplitOptions.RemoveEmptyEntries);
                string   country  = sections[0];
                string   name     = sections[1];
                int      quantity = int.Parse(sections[2]);
                string   isoName  = sections[3];
                float    buy      = float.Parse(sections[4], CultureInfo.GetCultureInfo("cs-CZ"));

                ICurrencyData data = new ERDataBase(isoName, name, country, quantity, buy, null);
                ticket.AddExchangeRateData(data);
            }
        }
예제 #10
0
        // Gets the ticket for this day
        public ExchangeRateTicket DownloadTodaysTicket()
        {
            string jsonInput = null;

            if (DownloadTicketText(URL_CURRENT_DAY, out jsonInput))
            {
                ExchangeRateTicket ticketOutput = this.ParseDayTicket(jsonInput, DateTime.Today);
                return(ticketOutput);
            }
            else
            {
                new KBInvalidDate(jsonInput);
                return(null);
            }
        }
예제 #11
0
        public static ExchangeRateTicket ParseContent(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                throw new ArgumentException("Argument null or empty.", nameof(content));
            }

            var lines = content.Split('\r', '\n');

            //first line is date with id, seond line is header
            if (lines.Length < 2)
            {
                return(null);
            }

            var ticket = new ExchangeRateTicket();;

            var dateIdMatch = Regex.Match(lines[0], @"(.*?)\s*#\s*(\d+)");

            var dateGroup = dateIdMatch.Groups[0];

            if (dateGroup.Success)
            {
                if (DateTime.TryParse(dateGroup.Value, out var dt))
                {
                    ticket.Date = dt;
                }
            }

            var idGroup = dateIdMatch.Groups[1];

            if (idGroup.Success)
            {
                if (int.TryParse(idGroup.Value, out var id))
                {
                    ticket.Id = id;
                }
            }

            //first line is date with id, seond line is header
            var itemLines = lines.Skip(2).ToList();

            ticket.Items = ParseItems(itemLines).ToList();

            return(ticket);
        }
예제 #12
0
        // Gets the ticket for a specific day
        public ExchangeRateTicket DownloadTicketForDate(DateTime date)
        {
            ValidateDate(date);
            string jsonInput = null;
            string urlEnding = date.ToString("yyyy-MM-dd") + "T06:00:00.00Z"; //T06 = 6am - It's the first hour in the day which has upadated ticket for that day. 5am gets you ticket from previous day.

            if (DownloadTicketText(URL_SPECIFIC_DATE + urlEnding, out jsonInput))
            {
                ExchangeRateTicket ticketOutput = this.ParseDayTicket(jsonInput, date);
                return(ticketOutput);
            }
            else
            {
                new KBInvalidDate(jsonInput);
                return(null);
            }
        }
예제 #13
0
        private ExchangeRateTicket ParseDayTicket(string text)
        {
            string[] lines = text.Split('\n', StringSplitOptions.RemoveEmptyEntries);
            if (lines.Length < 2)
            {
                throw new CNBInvalidData(message: "Invalid number of lines");
            }

            string[] header = lines.ToList().GetRange(0, 2).ToArray();
            string[] body   = lines.ToList().GetRange(2, lines.Length - 2).ToArray();

            ExchangeRateTicket ticket = new ExchangeRateTicket();

            this.ParseDayTicketHeader(header, ref ticket);
            this.ParseDayTicketBody(body, ref ticket);

            return(ticket);
        }
예제 #14
0
        public List <ICurrencyMetada> DownloadCurrencyMetada()
        {
            ExchangeRateTicket ticket = DownloadTodaysTicket();

            return(ticket.GetExchangeRateData().ToList <ICurrencyMetada>());
        }