C# 네이버 API를 이용한 뉴스 검색하기 코드
네이버 API를 이용하여 네이버 뉴스를 검색하는 코드를 작성해 볼께요.
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Naver_news
{
internal class Program
{
static void Main(string[] args)
{
string _clientId = "네이버API ID";
string _clientSecret = "네이버API 비밀번호";
string query = "네이버 Open API"; // 검색할 문자열
string url = "https://openapi.naver.com/v1/search/news?query=" + query; // JSON 결과
// string url = "https://openapi.naver.com/v1/search/news.xml?query=" + query; // XML 결과
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-Naver-Client-Id", _clientId); // 클라이언트 아이디
request.Headers.Add("X-Naver-Client-Secret", _clientSecret); // 클라이언트 시크릿
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if (status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
else
{
Console.WriteLine("Error 발생=" + status);
}
}
}
}
네이버 api 사용하여 뉴스 검색 결과 값은 받으면 아래와 같은 형태로 출력됩니다.
네이버 뉴스
{
"lastBuildDate":"Fri, 15 Sep 2023 10:06:00 +0900",
"total":9332971,
"start":1,
"display":10,
"items":[
{
"title":""이제 안참는다"…아이브 소속사 스타쉽, 가짜뉴스 '엄중처벌' 촉구",
"originallink":"https:\/\/www.viva100.com\/main\/view.php?key=20230915010004319",
"link":"https:\/\/www.viva100.com\/main\/view.php?key=20230915010004319",
"description":"교통<b>사고<\/b> 현장에 빠른 속도로 몰려드는 견인차를 부르는 ‘렉카’(wrecker)에 서 유래했다. 대중의 관심을 끌어 조회수를 올릴수록 더 큰 수익을 낼 수 있기 때문에 자극적인 이미지와 확인되지 않은 정보를 ‘아니면 말고’... ",
"pubDate":"Fri, 15 Sep 2023 10:04:00 +0900"
},
{
"title":"지역난방공사, 추석연휴 대비 난방시설 안전점검 실시",
"originallink":"https:\/\/www.ekn.kr\/web\/view.php?key=20230915010004203",
"link":"https:\/\/www.ekn.kr\/web\/view.php?key=20230915010004203",
"description":"한국지역난방공사(사장 정용기)는 추석연휴 기간 중 안정적인 지역난방 공급 및 재난·안전<b>사고<\/b> 예방을 위해... 지난 14일 경기 성남 분당지사 열수송관 공사현장을 방문해 안전<b>사고<\/b> 예방을 당부하고 있다. 한국지역난방공사",
"pubDate":"Fri, 15 Sep 2023 10:04:00 +0900"
},
위 결과값에서 원하는 내용만 취하려면 json 파싱을 해야 합니다.
json 파싱 라이브러리를 사용하면 쉽게 원하는 값만 취할 수 있습니다.
json 파싱은 NuGet 패키지 Newtonsoft.json을 사용하면 편합니다.
① json 파싱을 위해 NuGet 패키지 Newtonsoft.json을 설치
② Newtonsoft.json 사용 방법
아래와 같은 형태의 json 이 있다면,
{
"lastBuildDate":"Fri, 15 Sep 2023 10:06:00 +0900",
"total":9332971,
"start":1,
"display":10,
"items":[
{
"title":""이제 안참는다"…아이브 소속사 스타쉽, 가짜뉴스 '엄중처벌' 촉구",
"originallink":"https:\/\/www.viva100.com\/main\/view.php?key=20230915010004319",
"link":"https:\/\/www.viva100.com\/main\/view.php?key=20230915010004319",
"description":"교통<b>사고<\/b> 현장에 빠른 속도로 몰려드는 견인차를 부르는 ‘렉카’(wrecker)에 서 유래했다. 대중의 관심을 끌어 조회수를 올릴수록 더 큰 수익을 낼 수 있기 때문에 자극적인 이미지와 확인되지 않은 정보를 ‘아니면 말고’... ",
"pubDate":"Fri, 15 Sep 2023 10:04:00 +0900"
},
③아래 코드와 같이 json 파싱 코드를 적당한 곳에 넣으면 됩니다.
using Newtonsoft.json.Linq;
var parseJson = JObject.Parse(results);
var countsOfDisplay = Convert.ToInt32(parseJson["display"]);
var title = parseJson["items"][i]["title"].ToString();
var description = parseJson["items"][i]["description"].ToString();
이런 결과값을 얻을 수 있습니다.
전체 뉴스 검색 후 json 파싱 코드는 아래와 같습니다.
※ 네이버API을 이용한 뉴스 검색이기에 네이버 api ID, 비밀번호가 없으면 에러가 발생합니다.
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Naver_news
{
internal class Program
{
static void Main(string[] args)
{
string _clientId = "네이버API ID";
string _clientSecret = "네이버API 비밀번호";
string query = "사고"; // 검색할 문자열
string url = "https://openapi.naver.com/v1/search/news?query=" + query; // JSON 결과
// string url = "https://openapi.naver.com/v1/search/blog.xml?query=" + query; // XML 결과
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-Naver-Client-Id", _clientId); // 클라이언트 아이디
request.Headers.Add("X-Naver-Client-Secret", _clientSecret); // 클라이언트 시크릿
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if (status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
//Console.WriteLine(text);
var parseJson = JObject.Parse(text);
var countsOfDisplay = Convert.ToInt32(parseJson["display"]);
for (int i = 0; i < countsOfDisplay; i++)
{
var title = parseJson["items"][i]["title"].ToString();
var description = parseJson["items"][i]["description"].ToString();
var link = parseJson["items"][i]["link"].ToString();
var pubDate = parseJson["items"][i]["pubDate"].ToString();
Console.WriteLine(string.Format("제목: {0}:", title));
Console.WriteLine(string.Format("내용: {0}:", description));
Console.WriteLine(string.Format("URL: {0}:", link));
Console.WriteLine(string.Format("작성일: {0}:", pubDate));
Console.WriteLine("\n");
}
}
else
{
Console.WriteLine("Error 발생=" + status);
}
}
}
}
위 코드 실행 결과값입니다.
'공학속으로 > C#' 카테고리의 다른 글
C# 디렉토리에 있는 csv 파일을 utf-8 bom 파일로 변경하기 (1) | 2023.11.29 |
---|---|
C# xml 파싱하기 (0) | 2023.09.15 |
[C#] DLL을 포함한 단일 EXE배포 방법 (0) | 2023.09.04 |
C# Naver Api 사용하여 네이버 뉴스 검색하기 (1) | 2023.09.01 |
C# 리스트뷰(ListView) 사용하기 (0) | 2023.08.29 |
댓글