コード例 #1
0
        private ComposicaoCapital ParseComposicaoCapitalCvm(string content)
        {
            var parser = new HtmlParser();
            var doc    = parser.Parse(content);

            ComposicaoCapital capital = new ComposicaoCapital();
            var div   = doc.QuerySelector("#UltimaTabela");
            var table = div.Children.Where(e => e.LocalName == "table").First() as IHtmlTableElement;

            bool tesouraria = false;

            foreach (var row in table.Rows)
            {
                if (row.Cells[0].TextContent.Contains("Ações")) //primeira linha
                {
                    //obtem a data da segunda célula
                    capital.Date = DateTime.ParseExact(row.Cells[1].TextContent.Trim(), "dd/MM/yyyy", new CultureInfo("pt-BR"));
                }
                if (row.Cells[0].TextContent.Contains("Capital")) //segunda linha
                {
                    // acoes no mercado
                    tesouraria = false;
                    continue;
                }
                if (row.Cells[0].TextContent.Contains("Tesouraria"))
                {
                    // acoes em tesouraria
                    tesouraria = true;
                    continue;
                }
                if (row.Cells[0].TextContent.Contains("Ordinárias"))
                {
                    var value = Convert.ToDecimal(row.Cells[1].TextContent.Trim());
                    if (tesouraria)
                    {
                        capital.OrdinariasTesouraria = value;
                    }
                    else
                    {
                        capital.OrdinariasCirculantes = value;
                    }
                }
                if (row.Cells[0].TextContent.Contains("Preferenciais"))
                {
                    var value = Convert.ToDecimal(row.Cells[1].TextContent.Trim());
                    if (tesouraria)
                    {
                        capital.PreferenciaisTesouraria = value;
                    }
                    else
                    {
                        capital.PrefernciaisCirculantes = value;
                    }
                }
            }

            return(capital);
        }
コード例 #2
0
        public async Task ScrapComposicaoCapital(DocLinkInfo link)
        {
            if (!DoINeedToExtractComposicaoCapital(link))
            {
                return;
            }

            var fileinfo = new FileInfo(Company.GetFinDataCapitalFileName(link));

            var url = "";

            if (link.LinkType == DocLinkInfo.LinkTypeEnum.Bovespa)
            {
                url = "http://www2.bmfbovespa.com.br/dxw/FormDetalheDXWG1CompCapital.asp";
            }
            else //cvm
            {
                var codTipoDocumento = 0;
                if (link.DocType == DocInfoType.ITR)
                {
                    codTipoDocumento = 3;
                }
                if (link.DocType == DocInfoType.DFP)
                {
                    codTipoDocumento = 4;
                }
                url = $"https://www.rad.cvm.gov.br/ENETCONSULTA/frmDadosComposicaoCapitalITR.aspx?Grupo=&Quadro=&NomeTipoDocumento=&Titulo=&Empresa=&DataReferencia=&Versao=&CodTipoDocumento={codTipoDocumento}&NumeroSequencialDocumento={link.NumeroSequencialDocumento}&NumeroSequencialRegistroCvm={Company.CodigoCVM}&CodigoTipoInstituicao=2";
            }

            var content = await GetAsync(link, url);

            ComposicaoCapital capital = null;

            if (link.LinkType == DocLinkInfo.LinkTypeEnum.Bovespa)
            {
                capital = ParseComposicaoCapitalBovespa(content);
            }
            else //cvm
            {
                capital = ParseComposicaoCapitalCvm(content);
            }

            capital.Save(fileinfo.FullName);
        }
コード例 #3
0
        private ComposicaoCapital ParseComposicaoCapitalBovespa(string content)
        {
            var parser = new HtmlParser();
            var doc    = parser.Parse(content);

            ComposicaoCapital capital = new ComposicaoCapital();
            var tds_titles            = doc.QuerySelectorAll("td.label");

            var table = tds_titles[0].ParentElement.ParentElement.ParentElement as IHtmlTableElement;

            // walk the rows

            //var tr = tr_title.NextElementSibling as IHtmlTableRowElement;
            //if (tr.Cells[0].TextContent.Contains("Integralizado"))
            //{
            //    tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}

            //// Ordinárias mercado
            //if (tr.Cells[0].TextContent.Contains("Ordinárias"))
            //{
            //    var text = tr.Cells[1].TextContent.Trim();
            //    capital.OrdinariasCirculantes = (string.IsNullOrWhiteSpace(text) ? 0 : Convert.ToDecimal(text));
            //    tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}

            //// Preferenciais mercado
            //if (tr.Cells[0].TextContent.Contains("Preferenciais"))
            //{
            //    var text = tr.Cells[1].TextContent.Trim();
            //    capital.PrefernciaisCirculantes = (string.IsNullOrWhiteSpace(text) ? 0 : Convert.ToDecimal(text));
            //    tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}

            //if (tr.Cells[0].TextContent.Contains("Tesouraria"))
            //{
            //    tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}

            //// Ordinárias tesouraria
            //if (tr.Cells[0].TextContent.Contains("Ordinárias"))
            //{
            //    var text = tr.Cells[1].TextContent.Trim();
            //    capital.OrdinariasTesouraria = (string.IsNullOrWhiteSpace(text) ? 0 : Convert.ToDecimal(text));
            //    tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}

            //// Preferenciais tesouraria
            //if (tr.Cells[0].TextContent.Contains("Preferenciais"))
            //{
            //    var text = tr.Cells[1].TextContent.Trim();
            //    capital.PreferenciaisTesouraria = (string.IsNullOrWhiteSpace(text) ? 0 : Convert.ToDecimal(text));
            //    //tr = tr.NextElementSibling as IHtmlTableRowElement;
            //}
            bool tesouraria = false;

            foreach (var row in table.Rows)
            {
                if (row.GetAttribute("align") == "left") //primeira linha
                {
                    //obtem a data da segunda célula
                    var td_multiplicador = row.Cells[0];
                    var td_date          = row.Cells[1];
                    var datetext         = td_date.TextContent.Trim();
                    var iEnd             = datetext.LastIndexOfNum();
                    var start            = iEnd - 9;
                    datetext     = datetext.Substring(start, 10);
                    capital.Date = DateTime.ParseExact(datetext, "dd/MM/yyyy", new CultureInfo("pt-BR"));

                    if (td_multiplicador.TextContent.Contains("Mil") || td_multiplicador.TextContent.Contains("Milhares"))
                    {
                        capital.Multiplicador = 1000;
                    }
                    if (td_multiplicador.TextContent.Contains("Milhão") || td_multiplicador.TextContent.Contains("Milhões"))
                    {
                        capital.Multiplicador = 1000 * 1000;
                    }
                }
                if (row.Cells[0].TextContent.Contains("Capital")) //segunda linha
                {
                    // acoes no mercado
                    tesouraria = false;
                    continue;
                }
                if (row.Cells[0].TextContent.Contains("Tesouraria"))
                {
                    // acoes em tesouraria
                    tesouraria = true;
                    continue;
                }
                if (row.Cells[0].TextContent.Contains("Ordinárias"))
                {
                    var value = Convert.ToDecimal(row.Cells[1].TextContent.Trim());
                    if (tesouraria)
                    {
                        capital.OrdinariasTesouraria = value;
                    }
                    else
                    {
                        capital.OrdinariasCirculantes = value;
                    }
                }
                if (row.Cells[0].TextContent.Contains("Preferenciais"))
                {
                    var value = Convert.ToDecimal(row.Cells[1].TextContent.Trim());
                    if (tesouraria)
                    {
                        capital.PreferenciaisTesouraria = value;
                    }
                    else
                    {
                        capital.PrefernciaisCirculantes = value;
                    }
                }
            }

            return(capital);
        }