Ejemplo n.º 1
0
        private byte[] getExcel(ArticlesResult result)
        {
            using var workbook = new XLWorkbook();
            var worksheet     = workbook.Worksheets.Add("SearchResults");
            var currentRow    = 1;
            var currentColumn = 1;

            worksheet.Cell(currentRow, currentColumn++).Value = "Article Number";
            worksheet.Cell(currentRow, currentColumn++).Value = "Article Source ID";
            worksheet.Cell(currentRow, currentColumn++).Value = "Article Source Name";
            worksheet.Cell(currentRow, currentColumn++).Value = "Article Title";
            worksheet.Cell(currentRow, currentColumn++).Value = "Article Author";
            worksheet.Cell(currentRow, currentColumn++).Value = "Article Description";
            worksheet.Cell(currentRow, currentColumn++).Value = "Link to Full Article";

            foreach (var article in result.Articles)
            {
                currentRow++;
                currentColumn = 1;
                worksheet.Cell(currentRow, currentColumn++).Value = currentRow - 1;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Source.Id;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Source.Name;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Title;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Author;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Description;
                worksheet.Cell(currentRow, currentColumn++).Value = article.Url;
            }
            using var stream = new MemoryStream();
            workbook.SaveAs(stream);
            return(stream.ToArray());
        }
Ejemplo n.º 2
0
        public IEnumerable <Article> GetNewsList(string url)
        {
            try
            {
                using (var client = new HttpClient())
                {
                    var responseTask = client.GetAsync(url);
                    responseTask.Wait();

                    var result = responseTask.Result;
                    if (result.IsSuccessStatusCode)
                    {
                        var readTask = result.Content.ReadAsStringAsync();
                        readTask.Wait();
                        ArticlesResult jsonResult = JsonConvert.DeserializeObject <ArticlesResult>(readTask.Result);
                        return(jsonResult.articles);
                    }
                    else
                    {
                        return(new List <Article>());
                    }
                }
            }
            catch (Exception)
            {
                throw new HttpRequestException("News API not working");
            }
        }
Ejemplo n.º 3
0
        public async Task <ObservableCollection <Article> > GetNewsByQuery(string query)
        {
            try
            {
                ArticlesResult articlesResult = null;

                using (var client = new HttpClient())
                {
                    DateTime date       = DateTime.Today.AddMonths(-1);
                    var      jsonString = await client.GetStringAsync(new Uri(string.Format(_queryTemplate, query, date.Year, date.Month, date.Day)));

                    articlesResult = JsonConvert.DeserializeObject <ArticlesResult>(jsonString);
                    if (articlesResult != null)
                    {
                        var result = new ObservableCollection <Article>(articlesResult.Articles.Take(3));
                        await _databaseService.Create(result);

                        await _fileService.Create(result);

                        return(result);
                    }
                    return(null);
                }
            }
            catch (Exception ex)
            {
                TextLog.LogText($"{DateTime.Now} NewsService->GetNewsByQuery->Message: {ex.Message} \n StackTrace : /n {ex.StackTrace}");
                return(null);
            }
        }
        public void UpdateNews(ArticlesResult articlesResult)
        {
            NewsInfo[] infos = new NewsInfo[articlesResult.Articles.Count];



            int i = 0;

            foreach (var articles in articlesResult.Articles)
            {
                infos[i] = new NewsInfo
                {
                    Author      = articles.Author,
                    Description = articles.Description,
                    PublishedAt = articles.PublishedAt.ToString(),
                    Title       = articles.Title,
                    Url         = articles.Url,
                    UrlToImage  = articles.UrlToImage,
                    ImageData   = LoadImage(articles.UrlToImage)
                };
                if (i < 3)
                {
                    GideonBase.SynObj.SpeakAsync(infos[i].Title);
                }
                i++;
            }

            Newslb.ItemsSource = infos.ToList();
        }
Ejemplo n.º 5
0
        // ***

        private async Task <ArticlesResult> MakeRequest(string endpoint, string querystring)
        {
            // here's the return obj
            var articlesResult = new ArticlesResult();

            // make the http request
            var httpRequest  = new HttpRequestMessage(HttpMethod.Get, BASE_URL + endpoint + "?" + querystring);
            var httpResponse = await HttpClient.SendAsync(httpRequest);

            var task = httpResponse?.Content?.ReadAsStringAsync();

            task?.Wait();

            var json = task?.Result;

            if (!string.IsNullOrWhiteSpace(json))
            {
                // convert the json to an obj
                var apiResponse = JsonConvert.DeserializeObject <ApiResponse>(json);
                articlesResult.Status = apiResponse.Status;
                if (articlesResult.Status == Statuses.Ok)
                {
                    articlesResult.TotalResults = apiResponse.TotalResults;
                    articlesResult.Articles     = apiResponse.Articles;
                }
                else
                {
                    ErrorCodes errorCode = ErrorCodes.UnknownError;
                    try
                    {
                        errorCode = (ErrorCodes)apiResponse.Code;
                    }
                    catch (Exception)
                    {
                        Debug.WriteLine("The API returned an error code that wasn't expected: " + apiResponse.Code);
                    }

                    articlesResult.Error = new Error
                    {
                        Code    = errorCode,
                        Message = apiResponse.Message
                    };
                }
            }
            else
            {
                articlesResult.Status = Statuses.Error;
                articlesResult.Error  = new Error
                {
                    Code    = ErrorCodes.UnexpectedError,
                    Message =
                        task == null ?
                        "The API returned an empty response. Are you connected to the internet?" :
                        $"{task.Exception?.Message}\n{task.Exception?.StackTrace}"
                };
            }

            return(articlesResult);
        }
Ejemplo n.º 6
0
        private static async Task <ArticlesResult> getNewsBySource(Module module)
        {
            NewsApiClient newsApiClient = new NewsApiClient(Api.ApiKeys[ApiEnum.NEWSAPI]);

            ArticlesResult topheadlines = await newsApiClient.GetTopHeadlinesAsync(new TopHeadlinesRequest
            {
                Language = module.NewsLanguage,
                Sources  = module.NewsSources
            });

            return(topheadlines);
        }
Ejemplo n.º 7
0
        private static async Task <ArticlesResult> getNewsByCategory(Module module)
        {
            NewsApiClient newsApiClient = new NewsApiClient(Api.ApiKeys[ApiEnum.NEWSAPI]);

            ArticlesResult topheadlines = await newsApiClient.GetTopHeadlinesAsync(new TopHeadlinesRequest
            {
                Category = module.NewsCategory,
                Country  = module.NewsCountry,
                Language = module.NewsLanguage
            });

            return(topheadlines);
        }
Ejemplo n.º 8
0
 protected IEnumerable <Article> GetArticlesFromResult(ArticlesResult result)
 {
     return(result.Articles.Select((article, i) => new Article()
     {
         Position = i,
         Aggregator = "NewsAPI",
         Title = article.Title,
         DatePublished = article.PublishedAt.GetValueOrDefault(),
         Description = article.Description,
         Author = article.Author,
         Source = article.Source.Name,
         Url = new Uri(article.Url),
     }));
 }
Ejemplo n.º 9
0
        private static async Task <string> getNewsModul(Modules modules)
        {
            ArticlesResult result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(modules));

            Module module = DataAccess.GetModule(modules);

            string category = string.Empty;

            switch (module.NewsCategory)
            {
            case Categories.Business:
                category = "Nachrichten Wirtschaft";
                break;

            case Categories.Entertainment:
                category = "Nachrichten Unterhaltung";
                break;

            case Categories.Health:
                category = "Nachrichten Gesundheit";
                break;

            case Categories.Science:
                category = "Nachrichten Wissenschaft";
                break;

            case Categories.Sports:
                category = "Nachrichten Sport";
                break;

            case Categories.Technology:
                category = "Nachrichten Technologie";
                break;
            }

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("<table style=\"width: 100%; height: 60%; padding: 2.5%; display: table; box-sizing:border-box;\">");
            stringBuilder.Append($" <tr> <td colspan=\"2\" style=\"font-size: 1.5em; text-align: left; color:grey;\">{category}</td> </tr>");

            foreach (Article article in result.Articles.Take(4))
            {
                stringBuilder.Append($" <tr> <td style=\"display: table-cell; font-size: 1.25em; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 1px; width: 80%; text-align: left;\" onclick=\"window.location='{article.Url}'\">{article.Title}</td> <td style=\"font-size: 1.25em; cursor: pointer; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 1px; width: 20%; display: table-cell;\" onclick=\"window.location='{article.Url}'\">{article.Source.Name}</td> </tr>");
            }

            stringBuilder.Append(" </table>");

            return(stringBuilder.ToString());
        }
Ejemplo n.º 10
0
        private async Task <ArticlesResult> GetLatestNewsFromApi(Categories category, int page = 1)
        {
            var       newsApiClient = new NewsApiClient("8a4d40be944c4dbeb2d365c05cfe3eab");
            const int pageSize      = 10;

            ArticlesResult newsResponse = await newsApiClient.GetTopHeadlinesAsync(new TopHeadlinesRequest
            {
                Category = category,
                Page     = page,
                PageSize = pageSize,
                Country  = Countries.US
            });

            return(newsResponse);
        }
Ejemplo n.º 11
0
        public async Task <ArticlesResult> GetTopHeadlines(int countryId)
        {
            var            newsApiClient    = new NewsApiClient(ApiKey);
            ArticlesResult articlesResponse = await newsApiClient.GetTopHeadlinesAsync(new TopHeadlinesRequest
            {
                Country = (Countries)countryId
            });

            if (articlesResponse.Status == Statuses.Ok)
            {
                return(articlesResponse);
            }

            return(null);
        }
Ejemplo n.º 12
0
        private async Task <bool> QueryNewsApiHeadlines(int pageSize)
        {
            var response = new ArticlesResult();

            _logger.Info("Querying NewsApi. Page: " + _newsApiPage);

            await Task.Run(() => response = _newsApiClient.GetTopHeadlines(new TopHeadlinesRequest
            {
                //Sources = _newsApiSourceRepository.GetAll(new DateTime(2018, 1, 1), 0).Where(c => c.Language == "en").Select(c => c.ApiSourceName).ToList(), //get from db
                //SortBy = SortBys.Popularity,
                //Language = Languages.EN,
                //From = DateTime.Now.AddHours(-1),
                PageSize = pageSize,
                Country  = _newsApiCountry,
                Page     = _newsApiPage
            }));

            if (response.Status == Statuses.Ok)
            {
                _resultsRemaining = response.TotalResults - (_newsApiPage * pageSize);

                foreach (var a in response.Articles)
                {
                    var article = new NewsArticle
                    {
                        Headline        = a.Title,
                        SourceId        = 1,
                        NewsApiSourceId = a.Source.Id,
                        Description     = a.Description,
                        IsVisible       = true,
                        ImageUrl        = a.UrlToImage,
                        Url             = a.Url,
                        CreatedOn       = DateTime.Now,
                        Country         = _newsApiCountry.ToString().ToLower(),
                        PublishedOn     = a.PublishedAt ?? DateTime.Now
                    };

                    _logger.Info("Adding article: " + a.Title + " from Source " + a.Source.Name);

                    _newsArticles.Add(article);
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 13
0
        private static async Task <string> getNews(Request request)
        {
            ArticlesResult result = null;

            if (request.Query.Parameters.Contains("Business"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSBUSINESS));
            }
            else if (request.Query.CompleteQuery.Contains("Entertainment"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSENTERTAINMENT));
            }
            else if (request.Query.CompleteQuery.Contains("Health"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSHEALTH));
            }
            else if (request.Query.CompleteQuery.Contains("Science"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSSCIENCE));
            }
            else if (request.Query.CompleteQuery.Contains("Sports"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSSPORT));
            }
            else if (request.Query.CompleteQuery.Contains("Technology"))
            {
                result = DataAccess.DeserializeModuleData(typeof(ArticlesResult), await DataAccess.GetModuleData(Modules.NEWSTECHNOLOGY));
            }

            if (result == null)
            {
                return(string.Empty);
            }

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("<table style=\"width: 100%; height: 60%; padding: 2.5%; display: table; color: white;\"> <col width=\"20%;\"> <col width=\"80%;\">");

            foreach (Article article in result.Articles.Take(11))
            {
                stringBuilder.Append($" <tr onclick=\"window.location='{article.Url}'\"> <td style=\"padding-top: 2.5%; vertical-align: top;\"><image src=\"{article.UrlToImage}\" alt=\"\" style=\"width: 100%; max-height: 150px;\"/></td> <td style=\"vertical-align: top; padding-top: 2.5%; padding-left: 2.5%;\"> <label style=\"display: block; font-size: 1.25em; cursor: pointer; overflow: hidden; text-align: left; color: white;\"><bold>{article.Title}</bold></label> <label style=\"display: block; text-align: left; font-size: 0.6em; cursor: pointer; color: white; padding-top: 0.5%; padding-bottom: 0.5%;\">{article.PublishedAt?.ToString("f")}</label> <label style=\"display: block; text-align: left; font-size: 1em; cursor: pointer; color: white;\">{article.Description}</label> </td> </tr>");
            }

            stringBuilder.Append(" </table>");

            return(stringBuilder.ToString());
        }
Ejemplo n.º 14
0
        public IActionResult Index(ArticlesResult articlesResult)
        {
            //Use appsettings.json to change api url and key
            var newsApiClient = new NewsApiClient(_appSettings.NewsApiKey, _appSettings.NewsApiUrl);

            var articlesResponse = newsApiClient.GetEverything(new EverythingRequest
            {
                Sources  = { "the-new-york-times" },
                Q        = "Apple",
                SortBy   = SortBys.PublishedAt,
                Language = Languages.EN,
                From     = new DateTime(2018, 09, 24)
            });


            return(View(articlesResponse));
        }
        /// <summary>
        /// Get the current top headlines in a category.
        /// </summary>
        /// <param name="category">Category to search.</param>
        /// <param name="maxResults">Limit results to this number (Max 100).</param>
        /// <param name="query">Specify a specific search query. Use null to get all.</param>
        /// <returns>A list of articles</returns>
        public async Task <List <Article> > GetTopHeadlines(Categories category, int maxResults = 100, string query = null)
        {
            ArticlesResult response = await Client.GetTopHeadlinesAsync(new TopHeadlinesRequest()
            {
                Country  = Countries.GB,
                PageSize = maxResults,
                Language = Languages.EN,
                Category = category,
                Q        = query
            });

            if (response.Status == Statuses.Ok)
            {
                return(response.Articles);
            }
            return(new List <Article>());
        }
Ejemplo n.º 16
0
        public async Task <ArticlesResult> GetNewsSearchResult(int languageId, int sortById, string q, DateTime fromDate)
        {
            var            newsApiClient    = new NewsApiClient(ApiKey);
            ArticlesResult articlesResponse = await newsApiClient.GetEverythingAsync(new EverythingRequest
            {
                Q        = q,
                SortBy   = (SortBys)sortById,
                Language = (Languages)languageId,
                From     = fromDate
            });

            if (articlesResponse.Status == Statuses.Ok)
            {
                return(articlesResponse);
            }

            return(null);
        }
Ejemplo n.º 17
0
        public async Task <ActionResult> Index(string query)
        {
            var result = await newsService.GetAll(query);

            var sourceResponseDto = await newsService.GetSources();

            if (result == null)
            {
                //this means there are no news according to filter criteria
                result              = new ArticlesResult();
                result.Articles     = new List <Article>();
                result.TotalResults = 0;
            }

            NewsViewModel viewModel = new NewsViewModel()
            {
                Articles = result.Articles,
                Sources  = sourceResponseDto.Sources,
                Total    = result.TotalResults
            };

            return(View(viewModel));
        }
Ejemplo n.º 18
0
 public void searchNews()
 {
     articleResult = NewsApiClient.GetEverything(everythingRequest);
 }
        public async void GetNews(string Category)
        {
            ArticlesResult ArticleRes = null;

            try
            {
                await Task.Run(() =>
                {
                    switch (Category)
                    {
                    case "Business News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Business
                        });

                        break;

                    case "Entertainment News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Entertainment
                        });
                        break;

                    case "General News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                        });
                        break;

                    case "Health News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Health
                        });
                        break;

                    case "Science News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Science
                        });
                        break;

                    case "Sports News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Sports
                        });
                        break;

                    case "Technology News":
                        ArticleRes = news.GetTopHeadlines(new TopHeadlinesRequest
                        {
                            Country  = Countries.IN,
                            Language = Languages.EN,
                            Category = Categories.Technology
                        });
                        break;
                    }


                    if (ArticleRes.Status != NewsAPI.Constants.Statuses.Ok)
                    {
                        MessageBox.Show("Error");
                        return;
                    }

                    Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        UpdateNews(ArticleRes);
                    }));
                });
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 20
0
 public NewsResult(string provider, ArticlesResult result)
 {
     Provider = provider;
     Result   = result;
 }
Ejemplo n.º 21
0
 public TopArticlesWrapper(TopArticlesParamsDTO request, ArticlesResult articles)
 {
     Result  = articles;
     Request = request;
 }