네이버 웹문서 검색 Open API 예제 및 소스
작성일 : 2008. 1. 16. 08:37시간날 때 Open API를 이용한 기획을 해보려고 우선 네이버 Open API를 이용한 간단한 샘플(c# 2.0 기준)을 만들어 보았다.
네이버 웹문서 검색을 기준으로 Open API를 이용한 웹사이트를 만드려면
- URL을 규칙에 맞게 호출
- 호출된 URL에 해당하는 XML 문자열을 저장
- XML을 적당히 파싱해서 HTML 페이지를 만듦
모든 소스를 한 페이지로 간단히 만드려고 바인딩할 데이터를 DataTable로 만들었지만 실무에 적용하려면 클래스를 만들고 제너릭스로 리턴하는 것이 좋지 않나 싶다.
XAML을 이용하는 방법도 생각해 볼 수 있지만 잘 알지 못하므로 패스...
예제보기 (에러처리는 당연히 안함^^)
주요소스 (나머지는 HTML 렌더링 하는 부분)
protected void DefaultBind()
{
//네이버 OpenAPI는 URL을 호출하여 XML 데이터를 받는것으로 구성되어 있음
WebClient wc = new WebClient();
int start = (this.pageNo - 1) * this.pageSize + 1;
wc.QueryString.Add("key", this.naverOpenAPIKey); //이용 등록을 통해 받은 key 스트링을 입력.
wc.QueryString.Add("target", this.searchType); //서비스를 위해서는 무조건 지정.
wc.QueryString.Add("query", this.searchText); //검색을 원하는 질의, UTF-8 인코딩.
wc.QueryString.Add("display", this.pageSize.ToString()); //검색결과 출력건수를 지정. 최대 100까지 가능.
wc.QueryString.Add("start", start.ToString()); //검색의 시작위치를 지정할 수 있음. 최대 1000까지 가능.
wc.Encoding = System.Text.Encoding.UTF8; //네이버 데이터는 UTF-8 인코딩.
//URL을 호출하여 문자열로 받음
string xmlString = wc.DownloadString(this.naverRequestUrl);
//문자열을 XMLDocument 객체로 로드
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xmlString);
XmlNode xNode = xDoc.SelectSingleNode("/rss/channel/total");
//페이징 컨트롤 랜더링을 위한 세팅
this.pager.RowCount = int.Parse(xNode.InnerText);
this.pager.PageSize = this.pageSize;
this.pager.PageNo = this.pageNo;
this.ltlResult.Text = String.Format("검색결과 {0}개의 사이트 중 {1}번째 리스트", this.pager.RowCount.ToString("#,#"), this.pager.PageNo.ToString());
XmlNodeList xNodeList = xDoc.SelectNodes("/rss/channel/item");
//Repeater에 바인딩할 DataTable을 생성
DataTable dt = new DataTable();
dt.Columns.Add("title");
dt.Columns.Add("link");
dt.Columns.Add("description");
//item 항목을 DataTable에 넣음
for (int i = 0; i < xNodeList.Count; i++)
{
DataRow dr = dt.NewRow();
dr["title"] = xNodeList[i].ChildNodes[0].InnerText;
dr["link"] = xNodeList[i].ChildNodes[1].InnerText;
dr["description"] = xNodeList[i].ChildNodes[2].InnerText;
dt.Rows.Add(dr);
}
this.rptList.DataSource = dt;
this.rptList.DataBind();
}
페이징 부분은 Ajax Paging Control 예제 및 소스 부분을 그대로 사용하면 됨.
요즘 유행하는 닌텐도 두뇌게임처럼 개발자에게는 재미있는 장남감이 생긴게 아닌가 싶다.
페이스북 댓글