본문 바로가기
Android

[Android] Daum검색 Rest API를 이용해 책 검색 앱 만들기 (1)

by JongSeok 2023. 1. 8.

Kako Developers(https://developers.kakao.com) 사이트에서는 Daum검색과 관련된 다양한 Rest API를 제공합니다.

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

그중에서도 이미지 검색 API를 이용해 책 검색 앱을 만들어 보겠습니다.

앱을 구현하는 과정에서 Retrofit, ViewModel, LiveData, Repository, ListAdapter 같은 여러 라이브러리를 활용해보도록 하겠습니다.

 

구현할 프로그램의 실행결과를 먼저 보겠습니다.


Http 통신을 위해 AndroidManifest.xml에 인터넷 접근 권한을 추가하고, app/build.gradle에 의존성을 추가합니다.

<manifest>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
// Moshi
implementation 'com.squareup.moshi:moshi:1.13.0'
kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.13.0'
// Okhttp
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'

Rest API

위 링크의 책 검색 API 가이드 문서를 확인합니다.

해당 주소로 검색어 요청(Request) 시 응답(Response)으로 meta와 documents로 구성된 JSON 객체가 반환됩니다.

그에 따라 우리는 반환되는 JSON 객체를 저장하기 위해 객체에 대응하는 data class를 생성합니다.

SearchResponse

@JsonClass(generateAdapter = true)
data class SearchResponse(
    val documents : List<Document>,
    val meta : Meta
)

Meta

@JsonClass(generateAdapter = true)
data class Meta(
    val total_count : Int,    // 검색된 문서 수
    val pageable_count : Int,    // 중복된 문서를 제외하고, 처음부터 요청 페이지까지의 노출 가능 문서 수
    val is_end : Boolean    // 현재 페이지가 마지막 페이지인지 여부
)

Document

@JsonClass(generateAdapter = true)
data class Document(
    val title : String,    // 도서 제목
    val contents : String,    // 도서 소개
    val url : String,    // 도서 상세 URL
    val isbn : String,    // 국제 표준 도서번호
    val datetime : String,    // 도서 출판날짜, YYYY-MM-DDThh:mm:ss.000+tz
    val authors : List<String>,    // 도서 저자 리스트
    val publisher : String,    // 도서 출판사
    val translators : List<String>,    // 도서 번역자 리스트
    val price : Int,    // 도서 정가
    val sale_price : Int,    // 도서 판매가
    val thumbnail : String,    // 도서 표지 미리보기 URL
    val status : String    // 도서 판매 상태 정보 (정상, 품절, 절판 등)
)

Constants

object Constants {
    const val BASE_URL = "https://dapi.kakao.com/"
    const val REST_API_KEY = "키"
}

Constants Object 파일을 만들어 API를 요청할 URL 주소와 REST API KEY를 정의합니다.

 

cf. REST API KEY는 kakao developers 로그인 후 내 애플리케이션에서 확인할 수 있습니다.


BookSearchRequestApi

interface BookSearchRequestApi {
    @Headers("Authorization: KakaoAK $BASE_URL")
    @GET("/v3/search/book")

    suspend fun searchBooks(
        @Query("query") query: String,   // 검색을 원하는 질의어
        @Query("sort") sort: String,     // 결과 문서 정렬 방식
        @Query("page") page: Int,   // 결과 페이지 번호
        @Query("size") size: Int    // 한 페이지에 보여질 문서 수
    ) : Response<SearchResponse>
}

가이드 문서 Request의 Parameter를 인터페이스로 정의합니다.

API 호출의 응답으로 JSON 형식의 SearchResponse 객체를 반환받을 것이기 때문에 bookSearch()의 반환값은  앞서 정의한 SearchResponse형식의 Response입니다.


RetrofitInstance

HTTP 통신을 위해 Retrofit 객체를 생성합니다.

object RetrofitInstance {
    private val okHttpClient: OkHttpClient by lazy {
        val httpLoggingInterceptor = HttpLoggingInterceptor()
            .setLevel(HttpLoggingInterceptor.Level.BODY)
        OkHttpClient.Builder()
            .addInterceptor(httpLoggingInterceptor)
            .build()
    }
    private val retrofit: Retrofit by lazy {
        Retrofit.Builder()
            .addConverterFactory(MoshiConverterFactory.create())
            .client(okHttpClient)
            .baseUrl(BASE_URL)
            .build()
    }
    val api: BookSearchRequestApi by lazy {
        retrofit.create(BookSearchRequestApi::class.java)
    }
}

 

이렇게 책 검색 API를 이용하기 위해 준비가 완료되었습니다. 

많은 파일을 생성해 다소 복잡해 보이지만 구조는 다음과 같습니다.

다음 포스팅에서 이어서 진행하겠습니다.

 

 

* [인프런] "냉동코더의 알기 쉬운 Modern Android Development 입문" 참고

728x90
반응형