번역기 앱을 만들어보자.1일차

kim hyun woo·2022년 7월 17일
7
post-thumbnail

공부도 할겸 번역기 앱을 만들어 보기로 큰 결심을 하였다..

사실 할 게 없다ㅎㅎ


우선 어떤 api를 이용할 것인가부터 고민이였다.
이거 정하느라 1시간 지나감..
처음엔 Python으로 사용한 기억이 있던 카카오 번역 api를 이용하는 게 좋을 것 같다는 생각을 했다.
그래서 카카오개발자에 들어가서 찾아보았는 데 찾을 수 없었다.. 그래서 없는게 없는 구글링을 하였다.

카카오 번역 문서

....!!!

이제 무료 api는 중단된 듯 보였다.. 돈도 많이벌면서 ㅠ

그래서 구글로 눈이 갔다. ㅎㅎ 하지만 몇 달 전쯤 구글 번역 api를 사용하기 위해 체험판 한달을 시작했던 기억이 났다.. 하지만 지금 한달이 훌쩍 지나갔다.. 그럼 구글도 유로로 사용할 수 밖에 없었다..

그래서 마지막 남은 우리의 친구 네이버를 찾아보았다. 다행하게도
친근하게도 우리의 영어실력을 포장해주던 파파고란 녀석이 보였다. 파파고짱


그래서 언능 내 어플리케이션을 등록하였다.
등록을 다하면 시크릿번호와 ID번호를 준다. 이것을 어디에 잘 모셔두면 된다.

api키는 발급 받았으니 이제 시작해보자!!!
여기까지 진짜 한시간 걸렸다


우선 응답데이터 타입을 보았다

{
    "message": {
        "@type": "response",
        "@service": "naverservice.nmt.proxy",
        "@version": "1.0.0",
        "result": {
            "srcLangType":"ko",
            "tarLangType":"en",
            "translatedText": "tea"
        }
    }
}

그래서 문서를 뒤적뒤적 하니깐 저렇게 생겼다는 걸 금방 알 수 있었다.

data class ReturnData(
    var message : Result
)
data class Result(
    var result : TranText
)
data class TranText(
    var translatedText : String
)

그래서 이것을 참고하여 ReturnData타입을 정해봤다.


그 다음 인터페이스를 구성해봤다.
인터페이스를 구현하기 위한 정보

  1. 파라미터
  2. 호출 방법
  3. 헤더에 필요한 정보

이걸 참고해서 인터페이스를 구성하기를 바란다.
아니 제발 그렇게해라 나처럼 되기 싫으면

예시를 보는게 가장 빠르다고 생각해서 보았다.
흠 대충 보니 헤더에는 아까 발급받은 id와 secret번호가 필요한 것 같다.

그리고 파라미터는
이렇게 착하게 나와있다.. ㅎㅎ
원본 언어와 목적 언어(번역할 언어)와 번역할 문장
이 3가지만 넣으면 됐다..

이걸 참고하여 인터페이스를 구성해 보았다.

interface IRetrofit {
    @GET("/v1/papago/n2mt")
    fun getTranslate(
        @Header("X-Naver-Client-Id") clientId : String,
        @Header("X-Naver-Client-Secret") clientSecret : String,
        @Query("source") source : String,
        @Query("target") target : String,
        @Query("text") text : String
    ) : Call<ReturnData>
}

처음에는 이렇게 구성했는데 나중에 호출해보니 자꾸 405 에러가 떴다. 405에러가 뭔지몰라서 다시 네이버를 뒤적뒤적 거리니

내가 2번(호출방법)을 간과했던 것이다..

ㅎㅎ;;;;;
그래서 다시 인터페이스를 구성해보았다.

interface IRetrofit {
    @POST("/v1/papago/n2mt")
    @FormUrlEncoded
    fun getTranslate(
        @Header("X-Naver-Client-Id") clientId : String,
        @Header("X-Naver-Client-Secret") clientSecret : String,
        @Field("source") source : String,
        @Field("target") target : String,
        @Field("text") text : String
    ) : Call<ReturnData>
}

그 다음엔 내가 전에 썼던 포스팅을 참고하기를 바란다.ㅎㅎ

절대 귀찮서가 아니다.


그다음 MainActivity에서 파라미터를 넣고 호출 해주면 된다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        var TAG = "Main"
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn.setOnClickListener {
            var text = transText.text.toString()
            var source = "ko"
            var target = "en"
            Log.d(TAG, "onCreate: $text")
            var data = RetrofitManage.instance.getTrans(source,target, text)
            resultText.text = data
        }
    }
}

일단 호출이 잘되는지 안되는지만 확인하기 위해 로그로 확인 해보았다.

잘된 것 같다? 그래서 급하게 레이아웃을 구성해서 앱느낌을 내보았다.

호출은 일단 잘된 것 같다?.. 오늘 1일차 끝..


앞으로 더 추가할 사항들

  • 레이아웃 멋드러지게 꾸미기(진짜)
  • Courtine을 이용하여 EditText가 변할때마다 호출하기
  • 내가 쓴 언어와 번역 할 언어를 선택 할 수 있는 버튼 추가
  • 번역된 언어 음성으로 출력해주는 기능 추가

일단 이렇게 추가할 사항들을 정해보았다. 틈틈히 시간이 생기는 대로 이 기능들을 하나씩 추가할 예정이다.

profile
TIL(Today I Learned)

0개의 댓글