Location-Based Coffee Shop Search
LocalSearch는 지역 식당을 위한 Yahoo! Local Search Web Services를 검색하는 간단한 JavaFX 어플리케이션 입니다. 서비스는 XML 혹은 JSON 의 결과를 제공할수 있기 때문에 파싱(parsing)을 위한 예제는 두가지 모두 제공됩니다. 이름, 주소, 전화번호, 평균 별점, 리뷰 발췌 같이 가게의 상세정보를 보여주는 결과는 간단한 GUI에 표시됩니다. 사용자는 가게들의 목록을 왼쪽 혹은 오른쪽 버튼을 통해서 스크롤할수 있습니다.
코드 이해하기
결과들은 사용자에게 javafx.stage 와 javafx.scene classe를 이용하여 보여집니다. 쿼리는 처리되고 커피 가게들의 목록은 얻어집니다. 가게들의 목록은 << 와 >> 화살표 버튼들을 이용하여 탐색될수 있습니다. 선택된 가게의 상세내용은 표시됩니다. 새로운 검색으로 초기화 하기 위해서 사용자는 text box에 지역번호를 입력하고 Search 버튼을 누르거나 Enter key를 누릅니다.
정보는 JavaFX 비동기 HTTP API(javafx.io.http.HttpRequest)를 사용하는 HTTP GET request를 실행하는것으로 탐색됩니다. response 안에 문서는 JavaFX XML 혹은 JSUON pull parser(javafx.data.pull.PullParser를 이용하여 파스(parse)됩니다.
Constraint들은 지역 식당 정보를 위해서 request들 안에서 제공됩니다:
- 식당의 종류, 예르르들면 커피, 피자 등등
- 지역 코드에 의한 위치
- response에서 기대할수 있는 식당 정보의 숫자 집합들
response는 각 하나에 대해서 아래와 같은 정보들을 포함하는 식당들의 목록을 가진 XML 혹은 JSON 문서를 포함합니다:
- 이름
- 주소
- 전화번호
- GPS 좌표
- 표시된 지역 코드에 주어진 위치로 부터 거리
- 식당이 제공하는 음식의 카테고리
- 고객 평점
JSONPullParser.fx file은 JSON format response 문서의 요청(requesting)과 파싱(parsing)의 명세들을 포함하고 있습니다. XMLPullParser.fx 파일은 XML format response 문서의 requesting과 parsing의 명세들을 포함하고 있습니다. 두 파일들 모두다 response 문서들로 부터 위치, 카테고리 그리고 각 식당에 대한 별점 정보를 추출하는데 사용되곤 하는 javafx.data.pull.PullParser의 확장을 포함하고 있습니다.
Main.fx 파일의 최상단에서 FX 인자 "yahoo_appid"에 의해서 반환되어지는 값으로 초기화 되는 상수 appid는 선언되어 집니다. 등록하고 APP ID를 받기 위해서 http://developer.yahoo.com/search/로 가세요 프로그램을 실행하기 전에 상수 appid를 초기화 하기 위해서 App ID를 사용하세요. App ID는 어플리케이션에 매개변수로서 통용될수 있습니다.
def dataType = "xml"; // select data type -> xml or json def appid = FX.getArgument("yahoo_appid"); // get app-id from http://developer.yahoo.com/search/
여러분은 또한 아래 보여지는 것처럼 app-id를 직접적으로 할당하고 어플리케이션을 다시 만들수있습니다.
def appid = "<your yahoo app id>";
Main.fx 파일은 Scene 설정을 가지고 Result, Category 그리고 Rating 클래스들을 정의합니다. 이 클래스들은 파스(parse)된 정보를 포함하고 JSONPullParser.fx 와 XMLPullParser.fx에서 파서 확장(parser extension)으로 사용되기 위해서 존재합니다. RequestHandler 클래스는 javafx.io.http.HttpRequest를 상속받고 파스(parse)되기 위해서 response 문서의 종류에 의존한 다른 함수들로 초기화된 processResults 변수를 제공합니다.
만약 여러분이 인터넷 연결에 프록시-서버를 사용한다면 "Java Networking and Proxies"에 명세된 내용을 따라서 설정하시기 바랍니다.
