지난 게시글에 이어 연재되는 게시글입니다.
https://itadventure.tistory.com/540
지난 게시글에 다 끝난게 아닌가요?
지난 게시글에서 문제를 제기해 드린 것 같이, 파파고 번역 기본 소스를 홈페이지 여기 저기 넣고 나서
혹시라도 추후 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 초급자분들이 참조할만한 관련 기술을 정리해보았습니다.
필요한 분들에게 도움이 되셨다면 좋을것 같군요 :)
오늘도 기술을 익히신 분이든 전혀 몰라도 읽어주신 모든 분들께 감사드립니다.
유익하셨다면 공감 한방! 댓글은 나이스~
감사합니다!!
'코딩과 알고리즘' 카테고리의 다른 글
파이스크립트 도전기(2) - 인구변화 그래프 (4) | 2022.07.11 |
---|---|
파이스크립트 도전기(1) - 구구단 (4) | 2022.07.11 |
파파고 번역 API 도전기(1) (5) | 2022.07.03 |
파이스크립트!, 자바스크립트를 대체할까요? (19) | 2022.06.06 |
그림그리는 구글 ? (5) | 2022.04.29 |