반응형

C#에서 Rest API를 사용하는 방법과 뉴스 정보를 가져오는 Test Code를 정리하고자 합니다. 

 

먼저 뉴스 정보를 가져오기 위해서 Open API 접속 정보와 Key를 가지고 와야 합니다. 

 

News API - A JSON API for live news and blog articles

Search worldwide news articles and headlines from all over the web in real-time with our free News API.

newsapi.org

newsapi에 접속하고 로그인을 하면 아래화면과 같이 API Key값이 생성됩니다. 

    그리고 Document에서 가이드해주는 내용을 확인하고 가이드에 따라 Rest API를 사용하면 됩니다.

  • Base URL : http://newsapi.org/v2/top-headlines
  • Query Parameter : 
    • country : us / kr 등 국가코드
    • apiKey : 본인 계정의 apiKey 값

 

이제 프로젝트에서 RestAPI를 사용하기 위한 RestSharp이라는 라이브러리를 설치후 해당 라이브러리를 이용하여 쿼리를 합니다. 

 

RestSharp

 

restsharp.dev

이제 프로젝트에서 NuGep Package에서 RestSharp을 검색하여 설치합니다.

 

이제 소스코드를 작성합니다. 필요한 정보는 newsapi에서 확인한 내용들을 이용하여 파라미터에 적용합니다. 

string baseUrl = @"http://newsapi.org/v2";

RestClient client = new RestClient(baseUrl);
var request = new RestRequest("/top-headlines", Method.GET);

request.AddQueryParameter("country", "kr");
request.AddQueryParameter("apiKey", "8a973bcb078b4731ae1e7543d1acdd88");

IRestResponse response = client.Get(request);
var content = response.StatusCode.ToString();

if (response.StatusCode == HttpStatusCode.OK)
{
	txtResult.Text = response.Content;
}

코드를 실행해보면 아래와 내용과 같이 Response Body에 json포맷으로 결과가 수신됩니다.

이제 json 데이타를 Deserialize하여 리스트에 출력하면 아래 화면과 같이 뉴스 리스트가 출력됩니다.

전체 소스코드

using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinformExamples.RestAPI
{
	public partial class RestApiTestDlg : Form
	{
		public class NewsContent
		{
			public string author { get; set; }
			public string title { get; set; }
			public string description { get; set; }
			public string url { get; set; }
			public string urlToImage { get; set; }
			public DateTime publishedAt { get; set; }
			public string content { get; set; }
		}

		public class ResponseContent
		{
			public string status { get; set; }
			public int totalResults { get; set; }
			public List<NewsContent> articles { get; set; }
		}

		public RestApiTestDlg()
		{
			InitializeComponent();
		}

		private void btnGetNews_Click(object sender, EventArgs e)
		{
			string baseUrl = @"http://newsapi.org/v2";

			RestClient client = new RestClient(baseUrl);
			var request = new RestRequest("/top-headlines", Method.GET);

			request.AddQueryParameter("country", "kr");
			request.AddQueryParameter("apiKey", "8a973bcb078b4731ae1e7543d1acdd88");

			IRestResponse response = client.Get(request);
			var content = response.StatusCode.ToString();

			if (response.StatusCode == HttpStatusCode.OK)
			{
				ResponseContent news = JsonConvert.DeserializeObject<ResponseContent>(response.Content);
				txtResult.Text = response.Content;

				dgvNews.DataSource = news.articles;
			}
		}
	}
}
반응형

'[====== Development ======] > C#' 카테고리의 다른 글

WPF DynamicResource 적용 및 UI 에 Style 적용  (0) 2021.01.12
.Net용 Json 라이브러리  (0) 2021.01.07
Extension Method  (0) 2021.01.07
간단한 Logger 만들기  (0) 2021.01.07
C# Expression  (0) 2021.01.04

+ Recent posts