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); }
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); }
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); } }