示例#1
0
        public List <Noticias> RetornaNoticias(filtroPromocaoNoticia filtro)
        {
            List <Noticias> listaNoticias;

            /*
             * FONTES:
             * 1 -> knewin
             * 2 -> ElasticSearch
             */

            switch (filtro.fontePesquisa)
            {
            case 1:

                listaNoticias = RetornaNoticiasKnewin(filtro);

                break;

            case 2:

                listaNoticias = RetornaNoticiasElasticSearch(filtro);

                break;


            default:

                listaNoticias = RetornaNoticiasElasticSearch(filtro);

                break;
            }

            return(listaNoticias.Any() ? listaNoticias : null);
        }
示例#2
0
        private List <Noticias> RetornaNoticiasElasticSearch(filtroPromocaoNoticia filtro)
        {
            var node     = new Uri(_server);
            var settings = new ConnectionSettings(node);

            settings.DisableDirectStreaming(true);
            settings.DefaultIndex(_indexElastic + "noticias");

            var client = new ElasticClient(settings);

            DateTime dtInicial = filtro.dataInicial == null?DateTime.Now.AddYears(-1) : new DateTime(filtro.dataInicial.Value.Year, filtro.dataInicial.Value.Month, filtro.dataInicial.Value.Day, 00, 00, 00, 123);

            DateTime dtFinal = filtro.dataFinal == null ? DateTime.Now : new DateTime(filtro.dataFinal.Value.Year, filtro.dataFinal.Value.Month, filtro.dataFinal.Value.Day, 23, 59, 59, 123);

            string dataInicialFormatada = string.Format("{0:dd/MM/yy HH:mm:ss}", dtInicial);
            string dataFinalFormatada   = string.Format("{0:dd/MM/yy HH:mm:ss}", dtFinal);

            //filtro.empresa = filtro.empresa == 0 || filtro.empresa == null ? filtro.empresa == 0 : filtro.empresa;

            int posicao = filtro.pagina > 1 ? (((filtro.pagina * filtro.quantidade) - 10) + 1) : filtro.pagina - 1;

            ISearchResponse <Noticias> response;

            if (filtro.empresa == 0)
            {
                response = client.Search <Noticias>(s => s
                                                    .From(posicao)
                                                    .Query(q =>

                                                           //(q.Term(p => p.titulo, filtro.pesquisa.ToLower()) ||
                                                           //    q.Term(p => p.conteudo, filtro.pesquisa.ToLower())) &&
                                                           q.DateRange(d => d
                                                                       .Field(f => f.datapublicacao)
                                                                       .GreaterThanOrEquals(dataInicialFormatada)
                                                                       .LessThanOrEquals(dataFinalFormatada)
                                                                       )
                                                           &&
                                                           //(
                                                           //q.MatchPhrase(m => m
                                                           //   .Analyzer("standard")
                                                           //   .Field(p => p.titulo)
                                                           //   .Query(filtro.pesquisa)
                                                           //   .Operator(Operator.And)
                                                           //)
                                                           //    ||
                                                           //    q.MatchPhrase(m => m
                                                           //       .Analyzer("standard")
                                                           //       .Field(p => p.conteudo)
                                                           //       .Query(filtro.pesquisa)
                                                           //       .Operator(Operator.Or)
                                                           //    )
                                                           //)

                                                           q.MultiMatch(mm => mm
                                                                        .Analyzer("standard")
                                                                        .Query(filtro.pesquisa)
                                                                        .Operator(Operator.And)
                                                                        .Fields(fi => fi
                                                                                .Field("titulo")
                                                                                .Field("conteudo")
                                                                                )
                                                                        )
                                                           )
                                                    .Sort(x => x.Descending(p => p.datapublicacao))
                                                    );
            }
            else
            {
                response = client.Search <Noticias>(s => s
                                                    .From(posicao)
                                                    .Query(q =>
                                                           q.Bool(b => b.Must(m => m.Term("empresas.idempresa", filtro.empresa))) &&
                                                           //(q.Term(p => p.titulo, filtro.pesquisa.ToLower()) ||
                                                           // q.Term(p => p.conteudo, filtro.pesquisa.ToLower())) &&

                                                           q.MultiMatch(mm => mm
                                                                        .Analyzer("standard")
                                                                        .Query(filtro.pesquisa)
                                                                        .Operator(Operator.And)
                                                                        .Fields(fi => fi
                                                                                .Field("titulo")
                                                                                .Field("conteudo")
                                                                                )
                                                                        ) &&

                                                           q.DateRange(d => d
                                                                       .Field(f => f.datapublicacao)
                                                                       .GreaterThanOrEquals(dataInicialFormatada)
                                                                       .LessThanOrEquals(dataFinalFormatada)
                                                                       ))
                                                    .Sort(x => x.Descending(p => p.datapublicacao))
                                                    );
            }


            _totalNoticias = Convert.ToInt32(response.Total);

            var listaNoticias = response.Documents.ToList <Noticias>().OrderByDescending(x => DateTime.Parse(x.datapublicacao)).ToList();

            //.Skip((filtro.pagina - 1) * filtro.quantidade).Take(filtro.quantidade).ToList();

            return(listaNoticias);
        }
示例#3
0
        private List <Noticias> RetornaNoticiasKnewin(filtroPromocaoNoticia filtro)
        {
            string Key = "2e9ee79e-7a4f-4f2f-bca3-25402e113997";

            try
            {
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://data.knewin.com/news");
                httpWebRequest.ContentType = "application/json";
                httpWebRequest.Method      = "POST";

                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    string json = "";

                    //ajusta paginação

                    /*
                     * quantidade padrão de retorno noticias Knewin : 10;
                     */

                    filtro.dataInicial = filtro.dataInicial == null?DateTime.Now.AddYears(-1) : filtro.dataInicial;

                    filtro.dataFinal = filtro.dataFinal == null ? DateTime.Now : filtro.dataFinal;


                    int posicao = filtro.pagina > 1 ? (((filtro.pagina * filtro.quantidade) - 10) + 1) : filtro.pagina - 1;

                    if (filtro.dataInicial != null && filtro.dataFinal != null)
                    {
                        var dtInicial = filtro.dataInicial.Value.ToString("yyyy-MM-ddT00:00:00");
                        var dtFinal   = filtro.dataFinal.Value.ToString("yyyy-MM-ddT00:00:00");

                        var listaFontesNoticias = RetornaListaFontesKnewin();

                        var listaFormatada = string.Join(",", listaFontesNoticias);

                        json = "{" +
                               "\"key\":\"" + Key + "\"," +
                               "\"query\":\"" + filtro.pesquisa.Replace("\"", "\\\"") + "\"," +
                               "\"offset\":\"" + posicao + "\"," +
                               "\"defaultOperator\":\"AND\"," +
                               "\"filter\":" +
                               "{" +
                               "\"untilPublished\":\"" + dtFinal + "\"," +
                               "\"sincePublished\":\"" + dtInicial + "\"," +
                               "\"sourceId\":[" + listaFormatada + "]" +
                               "}}";
                    }
                    else if (filtro.dataInicial != null && filtro.dataFinal != null)
                    {
                        var dtInicial = filtro.dataInicial.Value.ToString("yyyy-MM-ddT00:00:00");
                        var dtFinal   = filtro.dataFinal.Value.ToString("yyyy-MM-ddT00:00:00");

                        var listaFontesNoticias = RetornaListaFontesKnewin();

                        var listaFormatada = string.Join(",", listaFontesNoticias);

                        json = "{" +
                               "\"key\":\"" + Key + "\"," +
                               "\"query\":\"" + filtro.pesquisa.Replace("\"", "\\\"") + "\"," +
                               "\"offset\":\"" + posicao + "\"," +
                               "\"defaultOperator\":\"AND\"," +
                               "\"filter\":" +
                               "{" +
                               "\"untilPublished\":\"" + dtFinal + "\"," +
                               "\"sincePublished\":\"" + dtInicial + "\"," +
                               "\"sourceId\":[" + listaFormatada + "]" +
                               "}}";
                    }
                    else if (filtro.dataInicial == null && filtro.dataFinal == null)
                    {
                        var dtInicial = filtro.dataInicial.Value.ToString("yyyy-MM-ddT00:00:00");
                        var dtFinal   = filtro.dataFinal.Value.ToString("yyyy-MM-ddT00:00:00");

                        var listaFontesNoticias = RetornaListaFontesKnewin();

                        var listaFormatada = string.Join(",", listaFontesNoticias);

                        json = "{" +
                               "\"key\":\"" + Key + "\"," +
                               "\"query\":\"" + filtro.pesquisa.Replace("\"", "\\\"") + "\"," +
                               "\"offset\":\"" + posicao + "\"," +
                               "\"defaultOperator\":\"AND\"," +
                               "\"filter\":" +
                               "{" +
                               "\"sourceId\":[" + listaFormatada + "]" +
                               "}}";
                    }
                    else if (filtro.dataInicial == null && filtro.dataFinal == null)
                    {
                        var dtInicial = filtro.dataInicial.Value.ToString("yyyy-MM-ddT00:00:00");
                        var dtFinal   = filtro.dataFinal.Value.ToString("yyyy-MM-ddT00:00:00");

                        var listaFontesNoticias = RetornaListaFontesKnewin();

                        var listaFormatada = string.Join(",", listaFontesNoticias);

                        json = "{" +
                               "\"key\":\"" + Key + "\"," +
                               "\"query\":\"" + filtro.pesquisa.Replace("\"", "\\\"") + "\"," +
                               "\"offset\":\"" + posicao + "\"," +
                               "\"defaultOperator\":\"AND\"," +
                               "\"filter\":" +
                               "{" +
                               "\"sourceId\":[" + listaFormatada + "]" +
                               "}}";
                    }
                    else
                    {
                        json = "{" +
                               "\"key\":\"" + Key + "\"," +
                               "\"query\":\"" + filtro.pesquisa.Replace("\"", "\\\"") + "\"," +
                               "\"offset\":\"" + posicao + "\"," +
                               "\"defaultOperator\":\"AND\"" +
                               "}";
                    }

                    streamWriter.Write(json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                var response = (HttpWebResponse)httpWebRequest.GetResponse();

                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                var resposta = JsonConvert.DeserializeObject <RootObject>(responseString);


                this._totalNoticias = resposta.num_docs;

                List <Noticias> lista = new List <Noticias>();

                foreach (var x in resposta.hits)
                {
                    Noticias noticia = new Noticias()
                    {
                        autor          = x.author,
                        conteudo       = x.content,
                        datapublicacao = x.published_date,
                        idnoticia      = x.id,
                        nomefonte      = x.source,
                        titulo         = x.title,
                        url            = x.url,
                        promocoes      = RetornaPromocoesNoticiasKnewin(x.id)
                    };

                    lista.Add(noticia);
                }

                return(lista.OrderByDescending(d => DateTime.Parse(d.datapublicacao)).ToList());
            }
            catch (Exception)
            {
                return(null);
            }
        }