Mobile/안드로이드

[안드로이드/android] 파파고 API 안드로이드에서 사용하기(papago api)

냠냠:) 2020. 7. 21. 17:00

[안드로이드 스튜디오에서 파파고 api를 사용해 번역하고 싶은 문장을 번역해 화면에 띄어보는 실습]

 

실제 안드로이드 프로젝트를 진행하면서 어플에 추가한 기능입니다.

다른 분들이 안드로이드 프로젝트를 진행할 때 도움이 되고자 글을 씁니다.

 

 

1. Naver Developers에 애플리케이션 등록

(https://developers.naver.com/apps/#/register)에 들어가셔서 애플리케이션 등록을 해줍니다.

애플리케이션 이름은 간다히 아무거나 입력하셔도 되고, 사용 API는 papago 번역, 환경을 Android로 설정, 앱 패키지 이름은 실제 적용하고 싶은 프로젝트(스튜디오)의 앱 패키지 경로를 써주시면 됩니다.

 

 

 

 

2. Client ID, Secret 받기.

 

1번 단계를 거치면 ClientID값과 Secret값을 받습니다. 기억하기 좋은 곳에 저장해도 되고 사용하실 때 다시 들어오셔서 보셔도 됩니다. 편하신 대로 하면 됩니다.

 

 

 

3. java파일 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
 
public class Menu_papago {
    public String getTranslation(String word, String source, String target) {
 
        String clientId = "";//애플리케이션 클라이언트 아이디값";
        String clientSecret = "";//애플리케이션 클라이언트 시크릿값";
 
        try {
            String wordSource, wordTarget;
            String text = URLEncoder.encode(word, "UTF-8");             //word
            wordSource = URLEncoder.encode(source, "UTF-8");
            wordTarget = URLEncoder.encode(target, "UTF-8");
 
            String apiURL = "https://openapi.naver.com/v1/papago/n2mt";
            URL url = new URL(apiURL);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("X-Naver-Client-Id", clientId);
            con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
            // post request
            String postParams = "source="+wordSource+"&target="+wordTarget+"&text=" + text;
            con.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
            wr.writeBytes(postParams);
            wr.flush();
            wr.close();
            int responseCode = con.getResponseCode();
            BufferedReader br;
            if (responseCode == 200) { // 정상 호출
                br = new BufferedReader(new InputStreamReader(con.getInputStream()));
            } else {  // 에러 발생
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
            }
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = br.readLine()) != null) {
                response.append(inputLine);
            }
            br.close();
            //System.out.println(response.toString());
            String s = response.toString();
            s = s.split("\"")[27];
            return s;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "0";
    }
}
 
cs

2번에서 받은 Client ID, Secret 값을 12, 13번 라인에 입력하시면 됩니다.

저는 제가 한국어 -> 영어, 영어 -> 한국어의 기능을 따로 분류하고자 Source부분과 Target부분을 나눠놨습니다. 한가지 기능을 사용하실 분들은 https://developers.naver.com/docs/papago/papago-nmt-example-code.md 을 참고하셔서 하시면 될 것 같습니다.

s.split("\"")[27] 부분은 응답 String이 단순히 번역된 단어만 가져오지 않습니다. 그래서 전처리를 해준 것입니다. 

 

 

 

4. MainActivity에 Oncreate() 내부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
button_to_translation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(){
                    @Override
                    public void run() {
                        String word = target_translation_word.getText().toString();
                        Menu_papago papago = new Menu_papago();
                        String resultWord;
                        if(language == 0){
                            resultWord= papago.getTranslation(word,"ko","en");
                        }else{
                            resultWord= papago.getTranslation(word,"en","ko");
                        }
 
                        Bundle papagoBundle = new Bundle();
                        papagoBundle.putString("resultWord",resultWord);
 
                        Message msg = papago_handler.obtainMessage();
                        msg.setData(papagoBundle);
                        papago_handler.sendMessage(msg);
                    }
                }.start();
            }
cs

button_to_translation이라는 버튼을 눌렀을 때 전역 변수 language(따로 설정해 두었습니다.)가 0일 때는 한국어 -> 영어로 번역하고 1일 때는 영어 -> 한국어로 번역 되게 했습니다.

그리고 비동기 처리를 위해 Thread() 내에 코드를 작성하였습니다.

 

 

5. MainActivty onCreate() 밖 부분

1
2
3
4
5
6
7
8
9
10
11
   @SuppressLint("HandlerLeak")
    Handler papago_handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Bundle bundle = msg.getData();
            String resultWord = bundle.getString("resultWord");
            result_translation.setText(resultWord);
            //Toast.makeText(getApplicationContext(),resultWord,Toast.LENGTH_SHORT).show();
        }
    };
 
cs

핸들러로 변역된 단어를 가져와 result_translation이라는 텍스트뷰에 뿌려주는 부분입니다. 

 

 

이렇게 안드로이드에서 Papago API를 사용하는 실습이 끝났습니다.

실제로 코드를 가져가서 알맞은 곳에 넣어두시면 바로 실행이 될 정도로 쉽습니다.

따로 궁금하신 점이나 피드백해주실 분들은 댓글 남겨주시면 감사하겠습니다!

 

반응형