«   2019/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
Statistics Graph
관리 메뉴

언제나 휴일

[OPEN API] 4. C# Windows Forms 응용 프로그램, 다음 Open API 책 검색3 본문

네트워크 및 보안/OPEN API

[OPEN API] 4. C# Windows Forms 응용 프로그램, 다음 Open API 책 검색3

언제나 휴일 언제나휴일 2016. 5. 17. 15:26


[OPEN API] 4. C# Windows Forms , 다음 Open API 책 검색3



안녕하세요. 언제나 휴일, 언휴예요.


앞에서 다음 Open API 책 검색 서비스를 이용하는 콘솔 응용 프로그램을 간단하게 만들어 보았어요.


이번에는 Windows Forms 응용 프로그램으로 책 검색 응용 프로그램을 만들어 보기로 해요.


다음 Open API를 이용한 책 검색기 Windows Forms 응용 프로그램


텍스트 입력 창에 질의를 입력한 후에 검색 버튼을 누르면 다음 Open API 책 검색 서비스를 이용하여 얻어온 도서 목록을 리스트 상자에 보여주고 리스트 상자의 항목을 선택하면 해당 도서 정보를 우측 화면에 제목, 저자, 출판사, 가격, 상세 정보, 이미지를 나타나게 하는 응용 프로그램이예요.


먼저 개발 도구에서 Visual C#, Windows Forms 응용 프로그램 프로젝트 템플릿을 선택하고 프로젝트 이름을 입력하세요.

Visual Studio 2015에서 Windows Forms 응용 프로그램 프로젝트 생성


앞의 실행 화면처럼 Form1의 자식 컨트롤을 배치하고 속성을 지정하세요.


다음은 Windows Forms 응용 프로그램 기술에 관한 기본적인 게시글이예요. 필요하면 참고하세요.

No

컨트롤 유형

Name

기타

1

TextBox

tbox_query

쿼리 입력 상자

2

Button

btn_search

검색 버튼

3

ListBox

lbox_book

도서 목록 리스트 상자

4

Label

lb_title

도서 제목

5

Label

lb_author

저자

6

Label

lb_pub

출판사

7

Label

lb_price

가격

8

TextBox

tbox_desc

도서 설명, Multiline 속성 True

9

PictureBox

Pb_image

도서 이미지, SizeMode 속성 StretchImage


이제 소스 코드를 편집합시다.


using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.Xml;

 

namespace _검색기3

{

    public partial class Form1 : Form

    {

자신의 다음 Open API 키를 멤버 필드로 선언하세요.

        string key = "자신의 다음 OPEN API ";//OPEN API

        public Form1()

        {

            InitializeComponent();

        }

검색 버튼의 클릭 이벤트 핸들러를 등록하세요. 이벤트 핸들러는 속성 창의 번개 표시를 이용하여 등록합니다. 이벤트 핸들러 등록 방법을 모르시는 분은 위쪽 Windows Forms 응용 프로그램 기술에 관한 링크를 통해 게시글을 확인하세요.

*버튼을 더블 클릭해도 버튼의 클릭 이벤트 핸들러를 등록할 수 있습니다.*

        private void btn_search_Click(object sender, EventArgs e)

        {

도서 목록 리스트 상자의 항목을 지우세요.

            lbox_book.Items.Clear();

그리고 자신의 다음 Open API 키와 사용자가 입력한 질의를 인자로 도서 검색을 요청합니다. 여기에서는 BookManager 클래스를 별도로 정의하여 도서 검색 서비스를 담당하게 할 거예요.

            List<Book> books = BookManager.Search(key, tbox_query.Text);

도서 목록 리스트 상자의 데이터 소스를 검색 결과인 도서 리스트로 설정하세요. 이와 같이 설정하면 도서 리스트의 도서 목록을 리스트 상자에 표시해 줍니다.

            lbox_book.DataSource = books;

        }

 

도서 목록 리스트 상자의 선택 인덱스 변경 이벤트 핸들러를 등록하세요. 마찬가지로 속성 창의 번개 표시를 이용하여 등록합니다.

*리스트 상자를 더블 클릭해도 리스트 상자의 선택 인덱스 변경 이벤트 핸들러를 등록할 수 있습니다.*

        private void lbox_book_SelectedIndexChanged(object sender, EventArgs e)

        {

선택한 항목을 Book 형식으로 참조합니다.

            Book book = lbox_book.SelectedItem as Book;

Book의 멤버 속성을 이용하여 각 컨트롤의 Text 및 ImageLocation 속성을 설정하세요.

            lb_title.Text = book.Title;

            lb_author.Text = book.Author;

            lb_pub.Text = book.Publisher;

            lb_price.Text = book.Price;

            tbox_desc.Text = book.Description;

            pb_image.ImageLocation = book.ImageLocation;

        }

    }

 

 

BookManager 클래스를 정의합시다.

    internal class BookManager

    {

정적 메서드로 다음 Open API 키와 질의를 입력 인자로 받아 검색 결과인 Book 리스트를 반환하는 메서드를 구현합시다.

        internal static List<Book> Search(string key, string title)

        {

비어있는 Book 리스트 개체를 생성하세요.

            List<Book> books = new List<Book>();


검색 질의 및 사이트로 쿼리 문자열을 만듭니다.

            //검색 질의 및 사이트 문자열

            string queryurl = string.Format("http://apis.daum.net/search/book?apikey={0}&q={1}&output=xml&result=20", key, title);

 

Xml 문서 개체를 생성한 후에 쿼리 문자열을 인자로 책 검색 서비스 질의하여 결과를 로딩합니다.

            XmlDocument xdoc = new XmlDocument(); //Xml 문서 개체 생성

            xdoc.Load(queryurl);            //Xml 문서 개체에 사이트 로딩

 

루트 요소인 channel 요소를 탐색한 후에 item 목록을 구합니다.

            XmlNode cnode = xdoc.SelectSingleNode("channel");//channel 요소 탐색

            XmlNodeList xnl = cnode.SelectNodes("item");//item 요소 목록 탐색

 

각 item 요소를 분석하여 도서개체를 생성하고 books 목록에 추가합니다. item 요소를 분석하여 도서 개체를 반환하는 부분은 Book 클래스를 만들어 정적 메서드 Parse에서 담당할 거예요.

            foreach (XmlNode xn in xnl) // item 요소마다 반복

            {

                books.Add(Book.Parse(xn));

               

            }

books 목록을 반환해야겠죠.

            return books;

        }

    }

 

 

Book 클래스를 정의합시다.

    internal class Book

    {

제목, 저자, 출판사, 가격, 상세 설명, 이미지 위치를 속성으로 정의하세요. 가격도 편의상(이러면 ^^;;) 문자열 형식으로 정의할게요.

        internal string Title

        {

            get;

            private set;

        }

        internal string Author

        {

            get;

            private set;

        }

        internal string Publisher

        {

            get;

            private set;

        }

        internal string Price

        {

            get;

            private set;

        }

        internal string Description

        {

            get;

            private set;

        }

        internal string ImageLocation

        {

            get;

            private set;

        }


비어있는 도서 개체를 정적 읽기 전용으로 생성할게요.

        static readonly Book book = new Book("", "", "", "", "","");


정적 메서드 Parse를 정의합니다.

        internal static Book Parse(XmlNode xn)

        {

제목, 저자, 출판사, 가격, 상세 설명, 이미지 위치 요소를 탐색하여 내부 Text를 구하세요. 제목에 <b>나 </b> 등의 태그를 스킵하기 위해 Replace 메서드를 사용했어요.

            string title = xn.SelectSingleNode("title").InnerText;

            title = title.Replace("<b>", "");

            title = title.Replace("</b>", "");

            string author = xn.SelectSingleNode("author").InnerText;           

            string pub = xn.SelectSingleNode("pub_nm").InnerText;           

            string price = xn.SelectSingleNode("list_price").InnerText;           

            string desc = xn.SelectSingleNode("description").InnerText;           

            string image_loc = xn.SelectSingleNode("cover_l_url").InnerText;


얻어온 정보로 도서 개체를 생성하여 반환하세요.

            return new Book(title, author, pub, price, desc, image_loc);

        }

        private Book(string title, string author, string pub, string price, string desc,string image_loc)

        {

생성자에서는 입력 인자로 전달받은 값으로 속성을 설정합니다.

            Title = title;

            Author = author;

            Publisher = pub;

            Price = price;

            Description = desc;

            ImageLocation = image_loc;

        }


ToString 메서드를 재정의하면 리스트 상자에 반환한 문자열을 나타내 줍니다.

        public override string ToString()

        {

            return Title;

        }

    }

}

 

이상으로 다음 Open API 책 검색 서비스를 이용하여 C#언어로 Windows Forms 응용 프로그램을 만들어 보았어요.


앞에서 만들었던 프로그램보다 제법 모양이 갖추어졌네요.


앞으로도 다양한 Open API를 이용하여 다양한 언어로 다양한 형태의 프로그램을 만들어 보아요.


오늘도 모두 행복한 하루~


실습한 솔루션

책 검색기3.zip

여러분의 개발 환경에 맞게 변환하세요.

0 Comments
댓글쓰기 폼