시간날 때 Open API를 이용한 기획을 해보려고 우선 네이버 Open API를 이용한 간단한 샘플(c# 2.0 기준)을 만들어 보았다.

네이버 웹문서 검색을 기준으로 Open API를 이용한 웹사이트를 만드려면

  1. URL을 규칙에 맞게 호출
  2. 호출된 URL에 해당하는 XML 문자열을 저장
  3. 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 예제 및 소스 부분을 그대로 사용하면 됨.

요즘 유행하는 닌텐도 두뇌게임처럼 개발자에게는 재미있는 장남감이 생긴게 아닌가 싶다.

카테고리
전체보기 (63)
기획 (5)
인터넷 (4)
일상 (41)
(2)
프로그래밍 (11)
최근글
최근댓글