티스토리 뷰
0. 주저리주저리
우선 API만 사용할 줄 알아도 꽤나 쓸만한 app을 만들 수 있다. 그런 점에서 100% 꿰뚫고 있어야 한다! 까지는 아니고 대충 어떤 원리로 동작하는지, 그 정도만 조금 알아도 필요할 때 바로 습득해서 사용할 수 있을 것 같다고 생각했다. 그러기에는 xml, json에 대해서 간단한 지식이 있어야 하고 http의 GET방식 등이나 이런 것에 조금 기초 지식이 있으면 좋을 것 같다.
Google은 조금 복잡해서 차차 써보기로하고 간단한 naver부터 해보았다.
1. Naver API 사용하기
이곳에 가면 볼 수 있다.
가장 먼저 애플리케이션 등록(API 이용신청)을 하자
애플리케이션 이름은 간단히 code project만드는 것처럼 짓고 싶은 이름으로 만들자,
사용 API는
네이버 아이디로 로그인,
데이터랩(검색어 트렌드, 쇼핑 등),
카페,
캘린더,
검색,
캡차(음성, 이미지),
파파고,
등 많다.
필요한 것을 선택해보자
비로그인 오픈 API도 크게 중요하지 않으니 적당히 입력하자.
애플리케이션을 등록하고 나면
'내 애플리케이션'에 애플리케이션 정보가 있다.
Client ID, Client Secret가 적혀있고, Open API 일일 사용량을 볼 수 있다.
이 Client ID와 Client Secret를 잘 기억하자,
2. C# code 작성
예제는 아주 잘 나와있다.
developers.naver.com/docs/search/blog/
검색 중에서도 블로그를 예로 들어보겠습니다.
코드의 내용을 보면 정말 간단하다,
단순히 query (검색어)를 만들고, 정해진 포맷의 url로 작성한다.
그리고 Http요청을 위해서 C#의 HttpWebRequest 객체를 만들고 HttpWebResponses로 받은 뒤 Stream을 열어 StreamReader로 값을 읽으면 끝이다.
사실 이런 Http 관련 class는 평소 잘 사용하지 않기 때문에 사용방법을 잘 모른다. 그런데 문서화 및 다른 블로그에서 사용방법을 잘 올려놓았기 때문에 사용에는 큰 무리가 없었고 직관적이어서 좋았다.
using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml; //for xml parsing
namespace APITest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_search_Click(object sender, EventArgs e)
{
//search
string clientId = "MyclientID";//from naver
string clientSecert = "MyClientSecret"; //from naver
try {
string query = text_search.Text;
//xml format
string url = "https://openapi.naver.com/v1/search/blog.xml?query="+query;
/*
* JSON format
* string url = "https://openapi.naver.com/v1/search/blog?query"+query;
*/
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-Naver-Client-Id", clientId);
request.Headers.Add("X-Naver-Client-Secret", clientSecert);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if(status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.UTF8);
text_result.Text = sr.ReadToEnd();
//parsing phase
string parsed_ret="";
XmlDocument xmldata = new XmlDocument();
xmldata.LoadXml(text_result.Text);
XmlElement root = xmldata.DocumentElement;
XmlNodeList nodelist = root.ChildNodes;
foreach (XmlNode nodeitem in nodelist){
for (int i = 0; i < nodeitem.ChildNodes.Count; ++i){
if (nodeitem.ChildNodes[i].Name == "item")
parsed_ret += nodeitem.ChildNodes[i]["title"].InnerText + "\r\n " + nodeitem.ChildNodes[i]["description"].InnerText + "\r\n\r\n";
}
}
text_parsed.Text = parsed_ret;
sr.Close();
stream.Close();
}
else
{
MessageBox.Show("Error occured! :" + status);
}
}
catch (Exception ee){
MessageBox.Show(ee.ToString());
}
}
}
}
위의 코드는 xml형태로 요청해서 xml값을 받은뒤 적당히 필요한 부분만 파싱도 한다.
winform을 사용해서 구현했다.
아마 코드를 보면 어떤 흐름으로 프로그램이 진행되는지 이해하기 더 쉬울 겁니다.
Http요청을 만들어서 보내고 response를 받고, status가 정상이면 그 데이터를 사용하는 방식입니다.
검색어를 '스시'로 해서 검색해본 결과
위의 Result는 XML그대로 즉, response그대로 출력한 것이고, 밑의 Result는 그나마 쓸만한 title, description tag의 내용만 추출한 것이다. 도중에도 bold tag가 있어서 보기는 싫지만..
위의 사진은 Response를 Chrome에서 열어본 것이다.(XML임)
channel이라는 root안에 Item들이 들어있고 거기에 title, link등 간단히 소개하는 description들이 있다. 여기서 필요한 부분을 파싱해주자,
내용을보면...
솔직히 blog 검색 api는 어디 응용해야 할지 잘 모르겠다. 다음엔 파파고를 한번 사용해봐야겠다.
'개발 > C#' 카테고리의 다른 글
[C#/JSON] JSON parser 구현 (0) | 2021.01.02 |
---|---|
[C#/ XML] XML parser 구현 (0) | 2021.01.01 |
[C#/API] Naver 파파고 번역 API 사용해보기 (Papago/네이버 API, Naver API) (0) | 2020.12.19 |
[C# / Collection] Queue<T> 분석 (0) | 2020.09.27 |
[C# / Collection] List<T> 분석 (0) | 2020.09.15 |