[안드로이드 스튜디오에서 파파고 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를 사용하는 실습이 끝났습니다.
실제로 코드를 가져가서 알맞은 곳에 넣어두시면 바로 실행이 될 정도로 쉽습니다.
따로 궁금하신 점이나 피드백해주실 분들은 댓글 남겨주시면 감사하겠습니다!
'Mobile > 안드로이드' 카테고리의 다른 글
[안드로이드/android] 리사이클러뷰(RecyclerView)로 메모장 만들기 (0) | 2020.07.09 |
---|---|
[안드로이드/android] jsoup을 이용해 웹 크롤링하기 (동행복권 당첨 숫자 가져오기) (8) | 2020.06.25 |
[안드로이드/android] 레이아웃과 속성 (0) | 2020.06.18 |
[안드로이드/android] 시작하기 (1) | 2020.06.16 |