public ArticlesResult News(string country, string sources, string category) { var newsApiClient = new NewsApiClient("4f9333875c98436787fa163b2604664a"); var query = new TopHeadlinesRequest(); if (!string.IsNullOrEmpty(country)) { query.Country = Enum.Parse <NewsAPI.Constants.Countries>(country.ToUpper()); } if (!string.IsNullOrEmpty(sources)) { query.Sources = new List <string> { sources }; } if (!string.IsNullOrEmpty(category)) { query.Category = Enum.Parse <NewsAPI.Constants.Categories>( new CultureInfo("en-US", false).TextInfo.ToTitleCase(category)); } return(newsApiClient.GetTopHeadlines(query)); }
private void ValidateParams(TopHeadlinesRequest requestParams) { if (!(requestParams.Sources.Count == 0)) { if (!(requestParams.Country is null) || !(requestParams.Category is null)) { throw new TopArticlesReguestInputException(TOP_ARTICLES_PARAM_COMBINATION_ERROR); } } if (requestParams.Sources is null && requestParams.Q is null && requestParams.Language is null && requestParams.Country is null && requestParams.Category is null) { throw new TopArticlesReguestInputException(TOP_ARTICLES_MISSING_INPUT_MESSAGE); } if (requestParams.PageSize <= 0 || requestParams.PageSize > 100) { throw new TopArticlesReguestInputException(PAGE_SIZE_VIOLATION); } if (requestParams.Page <= 0) { throw new TopArticlesReguestInputException(PAGE_NUMBER_VIOLATION); } }
public async Task NewsResponse_TopHeadlinesRequest_NotNull() { var request = new TopHeadlinesRequest("AI", NewsCategory.Technology); var result = await _newsClient.FetchNewsAsync(request); Assert.Equal(ResponseStatus.Ok, result.ResponseStatus); Assert.NotNull(result.Articles); }
/// <summary> /// Fetch News from the API. /// </summary> /// <param name="request">Returns the top headlines from all sources for an entered request.</param> /// <returns><see cref="NewsResult"/> The result of the search with an IEnumerable collection of articles.</returns> public async Task <NewsResult> FetchNewsAsync(TopHeadlinesRequest request) { var baseUrl = Constants.BaseUrl; var query = RequestFormat.CreateUrl(request, baseUrl); var response = await SendRequestAsync(query); return(GetResult(response)); }
public ArticlesResult News() { var newsApiClient = new NewsApiClient("4f9333875c98436787fa163b2604664a"); var topNews = new TopHeadlinesRequest { Country = NewsAPI.Constants.Countries.CA }; return(newsApiClient.GetTopHeadlines(topNews)); }
internal static string CreateUrl(TopHeadlinesRequest request, string baseUrl) { baseUrl += "top-headlines?"; baseUrl += $"q={request.Query}"; baseUrl += FormattedCountry(request.Country); baseUrl += FormattedCategory(request.Category); return(baseUrl); }
public static TopHeadlinesRequest DTOToHeadline(TopArticlesParamsDTO requestParamsDTO) { TopHeadlinesRequest requestParam = new TopHeadlinesRequest(); requestParam.Q = requestParamsDTO.Keywords; requestParam.Page = requestParamsDTO.Page; requestParam.PageSize = requestParamsDTO.PageSize; if (!(requestParamsDTO.Sources is null)) { requestParam.Sources = requestParamsDTO.Sources.Split(",").ToList(); } if (!(requestParamsDTO.Category is null)) { ///If the user doesnt select one of the options, ///it converts the user input to string with beggining capital letter ///followed only by lower case letters string userInputCat = requestParamsDTO.Category.ToLower().Substring(1); string firstLetter = requestParamsDTO.Category[0].ToString().ToUpper(); userInputCat = firstLetter + userInputCat; if (Enum.TryParse(userInputCat, out Categories category)) { requestParam.Category = category; } else { throw new TopArticlesReguestInputException(string.Format( NO_SUCH_CATEGORY, requestParamsDTO.Category)); } } if (!(requestParamsDTO.Language is null)) { if (Enum.TryParse(requestParamsDTO.Language.ToUpper(), out Languages language)) { requestParam.Language = language; } else { throw new EverythingRequestInputException(string.Format( NO_SUCH_LANGUAGE_CODE, requestParamsDTO.Language)); } } if (!(requestParamsDTO.Country is null)) { if (Enum.TryParse(requestParamsDTO.Country.ToUpper(), out Countries country)) { requestParam.Country = country; } else { throw new TopArticlesReguestInputException(string.Format( NO_SUCH_COUNTRY_CODE, requestParamsDTO.Country)); } } return(requestParam); }
public ArticlesResult TopHeadlines() { var topHeadlinesRequest = new TopHeadlinesRequest(); topHeadlinesRequest.Country = Countries.US; var articlesResult = _client.GetTopHeadlines(topHeadlinesRequest); return(articlesResult); }
public async Task <IActionResult> TopHeadlines(TopHeadlinesRequest data) { var articles = await _googleNewsService.GetTopHeadlines(data.country, data.category, data.q); if (articles.Any()) { return(Ok(articles)); } else { return(NotFound()); } }
private void Service() { Receive <T>((msg => { _everythingRequest = msg.TopHeadlinesRequest; })); Receive <FetchNews>(fetch => { _client.GetTopHeadlinesAsync(_everythingRequest).ContinueWith((res) => new NewsResult(_everythingRequest.Q, res.Result)).PipeTo(_responseProcessActor); Self.Tell(PoisonPill.Instance); }); }
public void BasicTopHeadlinesRequestWorks() { var topHeadlinesRequest = new TopHeadlinesRequest(); topHeadlinesRequest.Sources.Add("techcrunch"); var result = NewsApiClient.GetTopHeadlines(topHeadlinesRequest); Assert.Equal(Statuses.Ok, result.Status); Assert.True(result.TotalResults > 0); Assert.True(result.Articles.Count > 0); Assert.Null(result.Error); }
private IEnumerable <ArticleData> ApiArticles(TopHeadlinesRequest request) { // TODO: Perhaps use a call layer and do not call directly from client provider var result = _apiClientProvider.ExecuteRequest(c => c.GetTopHeadlines(request)); if (result.Articles == null) { return(Enumerable.Empty <ArticleData>()); } var category = Enum.GetName(typeof(Categories), request.Category); return(result.Articles.Select(a => ToArticle(a, category)).ToList()); }
public async Task <ArticlesResult> GetHeadlinesBySourcesAsync(List <string> sources, string topic, Languages?language) { var request = new TopHeadlinesRequest(); request.Sources = sources; request.Language = language; if (!string.IsNullOrEmpty(topic) && !string.IsNullOrWhiteSpace(topic)) { request.Q = topic; } var response = await newsApiClient.GetTopHeadlinesAsync(request); return(response); }
private async void button1_Click(object sender, EventArgs e) { label1.Text = label1.Text + "\nButton Clicked"; TopHeadlinesRequest request = GenerateHeadlinesRequest(); var response = await APIn.GetTopHeadlinesAsync(request); label1.Text += label1.Text + "\nResponse recieved"; if (response.Status == Statuses.Ok) { Console.WriteLine("Responses: " + response.TotalResults); label1.Text += ("Responses: " + response.TotalResults); foreach (var article in response.Articles) { /* * Console.WriteLine("Title: {0} - ({1})", article.Title, article.PublishedAt); * Console.WriteLine("Author: {0}", article.Author); * Console.WriteLine("Description: {0}", article.Description); */ string txt = ""; txt += "Title: " + article.Title; txt += "\nPublished: " + article.PublishedAt; txt += "\nAuthor: " + article.Author; txt += "\nDescription: " + article.Description; txt += "\nSource: " + article.Source.Name + "\n\n"; TextBox.Text += txt; if (article.Title.Length > 5) { Headlines.Add(article.Title); } } } else { label1.Text = label1.Text + "\nError fetching data" + response.Error.Code; label1.Text = label1.Text + "\n\t" + response.Error.Message; TextBox.Text = label1.Text + "\nError fetching data" + response.Error.Code; TextBox.Text = label1.Text + "\n\t" + response.Error.Message; } label1.Text = label1.Text + "\nButton push end"; }
/// <summary> /// Query the /v2/top-headlines endpoint for live top news headlines. /// </summary> /// <param name="request">The params and filters for the request.</param> /// <returns></returns> public async Task <ArticlesResult> GetTopHeadlinesAsync(TopHeadlinesRequest request) { // build the querystring var queryParams = new List <string>(); // q if (!string.IsNullOrWhiteSpace(request.Q)) { queryParams.Add("q=" + request.Q); } // sources if (request.Sources.Count > 0) { queryParams.Add("sources=" + string.Join(",", request.Sources)); } if (request.Category.HasValue) { queryParams.Add("category=" + request.Category.Value.ToString().ToLowerInvariant()); } if (request.Language.HasValue) { queryParams.Add("language=" + request.Language.Value.ToString().ToLowerInvariant()); } if (request.Country.HasValue) { queryParams.Add("country=" + request.Country.Value.ToString().ToLowerInvariant()); } // page if (request.Page > 1) { queryParams.Add("page=" + request.Page); } // page size if (request.PageSize > 0) { queryParams.Add("pageSize=" + request.PageSize); } // join them together var querystring = string.Join("&", queryParams.ToArray()); return(await MakeRequest("top-headlines", querystring)); }
public ArticlesResult GetTopArticles(TopHeadlinesRequest requestParam) { ValidateParams(requestParam); var result = ApiConnector.GetTopArticles(requestParam); //Limits the description of each article to 250 characters foreach (var article in result.Articles) { if (!(article.Description is null) && article.Description.Length > 250) { article.Description = article.Description.Substring(0, 250) + "..."; } } return(result); }
public void BadTopHeadlinesRequestReturnsError2() { var topHeadlinesRequest = new TopHeadlinesRequest(); topHeadlinesRequest.Sources.Add("techcrunch"); topHeadlinesRequest.Country = Countries.AU; topHeadlinesRequest.Language = Languages.EN; var result = NewsApiClient.GetTopHeadlines(topHeadlinesRequest); Assert.Equal(Statuses.Error, result.Status); Assert.Null(result.Articles); Assert.NotNull(result.Error); Assert.Equal(ErrorCodes.ParametersIncompatible, result.Error.Code); }
public IActionResult Index() { TopArticlesWrapper homePageExample = new TopArticlesWrapper(); TopHeadlinesRequest homepageRequest = new TopHeadlinesRequest { Q = KEYWORDS_OF_THE_DAY, Page = EXAMPLE_PAGE, PageSize = EXAMPLE_PAGESIZE, Language = NewsAPI.Constants.Languages.EN }; homePageExample.Result = topArticlesService.GetTopArticles(homepageRequest); ViewBag.Keywords = KEYWORDS_OF_THE_DAY; return View(homePageExample); }
public async Task <ArticlesResult> GetHeadlinesByCountryOrCategoryAsync(Countries?country, Categories?category, string topic, Languages?language) { var request = new TopHeadlinesRequest(); request.Country = country; request.Category = category; request.Language = language; if (!string.IsNullOrEmpty(topic) && !string.IsNullOrWhiteSpace(topic)) { request.Q = topic; } var response = await newsApiClient.GetTopHeadlinesAsync(request); return(response); }
public void BadTopHeadlinesRequestReturnsError() { var topHeadlinesRequest = new TopHeadlinesRequest(); var brokenClient = new NewsApiClient("nokey"); topHeadlinesRequest.Sources.Add("techcrunch"); var result = brokenClient.GetTopHeadlines(topHeadlinesRequest); Assert.Equal(Statuses.Error, result.Status); Assert.Null(result.Articles); Assert.NotNull(result.Error); Assert.Equal(ErrorCodes.ApiKeyInvalid, result.Error.Code); }
public async Task <IActionResult> GetNewsTopheadlines([FromQuery] TopHeadlinesRequest topHeadlinesRequest) { var invokingUser = int.Parse(User.FindFirst(claim => claim.Type == ClaimTypes.NameIdentifier).Value); var newsApiClient = new NewsApiClient(_configuration.GetSection("ApiKey").Value); var articlesResponse = await newsApiClient.GetTopHeadlinesAsync(topHeadlinesRequest); if (articlesResponse.Status == Statuses.Ok) { var queryObject = _mapper.Map <TopHeadlinesRequest, QueryObjectTopHeadLinesRequest>(topHeadlinesRequest); await _repository.PostQueryObjectTopHeadLinesRequestAsync(invokingUser, queryObject); var articlesResponseDto = _mapper.Map <ArticlesResult, ArticlesResultViewModel>(articlesResponse); return(Ok(articlesResponseDto)); } return(BadRequest(articlesResponse.Error.Message)); }
public static ArticlesResult GetTopArticles(TopHeadlinesRequest reqParams) { try { var newsApiClient = new NewsApiClient(apiKey); var articleresult = newsApiClient.GetTopHeadlines(reqParams); if (articleresult.Status == Statuses.Ok) { return(articleresult); } else { throw new ApiResponseException(articleresult.Error.Message); } }catch (AggregateException e) { throw new ApiResponseException(e.Message); } }
public async Task <List <Models.Article> > GetHeadlinesAsync() { var request = new TopHeadlinesRequest { Country = Countries.US }; var articles = await News.GetArticlesAsync(request); var top20 = new Articles(); foreach (var article in articles) { Models.Article art = new Models.Article(); art.sourceName = article.Source.Name; art.author = article.Author; art.title = article.Title; art.description = article.Description; art.url = article.Url; art.urlToImage = article.UrlToImage; art.publishedAT = article.PublishedAt.ToString(); top20.data.Add(art); } return(top20.data); }
private TopHeadlinesRequest GenerateHeadlinesRequest() { /* * Creates Headlines Request based on menu selection */ TopHeadlinesRequest request = new TopHeadlinesRequest(); if (Check_Country.Checked) { switch (Country.SelectedItem.ToString().ToUpper()) { case ("UAE"): request.Country = Countries.AE; break; case ("ARGENTINA"): request.Country = Countries.AR; break; case ("AUSTRIA"): request.Country = Countries.AT; break; case ("AUSTRALIA"): request.Country = Countries.AU; break; case ("BELGIUM"): request.Country = Countries.BE; break; case ("BULGARIA"): request.Country = Countries.BG; break; case ("BRAZIL"): request.Country = Countries.BR; break; case ("CANADA"): request.Country = Countries.CA; break; case ("SWITZERLAND"): request.Country = Countries.CH; break; case ("CHINA"): request.Country = Countries.CN; break; case ("COLUMBIA"): request.Country = Countries.CO; break; case ("CUBA"): request.Country = Countries.CU; break; case ("CZECHIA"): request.Country = Countries.CZ; break; case ("GERMANY"): request.Country = Countries.DE; break; case ("EGYPT"): request.Country = Countries.EG; break; case ("FRANCE"): request.Country = Countries.FR; break; case ("UK"): request.Country = Countries.GB; break; case ("GREECE"): request.Country = Countries.GR; break; case ("HONG KONG"): request.Country = Countries.HK; break; case ("HUNGARY"): request.Country = Countries.HU; break; case ("INDONESIA"): request.Country = Countries.ID; break; case ("IRELAND"): request.Country = Countries.IE; break; case ("ISRAEL"): request.Country = Countries.IL; break; case ("INDIA"): request.Country = Countries.IN; break; case ("ITALY"): request.Country = Countries.IT; break; case ("JAPAN"): request.Country = Countries.JP; break; case ("KOREA"): request.Country = Countries.KR; break; case ("LITHUANIA"): request.Country = Countries.LT; break; case ("LATVIA"): request.Country = Countries.LV; break; case ("MOROCCO"): request.Country = Countries.MA; break; case ("MEXICO"): request.Country = Countries.MX; break; case ("MALAYSIA"): request.Country = Countries.MY; break; case ("NIGERIA"): request.Country = Countries.NG; break; case ("NETHERLANDS"): request.Country = Countries.NL; break; case ("NORWAY"): request.Country = Countries.NO; break; case ("NEW ZEALAND"): request.Country = Countries.NZ; break; case ("PHILIPPINES"): request.Country = Countries.PH; break; case ("POLAND"): request.Country = Countries.PL; break; case ("PORTUGAL"): request.Country = Countries.PT; break; case ("ROMANIA"): request.Country = Countries.RO; break; case ("SERBIA"): request.Country = Countries.RS; break; case ("RUSSIA"): request.Country = Countries.RU; break; case ("SAUDI ARABIA"): request.Country = Countries.SA; break; case ("SWEDEN"): request.Country = Countries.SE; break; case ("SLOVENIA"): request.Country = Countries.SI; break; case ("SLOVAKIA"): request.Country = Countries.SK; break; case ("THAILAND"): request.Country = Countries.TH; break; case ("TURKEY"): request.Country = Countries.TR; break; case ("TAIWAN"): request.Country = Countries.TW; break; case ("UKRAINE"): request.Country = Countries.UA; break; case ("US"): request.Country = Countries.US; break; case ("VENEZUELA"): request.Country = Countries.VE; break; case ("SOUTH AFRICA"): request.Country = Countries.ZA; break; default: request.Country = Countries.GB; break; } } if (Check_Catagory.Checked) { switch (Catagory.SelectedItem.ToString().ToUpper()) { case ("BUSINESS"): request.Category = Categories.Business; break; case ("ENTERTAINMENT"): request.Category = Categories.Entertainment; break; case ("HEALTH"): request.Category = Categories.Health; break; case ("SCIENCE"): request.Category = Categories.Science; break; case ("SPORTS"): request.Category = Categories.Sports; break; case ("TECHNOLOGY"): request.Category = Categories.Technology; break; default: request.Category = Categories.Technology; break; } } return(request); }
/// <summary> /// Query the /v2/top-headlines endpoint for live top news headlines. /// </summary> /// <param name="request">The params and filters for the request.</param> /// <returns></returns> public ArticlesResult GetTopHeadlines(TopHeadlinesRequest request) { return(GetTopHeadlinesAsync(request).Result); }
public GoogleRequest(TopHeadlinesRequest topHeadlinesRequest) : base(topHeadlinesRequest) { }
public AppleRequest(TopHeadlinesRequest topHeadlinesRequest) : base(topHeadlinesRequest) { }
public static async Task <IEnumerable <Article> > GetArticlesAsync(TopHeadlinesRequest request) { var articles = await client.GetTopHeadlinesAsync(request); return(articles.Articles.AsEnumerable()); }
protected Request(TopHeadlinesRequest topHeadlinesRequest) { TopHeadlinesRequest = topHeadlinesRequest; }