안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 Kakao Open API를 활용하여 도서를 검색하는 윈도우 프로그램을 제작하는 실습입니다.
Kakao 도서 검색은 Json 방식으로 제공하고 있어요.
이를 활용하여 데이터를 수집하고 CSV 파일로 기록 및 로딩하는 작업을 진행할 거예요.
실습은 동영상 강의를 참고해 주세요.
컨트롤 배치

검색 버튼의 Click 이벤트 핸들러와 메인 폼의 Load 이벤트, FormClosed 이벤트 핸들러를 등록합니다.
Form1.cs
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 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using System; using System.Collections.Generic; using System.Windows.Forms; namespace 카카오_API를_이용한_도서_검색_및_CSV_파일로_저장_로딩 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_search_Click(object sender, EventArgs e) { List<Book> books = BookSearcher.Search(tbox_query.Text); SetLVBooks(books); tbox_query.Text = ""; } private void SetLVBooks(List<Book> books) { ListViewItem lvi; string[] datas; foreach(Book book in books) { datas = new string[3] { book.ISBN, book.Title, book.Author }; lvi = new ListViewItem(datas); lv_book.Items.Add(lvi); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { BookSearcher.Save(); } private void Form1_Load(object sender, EventArgs e) { List<Book> books = BookSearcher.Load(); SetLVBooks(books); } } } |
BookSearcher.cs
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
using System.Collections.Generic; using System.IO; using System.Net; using System.Web.Script.Serialization; namespace 카카오_API를_이용한_도서_검색_및_CSV_파일로_저장_로딩 { public static class BookSearcher { static Dictionary<string, Book> book_dic = new Dictionary<string, Book>(); static string url = "https://dapi.kakao.com/v3/search/book"; public static System.Collections.Generic.List<Book> Search(string text) { List<Book> books = new List<Book>(); string query_str = string.Format("{0}?target=title&query={1}", url,text); WebRequest req = WebRequest.Create(query_str); req.Headers.Add("Authorization", "KakaoAK " + rkey); WebResponse res = req.GetResponse(); Stream stream = res.GetResponseStream(); StreamReader sr = new StreamReader(stream); string result = sr.ReadToEnd(); JavaScriptSerializer jss = new JavaScriptSerializer(); dynamic dres = jss.Deserialize<dynamic>(result); dynamic ddoc = dres["documents"]; object[] dbooks = ddoc; Book book; for(int i = 0; i<dbooks.Length;i++) { book = MakeBook(dbooks[i]); if (book_dic.ContainsKey(book.ISBN) == false) { book_dic[book.ISBN] = book; books.Add(book); } } return books; } static Book MakeBook(dynamic dbook) { string isbn = dbook["isbn"]; string title = dbook["title"]; title = title.Replace(",", " "); string author = dbook["authors"][0]; author = author.Replace(",", " "); return new Book(title, isbn, author); } public static void Save() { FileStream fs = File.Create("book.csv"); StreamWriter sw = new StreamWriter(fs); foreach(Book book in book_dic.Values) { sw.WriteLine("{0},{1},{2}", book.Title, book.ISBN,book.Author); } sw.Close(); fs.Close(); } public static List<Book> Load() { List<Book> books = new List<Book>(); if (File.Exists("book.csv")) { FileStream fs = File.OpenRead("book.csv"); StreamReader sr = new StreamReader(fs); while (sr.EndOfStream == false) { string s = sr.ReadLine(); string[] sdatas = s.Split(','); Book book = new Book(sdatas[0], sdatas[1], sdatas[2]); books.Add(book); book_dic[book.ISBN] = book; } sr.Close(); fs.Close(); } return books; } static string rkey = 카카오 개발자 센터에서 발급받은 REST API 키; } } |
Book.cs
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 |
namespace 카카오_API를_이용한_도서_검색_및_CSV_파일로_저장_로딩 { public class Book { public string Title { get; private set; } public string ISBN { get; private set; } public string Author { get; private set; } public Book(string title,string isbn,string author) { Title = title; ISBN = isbn; Author = author; } } } |