네이버 웹문서 검색 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 예제 및 소스 부분을 그대로 사용하면 됨.
요즘 유행하는 닌텐도 두뇌게임처럼 개발자에게는 재미있는 장남감이 생긴게 아닌가 싶다.
페이스북 댓글