예제 #1
0
        private static ConcurrentBag <Disciplina> LerDisciplinas(string urlCampus, string p, ClienteWeb wc)
        {
            var discs = new ConcurrentBag <Disciplina>();

            wc          = new ClienteWeb();
            wc.Encoding = Encoding.UTF8;
            var    newUrl = urlCampus.Substring(0, urlCampus.LastIndexOf("/") + 1) + p;
            string html;

            try
            {
                html = wc.DownloadString(newUrl);
            }
            catch (Exception)
            {
                return(LerDisciplinas(urlCampus, p, wc));
            }
            var dom = new HtmlAgilityPack.HtmlDocument();

            dom.LoadHtml(html);
            var navigator = dom.CreateNavigator();
            var tabela    = navigator.Select("//table[@class='FrameCinza']");

            while (tabela.MoveNext())
            {
                var trs = tabela.Current.Select(".//tr");
                trs.MoveNext();
                var f = new FilaDisciplinas();
                while (trs.MoveNext())
                {
                    var td = trs.Current.Select(".//td[2]");
                    td.MoveNext();
                    // estamos no TD que queremos
                    var url = td.Current.Select(".//a/@href");
                    url.MoveNext();
                    var nome = td.Current.Select(".//a/text()");
                    nome.MoveNext();

                    f.Put(Tuple.Create(urlCampus, url.Current.Value, discs, nome.Current.Value));
                }
            }

            return(discs);
        }
예제 #2
0
        public static void WorkerFilaDisciplina()
        {
            var f = new FilaDisciplinas();
            Tuple <string, string, ConcurrentBag <Disciplina>, string> msg;
            ClienteWeb wc = new ClienteWeb();

            wc.Encoding = Encoding.UTF8;
            while ((msg = f.Get()) != null)
            {
                // f.Put(Tuple.Create(urlCampus, url.Current.Value, discs, nome.Current.Value));
                var dep = new Disciplina();
                dep.Nome = msg.Item4;
                var discs     = msg.Item3;
                var urlCampus = msg.Item1;
                Console.WriteLine("\tLendo disc. " + dep.Nome);
                dep.Turmas = LerTurmas(urlCampus, msg.Item2, wc);
                Console.WriteLine("depth: " + CodeMQManager.GetQueueDepth(typeof(FilaDisciplinas)));
                discs.Add(dep);
            }

            f.Put(null);
        }
예제 #3
0
        public static List <Departamento> LerDepartamentos(string urlCampus)
        {
            List <Departamento> deps = new List <Departamento>();
            ClienteWeb          wc   = new ClienteWeb();

            wc.Encoding = Encoding.UTF8;
            var html = wc.DownloadString(urlCampus);
            var dom  = new HtmlAgilityPack.HtmlDocument();

            dom.LoadHtml(html);
            var navigator = dom.CreateNavigator();
            var tabela    = navigator.Select("//table[@class='FrameCinza']");

            List <Tuple <Departamento, string, string> > deptoTemp = new List <Tuple <Departamento, string, string> >();


            while (tabela.MoveNext())
            {
                var trs = tabela.Current.Select(".//tr");
                trs.MoveNext();
                while (trs.MoveNext())
                {
                    var td = trs.Current.Select(".//td[3]");
                    td.MoveNext();
                    // estamos no TD que queremos
                    var url = td.Current.Select(".//a/@href");
                    url.MoveNext();
                    var nome = td.Current.Select(".//a/text()");
                    nome.MoveNext();

                    var dep = new Departamento();
                    dep.Nome = nome.Current.Value;
                    deptoTemp.Add(Tuple.Create(dep, urlCampus, url.Current.Value));
                }
            }

            /*          deptoTemp.RemoveAll(n =>
             *            !@"Departamento de Administração
             * Departamento de Ciência da Computação
             * Departamento de Economia
             * Departamento de Engenharia Elétrica.
             * Departamento de Engenharia Mecânica
             * Departamento de Estatística
             * Departamento de Filosofia
             * Departamento de Matemática.
             * Departamento de Planejamento e Administração Departamento de Sociologia
             * Departamento de Teoria e Fundamentos
             * Depto de Ciências Contábeis e Atuariais
             * Direção da Faculdade de Tecnologia
             * Faculd. de Economia, Administração e Contabilidade
             * Faculdade de Ciência da Informação
             * Faculdade de Tecnologia
             * ".Contains(n.Item1.Nome.Trim()));*/

            foreach (var depi in deptoTemp)
            {
                var dep = depi.Item1;
                Console.WriteLine("Lendo dpto. " + dep.Nome);
                dep.Disciplinas = LerDisciplinas(depi.Item2, depi.Item3, null);
            }

            var f = new FilaDisciplinas();

            f.Put(null);

            return(deptoTemp.Select(n => n.Item1).ToList());
        }