ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ●책을 검색하다 ③예제 구현 앱의 '벤터 #81'
    카테고리 없음 2021. 8. 30. 13:39

    지난번에 소개드린 구글북스검색 API의 XML 퍼싱 방법을 바탕으로 간단한 예제 하나를 선보임... gunzok.blog.me 지

    지난번에 구글북스 API 검색 쿼리에 대해 알아보았고, 간단하게 정리해 보았습니다. 그리고 이를 바탕으로 '구글북스 검색 앱'을 구상해봤습니다 상상력으로는 재미있는 퍼싱 예제를 하나 만들 수도 있을 것 같았지만 진행 중인 프로젝트가 있어 시간을 낼 수 없어서, 그리고 지난 시간에 언급했다.시피 확장 컴포넌트 추가 없이는 리스트 구현이 어려운 관계(앱 인벤터의 한계)에서 간단하게 XML 퍼싱을 선보이는 선에서 타협을 해야 했습니다. 이번에는 구글북스 검색 앱에 대해 공개하겠습니다.구글북스 API에서 책 검색하기 ③ 예제 구현1) 개요 개발 앱 구글북스에 등록된 도서(전자책)를 검색할 수 있는 모바일 애플리케이션의 주요 기능을 요구하는 도서를 찾을 수 있도록 검색 옵션 지원과 찾아낸 도서 정보를 볼 수 있는 화면과 관련 기능을 제공.부가 기능 도서 소개문을 음성으로 읽기와 미리 볼 수 있는 샘플 제공 시 연결, 도서 정보의 간단 공유(외부 스크랩).

     

    2. 디자인 화면

    ※ 검색된 도서 다수를 출력하는 목록 대신 한 권씩의 도서 정보만 볼 수 있는 단일 뷰와 이동 버튼을 구성했습니다. 그리고 단일 뷰의 크기를 확보하기 위해 '검색 옵션 창 오픈 스위치'를 넣었습니다.

     

    3. 블록 코딩

    모든 블럭을 언급하기에는 어렵지 않은 블럭이 대부분입니다. 그래서 자세히 보면 알 수 있는 작은 블록 다발은 생략하도록 하고 주요 기능의 블록만 간략화 해 봅시다.

    ① 검색 쿼리 URL 만들기 차단

    구글북스에 도서 정보를 요청하는 질의 URL 만들기 버튼을 클릭하는 이벤트 블록입니다.총 5가지(기본, 책 제목, 저자, 출판사, 검색 제외) 조건으로 검색이 가능하도록 하였으며, 결과는 최신 등록된 순으로 (&order By=newest), 도서 1권의 정보 (&max Results=1)만 받도록 하였습니다. 거듭 말씀드리지만, 이것은 목록을 작성할 수 있는 환경이 아니기 때문에 취한 방법입니다. 그래서 마지막으로 순서를 지정할 수 있는 쿼리(&start Index=)를 다시 프로시저화하여(아래 블록 이미지 참조) 검색된 책들을 다시 찾아볼 수 있도록 하였습니다.
    index 값만 변경하면 검색된 다른 도서 정보를 확인할 수 있도록 했습니다.아,각조건에대한상세쿼리스트링도프로시저화되었습니다. 웹 컴포넌트의 Get블록에서 요청을 하시면 결과를 GotText블록(②)에서 확인할 수 있습니다.
    입력된 검색 단어를 질의 스트링으로 변환하는 프로시저 호출
    각 조건에 대한 쿼리를 완성합니다.※ 구글북스 검색 API를 테스트 해보니 공백(space)으로 나누어진 두 개 이상의 단어를 입력했을 때 정확도가 많이 떨어지는 것을 확인하였습니다. 그래서 두 개를 입력해도 첫 번째 단어(one_word)만 얻을 수 있도록 했습니다.※단어 입력 시 Web 컴포넌트의 UriEncode 블록은 사용하지 않습니다. 틀린건 아닌것 같지만, '공백'을 다른 문자로 처리해서 의도치 않은 결과를 냈습니다.
    각 항목에 해당하는 쿼리를 배로 열화했습니다.각 조건에 해당하는 쿼리 스트링은 if 블록을 사용하지 않고 매칭되도록 배열화했습니다.

    ② 퍼싱 관련 블록

    패싱의 1단계 구글북스 서버에서 받은 데이터를 Json Text Decode 블록으로 배열화(List형식)합니다.
    필요한 항목에 대한 파싱 기능을 프로시저화하였습니다. 항목 텍스트 블록에서 어떤 항목을 파싱하는지 알 수 있습니다.
    필요한 항목의 데이터를 가져오기 위한 경로 지정과 데이터의 유무에 따라 값을 달리하여 반환합니다.79번째 오픈한 파싱의 세 번째(경로 지정)부터 한 단계 더 발전시킨 것입니다. list by walking key 블록의 경로 지정을 프로그래밍화했습니다. 왜 이렇게 됐는지는 DB 구조(배열화)와 경로지정 방식을 언급한 79번째 포스팅에서 잘 보시면 이해가 되실 것 같습니다. 경로 지정에서 데이터(값)를 추출한 후에는 데이터(값) 유무에 따라 반환하는 값을 달리했습니다(마지막 result에 조립된 if블록 참조).

    그동안 파싱 관련 앱인 인벤터 포스팅은 없었습니다. 사실 작년에 파싱 관련 포스팅(#67,#69)을 했는데 곤...gunzok.blog.me

    ③ 기타 : 숫자 3자리마다 쉼표로 구분하는

    도서 정가를 출력하는 블록입니다.digit_format 프로시저는 퍼싱의 주요 블록은 아니지만 언젠가 한번 구현해 보고 싶었던 기능이어서 도전해 보았습니다. 가격 표시할 때 자릿수를 구분하는 쉼표가 없으니까 이상하더라고요 가격이 가격으로 보이지 않는다고나 할까~ 어렵지 않게 구현할 수 있을 줄 알았는데 막상 코딩해보니 좀 어렵더라구요.
    숫자 세 자리마다 쉼표를 넣는 프로시저입니다.실제로 while 블록을 사용할 수도 있지만 프로젝트에 다양한 기능이 추가되기 시작하자 while 블록으로 인한 오작동이 엉뚱한 곳에서 발생할 수 있어 피하면서 For 블록을 이용하게 되었습니다. 조금 더 연구를 하면 위프로시저보다 쉽게 만들 수 있을 텐데 아쉽네요. 먼저 문자열(가격의 숫자)을 역순으로 하고(reverse), 문자열의 3의 배수 위치별로(단, 마지막 문자열이 아닌 경우), 뒤에 쉼표를 눌러 따로 저장합니다. 그리고 다시 원래 순서대로 바꿔줬어요

     

    4. 설치 버전 앱

    ※몇번 운용해본 결과 Google북스에서 반납하는 검색결과 종합에 문제가 조금 있는 것 같습니다. 같은 조건으로 인덱스 값만 바꿨는데 종합이 흔들리네요. 주의하세요.

    ※ XML 퍼싱 예제를 선보이기 위해 개발된 앱입니다. 바이러스나 해킹이 의심스러우면 다운로드하지 마세요. 또한 테스트가 충분히 이루어지지 않아 오류가 발생할 수 있으며, 본 포스팅 이외의 예제 앱은 재배포할 수 없습니다.토노

    신체적으로 몇 가지 기능을 욕심내고 있었더니 코딩이 조금 복잡해져 버렸습니다. XML 파싱을 학습하는 데는 지장이 없을 것 같습니다. 사실 예제를 만들어 놓고 소스 오픈을 망설였어요. 조금은 싫었다고 해야 될까요? 그동안의 블록코딩 노하우가 녹아있기 때문입니다. 뭐, 만들려고 하면 번거로울 뿐 어렵지 않은 것입니다만. 이상 Google Books 검색 API를 활용한 XML 퍼싱에 대한 이야기는 마치도록 하겠습니다. 궁금하신 점 있으시면 댓글로 남겨주세요. 알고 있는 한도 내에서는 대답해 드리겠습니다. 단, 소스(프로젝트 자료) 공유는 불가능합니다.

    댓글

Designed by Tistory.