App/Kotlin

[Android_API] 네이버 검색 API 지역/장소 찾기 (Retrofit사용)

Cune 2022. 3. 28. 15:43

 

 

해당 글을 참고해서 작성했습니다.

 

검색 API 지역 검색 개발가이드

NAVER Developers - 검색 API 지역 검색 개발가이드

developers.naver.com

 

[Android] 레트로핏으로 네이버 검색 API 사용하는 법

네이버 검색 API를 사용할 일이 생겨서 찾아보는데, 자바 언어로 레트로핏을 사용해 가져오는 예제가 보이질 않았다. 비슷한 API를 코틀린으로 작성한 건 있었는데, 이걸 보면서 자바로 바꿔봤더

onlyfor-me-blog.tistory.com

 

baseUrl에 네이버 검색 오픈 api 링크를 넣어줍니다.

class RetrofitClient {
    companion object{

        //네이버 검색 오픈 api
        private const val BASE_URL = "https://openapi.naver.com/v1/"
        private var instance: Retrofit? = null

        fun getInstance(): Retrofit?{
            if(instance == null) {
                val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
                StrictMode.setThreadPolicy(policy)

                // Gson 은 Java 객체를 JSON 으로 변환할 수 있다
                val gson = GsonBuilder()
                    .setLenient()
                    .create()

                instance = Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(ScalarsConverterFactory.create())      // 문자열 리턴받는 경우
                    .addConverterFactory(GsonConverterFactory.create(gson))     // object, integer
                    .build()
            }

            return instance
        }
    }
}

api 통신을 위한 인터페이스

interface BbsService {

        @GET("search/{type}")
        fun getSearchResult(
            @Header("X-Naver-Client-Id") id: String?,
            @Header("X-Naver-Client-Secret") pw: String?,
            @Path("type") type: String?,
            @Query("query") query: String?
        ): Call<String?>?
}

getResult함수를 통해 결과값 받기

class WriteFragment: Fragment(R.layout.fragment_write) {

    private val TAG = this.javaClass.simpleName

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

    fun getResult() {
        val bbsService = RetrofitClient2.getInstance()?.create(BbsService::class.java)
        val call: Call<String?>? = bbsService?.getSearchResult("클라이언트 아이디", "클라이언트 비밀번호", "local.json", "스타벅스")
        call?.enqueue(object : Callback<String?> {

            override fun onResponse(call: Call<String?>?, response: Response<String?>) {
                if (response.isSuccessful() && response.body() != null) {
                    val result: String = response.body()!!
                    Log.e(ContentValues.TAG, "성공 : ${result}")
                } else {
                    Log.e(ContentValues.TAG, "실패 : " + response.body())
                }
            }

            override fun onFailure(call: Call<String?>?, t: Throwable) {
                Log.e(ContentValues.TAG, "에러 : " + t.message)
            }
        })
    }


}

 

콘솔창 결과

 

키워드 검색을 통해서 지도에서 확인하고 선택하는 방법을 원했으나 이 방법은 결괏값이 1개밖에 안 나오는 것 같아서 카카오 지도 api를 사용해 봐야겠다