크롤링
웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위. 크롤링(Crawling) 혹은 스크래이핑(Scraping) 이라고도 한다.
REST
엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 간단한 의미로는, 웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다. 이 두 가지의 의미는 겹치는 부분과 충돌되는 부분이 있다. 필딩의 REST 아키텍처 형식을 따르면 HTTP나 WWW이 아닌 아주 커다란 소프트웨어 시스템을 설계하는 것도 가능하다. 또한, 리모트 프로시저 콜 대신에 간단한 XML과 HTTP 인터페이스를 이용해 설계하는 것도 가능하다.
XML이란?
트리구조의 데이터를 단순히 텍스트 형태로 나타낸 것
책 검색 api의 url에 적절한 파라미터를 세팅해 요청을 보내고 xml형식으로 돌아오는 응답을 잘 읽어서 원하는 정보를 추출자바코드로 어떻게 url에 요청을 보내고 응답을 읽을 수 있는지 xml문서에서 원하는 값을 어떻게 획득할 수 있는지
네이버 API
프로젝트 생성
1 2 3 4 5 | <dependency> <groupId>net.sf.sociaal</groupId> <artifactId>xmlpull-xpp3</artifactId> <version>3.0.0.20130526</version> </dependency> | cs |
1 2 3 4 5 6 7 8 9 10 11 | public class Book { private String title; private String link; private String image; private String author; private String price; private String discount; private String publisher; private String pubdate; private String isbn; private String description; | 모델클래스 만들기// +게터,세터, |
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import model.Book; public class Test { public static void main(String[] args) throws Exception { // 자바코드로 특정 url에 요청보내고 응답받기 // 기본 자바 API를 활용한 방법 // vs // 외부 라이브러리를 활용한 방법 String clientID = "클라이언트아이디"; String clientSecret = "클라이언트시크릿"; URL url = new URL("https://openapi.naver.com/v1/search/book.xml?query=" + URLEncoder.encode("책제목", "UTF-8")); URLConnection urlConn = url.openConnection(); urlConn.setRequestProperty("X-Naver-Client-Id", clientID); urlConn.setRequestProperty("X-Naver-Client-Secret", clientSecret); BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); String data = ""; String msg = null; while ((msg = br.readLine()) != null) { // System.out.println(msg); data += msg; } List<Book> list = null; // System.out.println(data); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); String sTag; parser.setInput(new StringReader(data)); int eventType = parser.getEventType(); Book b = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.END_DOCUMENT:// 문서의 끝 break; case XmlPullParser.START_DOCUMENT: list = new ArrayList<Book>(); break; case XmlPullParser.END_TAG:{ String tag = parser.getName(); if(tag.equals("item")){ list.add(b); b = null; } } case XmlPullParser.START_TAG: { String tag = parser.getName(); switch (tag) { case "item": b = new Book(); break; case "title": if(b != null) b.setTitle(parser.nextText()); break; case "link": if(b != null) b.setLink(parser.nextText()); break; case "image": if(b != null) b.setImage(parser.nextText()); break; case "author": if(b != null) b.setAuthor(parser.nextText()); break; case "price": if(b != null) b.setPrice(parser.nextText()); break; case "discount": if(b != null) b.setDiscount(parser.nextText()); break; case "publisher": if(b != null) b.setPublisher(parser.nextText()); break; case "pubdate": if(b != null) b.setPubdate(parser.nextText()); break; case "isbn": if(b != null) b.setIsbn(parser.nextText()); break; case "description": if(b != null) b.setDescription(parser.nextText()); break; } break; } } eventType = parser.next(); } for(Book book : list) System.out.println(book); } } | cs |
http://humble.tistory.com/23
http://fromleaf.tistory.com/150
참조 사이트
' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글
Day69 API -jason (1) | 2016.06.27 |
---|---|
Day68 네이버 API - 책검색 (0) | 2016.06.24 |
Day66 Spring-student // 스프링 인터셉터 (0) | 2016.06.22 |
Day65 Spring-student (0) | 2016.06.21 |
Day64 (0) | 2016.06.20 |