본문 바로가기
안드로이드

안드로이드 스튜디오 네이버 파파고 api 사용해보기! (Java)

by 개발_블로그 2021. 11. 17.
반응형

오늘은 간단하게 네이버 파파고 api 를 사용해보도록 하겠습니다 .  아주 쉬워요~

 

 

오픈 API 신청하기

처음 네이버 API를 이용하려 하는 것이라면 자신의 서비스를 등록해줘야 한다.

아래 주소로 가서 자신의 서비스를 등록하고 오도록 하자.

 

https://developers.naver.com/apps/#/register?defaultScope=translate

 

애플리케이션 - NAVER Developers

 

developers.naver.com

 

 

아래는 등록할 때 화면이다.

 

네이버 API 등록 화면

사용 API항목에서 파파고 번역을 누르고 환경을 자신의 서비스에 맞게 Web/Android/IOS 중에 고르면 된다.

 

등록 후 화면

애플리케이션 등록이 끝났다면 다음과 같은 화면이 나오게 되는데 여기서 ClientId와 Client Secret 키들을 복사 해놓도록 하자.



참고: https://chung-develop.tistory.com/31 

 

 

일단 manifest에 퍼미션 추가해주셔야됩니다 . 네이버와 통신을 할거니까 당연히 인터넷 퍼미션을 넣어줘야겠죠? 

 

<uses-permission android:name="android.permission.INTERNET"/>



이제 xml 파일을 만들어 보겠습니다 . 이것도 간단하게 EditText , Button , TextView로 만 하겠습니다 .

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Papago">


    <EditText
        android:id="@+id/et_target"
        android:layout_width="247dp"
        android:layout_height="49dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="80dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        app:layout_constraintEnd_toStartOf="@+id/btn"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="81dp"
        android:layout_marginEnd="28dp"
        android:layout_marginRight="28dp"
        android:layout_marginBottom="42dp"
        android:text="번역"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="533dp"
        android:layout_marginBottom="19dp"
        android:text="결과"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

메인 액티비티입니다 .  에딧텍스트에있는것을 파파고 api가 번역을 해주고 그다음에 textView에다가 set해주라는 

내용입니다.  

 

  • 샘플 코드에서 YOUR_CLIENT_ID 또는 YOUR-CLIENT-ID에는 애플리케이션을 등록하고 발급받은 클라이언트 아이디 값을 입력합니다.
  • 샘플 코드에서 YOUR_CLIENT_SECRET 또는 YOUR-CLIENT-SECRET에는 애플리케이션을 등록하고 발급받은 클라이언트 시크릿 값을 입력합니다.

 

 

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

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 Papago extends AppCompatActivity {

    EditText et_target;
    TextView textView;
    Button btn ;
    String getresult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_papago);


        textView = findViewById(R.id.textView);
        et_target = findViewById(R.id.et_target);
        btn = findViewById(R.id.btn);



        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Translate translate = new Translate();
                translate.execute(); //버튼 클릭시 ASYNC 사용 



            }
        });

    }

    class Translate extends AsyncTask <String ,Void, String >{   //ASYNCTASK를 사용


        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override

        protected String doInBackground(String... strings) {  

          //////네이버 API  
          
            String clientId = "";     //애플리케이션 클라이언트 아이디값";
            String clientSecret = "";      //애플리케이션 클라이언트 시크릿값";
            try {
                String text = URLEncoder.encode(et_target.getText().toString(), "UTF-8");  /// 번역할 문장 Edittext  입력

                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=ko&target=en&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());
        //        textView.setText(response.toString());
                getresult = response.toString();

                getresult = getresult.split("\"")[27];   //스플릿으로 번역된 결과값만 가져오기 
                textView.setText(getresult); //  텍스트뷰에  SET해주기 




            } catch (Exception e) {
                System.out.println(e);
            }
            return null;
        }
    }


}

 

이상 파파고 api 였습니다 . ㅎㅎ 

반응형