본문 바로가기
코딩과 알고리즘

파파고 번역 API 도전기(4) - 언어 감지 / 번역 API 클래스 ( PHP )

지난 게시글에 이어 연재되는 게시글입니다.

https://itadventure.tistory.com/540

 

파파고 번역 API 도전기(3) - 언어 감지 API ( PHP )

파파고 홈페이지 ( https://papago.naver.com/ ) 에서 번역서비스를 사용해보면, 원본언어는 '언어감지'로 설정해 놓고, 번역할 대상 언어만 선택하면 되는데요. 앞에서 다루어보았던 파파고 API 만으로

itadventure.tistory.com


지난 게시글에 다 끝난게 아닌가요?

 

지난 게시글에서 문제를 제기해 드린 것 같이,  파파고 번역 기본 소스를 홈페이지 여기 저기 넣고 나서
혹시라도 추후 API 주소가 변경되거나 무언가 필요한 파라미터가 추가된다면
모~두 찾아가 일일히 수정하여야 합니다. ( 끙.. )

파파고와 관련된 모든 기능을 한군데 소스에 몰아 넣고 이를 참조해서 사용하는 것이 일반적입니다.
함수가 가장 보편적이긴 하나, 요새는 클래스도 많이 사용하는 추세라 클래스로 소스를 작성해보았습니다.
뭔가 더 세련되 보이고 크레이가 원래 클래스 프로그래밍 방식을 더 좋아합니다 :)
지난 소스를 바탕으로 클래스를 개발하는데 소요된 시간은 1시간 남짓.
뭐.. 이 경우 글을 작성하는 시간이 더 걸리는 것 같습니다 ㅎㅎ..

 

바로 소스공개!

 

뭐.. 작성과정은 다 패스하고 최종 소스와 사용법만 소개해드릴텐데요.

먼저 파파고 언어감지, 번역 기능을 집약한 소스는 아래와 같습니다.
노파심에 다시 한번 말씀드리지만 CLIENT ID, CLIENT SECRET 는 이전 게시글에서 발급받은 키로 바꿔 주세요. 편의상 키를 공개드리지만, 실제 사용단계에서는 여러분 본인만의 키를 사용하셔야 합니다 :)
소스에 공개된 키는 언제 폐기할지 모릅니다~

papago.class.php ( 파일명은 고정 )

<?
// 피파고 언어감지, 번역 클래스
class papagoClass {
  private $client_id = "H0eyO15nsfy1_vGms7tS"; // 네이버 개발자센터에서 발급받은 CLIENT ID
  private $client_secret = "26xj1PpeHP"; // 네이버 개발자센터에서 발급받은 CLIENT SECRET
  private $lang = array(
    "ko"=>"한글",
    "en"=>"영어",
    "ja"=>"일본어",
    "zh-CN"=>"중국어 간체",
    "zh-TW"=>"중국어 번체",
    "hi"=>"힌디어",
    "es"=>"스페인어",
    "fr"=>"프랑스어",
    "de"=>"독일어",
    "pt"=>"포르투갈어",
    "vi"=>"베트남어",
    "id"=>"인도네시아어",
    "fa"=>"페르시아어",
    "ar"=>"아랍어",
    "mm"=>"미얀마어",
    "th"=>"태국어",
    "ru"=>"러시아어",
    "it"=>"이탈리아어"
  );
  
  // 언어 선택 SelectBox 표시상자
  public function SeleceBox($name, $selectlang)
  {
    echo "<select name='{$name}'>\n";
    foreach($this->lang as $lang=>$description)
    {
      echo "<option value='{$lang}'";
      if($selectlang==$lang)echo "selected";
      echo ">{$description}</option>\n";
    }
    echo "</select>\n";
  }
  
  // API 공통 함수
  public function Api($url, $postvars)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
    $headers = array();
    $headers[] = "X-Naver-Client-Id: ".($this->client_id);
    $headers[] = "X-Naver-Client-Secret: ".($this->client_secret);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec ($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close ($ch);
    if($status_code == 200) return json_decode($response);
    echo "Error 내용:".$response;
    die();
  }
  
  // 언어감지 API
  public function detectLangs($sentence)
  {
    $responseObj = $this->Api(
      "https://openapi.naver.com/v1/papago/detectLangs",
      "query=".urlencode($sentence)
    );
    return $responseObj->langCode;
  }
  
  // 언어번역 API
  public function n2mt($source, $translate, $sentence)
  {
    $responseObj = $this->Api(
      "https://openapi.naver.com/v1/papago/n2mt",
      "source={$source}&target={$translate}&text=".urlencode($sentence)
    );
    return $responseObj->message->result->translatedText;
  }
}

$papago = new papagoClass();
?>

index3.php ( 파일명은 자유입니다 )

사용하는 측 소스가 꽤 간결해졌지요?
홈페이지 여러군데 파파고 번역 기능을 심는다고 할때 관리하는 소스 분량 측면에서도 이득입니다.

<?
include_once("papago.class.php");
$sentence = $_POST['sentence'];
$translate_opt= $_POST['translate_opt'];
?>
<html>
<head>
<title></title>
</head>
<body>
파파고 번역 API <br/>
<form style='margin:0' method='post'>  
  <input type='text' name='sentence' value="<?=$sentence?>" style='width:100%'/><br/>
  원본언어 : 자동 감지<br/>
  번역언어 : <? $papago->SeleceBox("translate_opt", $translate_opt); ?>
  <button>번역</button>
</form>
<?php
if($sentence=="")die("번역할 문장을 입력하세요.");

$source = $papago->detectLangs($sentence);
echo "감지된 언어 : {$source}<br/>";
if($source==$translate_opt)die("같은 언어 번역은 필요하지 않습니다.");

$translate_sentence = $papago->n2mt($source, $translate_opt, $sentence);
echo "번역된 문장 : <b>{$translate_sentence}</b>";

?>
</body>
</html>

 

간단한 사용 안내

 

index3.php 에서 파파고 클래스를 사용하는 방법만 소개해드리자면,
아래 한 줄로 파파고 클래스를 불어옵니다. 클래스 내에서 $papago 라는 객체 선언까지 하므로 
그 이름을 그대로 사용하시면 되는데요.

include_once("papago.class.php");

 

아래는 파파고가 지원하는 언어를 선택상자로 출력하는 부분입니다.

$papago->SeleceBox("translate_opt", $translate_opt);

그리고 아래는 입력된 문장이 어떤 언어인지를 검사하는 API입니다.

$source = $papago->detectLangs($sentence);

최종적으로 언어를 A언어에서 B언어로 번역하는 API입니다.

$translate_sentence = $papago->n2mt($source, $translate_opt, $sentence);

오늘은 PHP 초급자분들이 참조할만한 관련 기술을 정리해보았습니다.
필요한 분들에게 도움이 되셨다면 좋을것 같군요 :)
오늘도 기술을 익히신 분이든 전혀 몰라도 읽어주신 모든 분들께 감사드립니다.

유익하셨다면 공감 한방! 댓글은 나이스~
감사합니다!!