Naver Api 사용하기 사전 준비 단계
①. 네이버 오픈 API 이용 신청하기
https://developers.naver.com/products/service-api/datalab/datalab.md
②. 애플리케이션 등록 (Application 메뉴 선택 > 애플리케이션 등록)
- 애플리케이션 이름
- 사용API
- 등록하기 버튼 클릭으로 완료.
등록을 완료하시면 Client ID와 Client Secret 정보를 받게 됩니다.
이 정보를 이용해서 네이버 OPEN API에 접근할 수 있습니다.
③. 네이버 오픈 API 목록
검색 | 네이버 블로그, 이미지, 웹, 뉴스, 백과사전, 책, 카페, 지식iN 등 검색 | 25,000회/일 |
네이버 로그인 | 외부 사이트에서 네이버 로그인 기능 구현 | 없음 |
네이버 회원 프로필 조회 | 네이버 회원 이름, 이메일 주소, 휴대전화번호, 별명, 성별, 생일, 연령대, 출생연도, 프로필 조회 | 없음 |
Papago 번역 | Papago 번역 인공신경망 기반 기계 번역 | 10,000글자/일 |
CLOVA Face Recognition | 입력된 사진을 입력받아 얼굴윤곽/부위/표정/유명인 닮음도를 리턴 | 1,000건/일 |
데이터랩(검색어트렌드) | 통합검색어 트렌드 조회 | 1,000회/일 |
데이터랩(쇼핑인사이트) | 쇼핑인사이트 분야별 트렌드 조회 | 1,000회/일 |
캡차(이미지) | 자동 입력 방지용 보안 이미지 생성 및 입력값 비교 | 1,000회/일 |
캘린더 | 로그인한 사용자 캘린더에 일정 추가 가능 | 5,000회/일 |
카페 | 특정 네이버 카페 가입하기 | 50회/일 |
카페 | 네이버 회원이 가입한 카페 게시판에 글 쓰기 | 200회/일 |
단축URL | 입력된 URL을 me2.do 형태의 짧은 URL로 변환 | 25,000회/일 |
공유하기 | 네이버 블로그, 카페 공유하기 | 없음 |
④. 개발자가이드의 예제 참고하시면 됩니다.
네이버 API 구현
네이버 검색 api 구현 기본 코드
[파이썬] 통합 검색어 API 구현 예제 (출처: Naver)
https://developers.naver.com/docs/serviceapi/datalab/search/search.md#python
#-*- coding: utf-8 -*-
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
url = "https://openapi.naver.com/v1/datalab/search";
body = "{\"startDate\":\"2017-01-01\",\"endDate\":\"2017-04-30\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"한글\",\"keywords\":[\"한글\",\"korean\"]},{\"groupName\":\"영어\",\"keywords\":[\"영어\",\"english\"]}],\"device\":\"pc\",\"ages\":[\"1\",\"2\"],\"gender\":\"f\"}";
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
request.add_header("Content-Type","application/json")
response = urllib.request.urlopen(request, data=body.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
[C#] 통합 검색어 API 구현 예제(출처: Naver)
https://developers.naver.com/docs/serviceapi/datalab/search/search.md#c
using System;
using System.Net;
using System.Text;
using System.IO;
namespace NaverAPI_Guide
{
public class APIExamDatalabTrend
{
static void Main(string[] args)
{
string url = "https://openapi.naver.com/v1/datalab/search";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-Naver-Client-Id", "YOUR-CLIENT-ID");
request.Headers.Add("X-Naver-Client-Secret", "YOUR-CLIENT-SECRET");
request.ContentType = "application/json";
request.Method = "POST";
string body = "{\"startDate\":\"2017-01-01\",\"endDate\":\"2017-04-30\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"한글\",\"keywords\":[\"한글\",\"korean\"]},{\"groupName\":\"영어\",\"keywords\":[\"영어\",\"english\"]}],\"device\":\"pc\",\"ages\":[\"1\",\"2\"],\"gender\":\"f\"}";
byte[] byteDataParams = Encoding.UTF8.GetBytes(body);
request.ContentLength = byteDataParams.Length;
Stream st = request.GetRequestStream();
st.Write(byteDataParams, 0, byteDataParams.Length);
st.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
stream.Close();
response.Close();
reader.Close();
Console.WriteLine(text);
}
}
}
뉴스와 블로그의 검색 결과 값은 아래와 같고 이를 파싱하여서 사용하면됩니다.
파싱하기 쉬운 것은 json 형태입니다.
위 샘플 코드를 이용하시면 쉽게 결과값을 볼 수가 있습니다.
네이버 뉴스
{
"lastBuildDate":"Mon, 28 Aug 2023 19:49:31 +0900",
"total":49292211,
"start":1,
"display":10,
"items":[
{
"title":"'위법' 경고에 9·4 집회 취소…"추모 연가도 불가" vs "직권남용"",
"originallink":"http:\/\/www.mbn.co.kr\/pages\/news\/newsView.php?news_seq_no=4958179",
"link":"https:\/\/n.news.naver.com\/mnews\/article\/057\/0001764922?sid=102",
"description":"" '교사 휴업'을 놓고 시도 교육감이 각자 다른 목소리를 내면서 진보와 보수 이념 양상으로 흐르는 데 대한 우려도 나옵니다. MBN<b>뉴스<\/b> 박유영입니다. 영상취재: 강두민 기자 영상편집: 김상진 그래픽: 강수연",
"pubDate":"Mon, 28 Aug 2023 19:49:00 +0900"
},
{
"title":"'9.4 공교육 멈춤의 날' 교육부-학교 현장 대치 국면",
"originallink":"http:\/\/www.idomin.com\/news\/articleView.html?idxno=833275",
"link":"http:\/\/www.idomin.com\/news\/articleView.html?idxno=833275",
"description":"\/연합<b>뉴스<\/b> ◇교육부, 파면·해임까지 언급 = 교육부는 학교가 이날을 임시휴업일로 정하거나 교사가 연가 또는 병가를 사용하는 것은 위법이고, 교장의 승인 역시 위법이라며 학교 현장을 압박하고 있다. 지난 27일에는... ",
"pubDate":"Mon, 28 Aug 2023 19:48:00 +0900"
},
네이버 블로그
// 네이버 블로그 결과값
{
"lastBuildDate": "Wed, 28 Jul 2021 18:45:57 +0900",
"total": 29856,
"start": 1,
"display": 10,
"items": [
{
"title": "핫한 제주 <b>노티드 도넛</b> 다녀온 후기!(메뉴 추천)",
"link": "https:\/\/blog.naver.com\/betelgiuse?Redirect=Log&logNo=222441433706",
"description": "시간 관게없이 4,000원이 발생하고 <b>노티드</b> 영수증을 지참하시면 2,000원을 할인해준답니다. 또 이곳의... 그리고 제주 <b>노티드 도넛</b>은 <b>도넛</b> 종류 말고도 쿠키와 크로플 종류들도 준비되어 있으니 취향에 따라 다른... ",
"bloggername": "굿린",
"bloggerlink": "https://blog.naver.com/betelgiuse",
"postdate": "20210722"
}
....
}
위 결과값에서 json 파싱 라이브러리를 사용하여 쉽게 원하는 값만 취하면 됩니다.
json 파싱은 NuGet 패키지 Newtonsoft.json을 사용하면 쉽습니다.
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();
C# 네이버 API를 이용한 뉴스 검색하기 코드
c# 윈폼을 이용하여 네이버 뉴스를 검색하는 코드를 작성해 볼께요.
① 아래와 같은 윈폼을 만든다.
②json 파싱을 위해 NuGet 패키지 Newtonsoft.json을 설치
③아래와 코드를 적당히 넣으시면 됩니다.
참고로 네이버에서 제공하는 뉴스 기사의 날짜 시간값 포멧이 "Wed, 29 Nov 2023 17:18:00 +0900" 이런 형태이다.
이것을 보기 편하게 바꾸기 위해서는 다음 코드가 필요하다.
var pubDate = parseJson["items"][i]["pubDate"].ToString();
// pubDate의 포맷을 변경하여 출력
DateTime pubDate1 = DateTime.Parse(pubDate);
string formattedPubDate = pubDate1.ToString("yyyy-MM-dd HH:mm:ss");
전체 코드는 아래와 같습니다.
using System;
using System.Globalization;
using System.IO;
using System.Net;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
namespace naver_search
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void find_button_Click(object sender, EventArgs e)
{
try
{
string results = getNaverSearch();
// 결과 출력
//log_print(results);
var parseJson = JObject.Parse(results);
var countsOfDisplay = Convert.ToInt32(parseJson["display"]);
var countsOfResults = Convert.ToInt32(parseJson["total"]);
CultureInfo provider = CultureInfo.InvariantCulture;
for (int i = 0; i < countsOfDisplay; i++)
{
var title = parseJson["items"][i]["title"].ToString();
title = title.Replace("</b>", "");
title = title.Replace(""", "\"");
var description = parseJson["items"][i]["description"].ToString();
description = description.Replace("</b>", "");
description = description.Replace(""", "\"");
var link = parseJson["items"][i]["link"].ToString();
var originallink = parseJson["items"][i]["originallink"].ToString();
var pubDate = parseJson["items"][i]["pubDate"].ToString();
// pubDate의 포맷을 변경하여 출력
DateTime pubDate1 = DateTime.Parse(pubDate);
string formattedPubDate = pubDate1.ToString("yyyy-MM-dd HH:mm:ss");
log_print(string.Format("제목: {0}", title));
log_print(string.Format("내용: {0}", description));
log_print(string.Format("URL: {0}", originallink));
log_print(string.Format("작성일: {0}", formattedPubDate));
log_print("\n");
}
}
catch (Exception exc)
{
log_print(exc.Message);
}
}
private string getNaverSearch()
{
string _clientId = "발급받은 네이버API ID";
string _clientSecret = "발급받은 네이버API 비밀번호";
string keyword = keyword_textBox.Text; //검색어
int list_cnt = 10;
string display = list_cnt.ToString();
string sort = "date"; // 정렬
// 정렬 (0:시간순, 1:정확도)
sort = "date"; // 시간순
//sort = "sim"; // 정확도
// 최종 검색 query
string query = string.Format("?query={0}&display={1}sort={2}", keyword, display, sort);
// 네이버 뉴스 검색
string _apiUrl = "https://openapi.naver.com/v1/search/news.json";
WebRequest request = WebRequest.Create(_apiUrl + query);
request.Headers.Add("X-Naver-Client-Id", _clientId);
request.Headers.Add("X-Naver-Client-Secret", _clientSecret);
string requestResult = "";
using (var response = request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (var reader = new StreamReader(dataStream))
{
requestResult = reader.ReadToEnd();
}
}
}
// 쓰레기값 제거
requestResult = requestResult.Replace("<b>", "");
requestResult = requestResult.Replace("</b>", "");
requestResult = requestResult.Replace("<", "<");
requestResult = requestResult.Replace(">", ">");
return requestResult;
}
private void log_print(string str_msg)
{
log_richTextBox.AppendText(str_msg + Environment.NewLine);
log_richTextBox.ScrollToCaret();
Application.DoEvents();
}
}
}
'공학속으로 > C#' 카테고리의 다른 글
C# json 파싱하기 (0) | 2023.09.05 |
---|---|
[C#] DLL을 포함한 단일 EXE배포 방법 (0) | 2023.09.04 |
C# 리스트뷰(ListView) 사용하기 (0) | 2023.08.29 |
C# ChatGPT API사용하기 (0) | 2023.07.13 |
C# 리스트박스(ListBox) 사용법 (0) | 2023.07.07 |
댓글