본문 바로가기
웹 개발 이야기/php

[PHP] KISA API, Google translate API 이용하여 텍스트 번역하기

by Gommin 2023. 6. 15.

번역 후 DB 체크.zip
0.00MB

 

* 파일을 받은 후 압출을 해제하세요.
* DB table 생성 sql 파일이 포함되어 있습니다.
* SQL QUERY 는 자신이 사용하기에 알맞게 수정하세요.

1. 먼저 KISA 국적 검색 API를 이용한다.

1) KISA OPEN API 사이트에서 key를 발급해야한다. (무료)
2) 키를 발급한 후 사이트에서 등록(인증)을 하면 api 이용 가능
3) https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/openkey/keyCre.do

 

KISA 후이즈검색 whois.kisa.or.kr

한국인터넷진흥원 인터넷주소자원 검색(후이즈검색) 서비스 입니다.

xn--c79as89aj0e29b77z.xn--3e0b707e

// kisa ipcheck
function kisa_ipcheck_api(){
    $key = "2021072917030408687745";
    $dataFormat = "json";
    $url ="http://whois.kisa.or.kr/openapi/ipascc.jsp?query=".$_SERVER['REMOTE_ADDR']."&key=".$key."&answer=".$dataFormat."";

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_NOSIGNAL, 1);

    //curl_setopt($ch,CURLOPT_POST, 1); //Method를 POST로 지정.. 이 라인이 아예 없으면 GET

    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    $decodeJsonData = json_decode($data, true);

    return $decodeJsonData['whois']['countryCode'];
}
$str_nation = strtolower(kisa_ipcheck_api());

 

2. RapidAPI의 를 이용하여 Google Translate를 이용한다.

1) 번역은 RapidAPI를 이용한다 (기본 무료)
2) DB에 페이지명, 분류를 이용하여 번역한 이력이 있는지 체크한다.
3) DB에 번역 이력이 있다면 해당 값을 반환, 번역 이력이 없다면 번역 후 해당 값을 반환
4) https://rapidapi.com/googlecloud/api/google-translate1

 

Google Translate API Documentation (googlecloud) | RapidAPI

 

rapidapi.com

// google tanslate
function translate_text($stx="한국",$tolang="en",$fromlang="ko"){
    $curl = curl_init();
    $rapidapi_host = "google-translate1.p.rapidapi.com";
    //$rapidapi_key = "eb3ffd85femshc1e8632b6e10718p14f838jsne6e30537b45d";
    $rapidapi_key = "726a5a3911mshb931c98247ee555p13ea7ajsn80a6a5d068e5";

    $str_postfield = "q=".$stx;
    $str_postfield .= "&target=".$tolang;
    $str_postfield .= "&source=".$fromlang;

    curl_setopt_array($curl, [
        CURLOPT_URL => "https://google-translate1.p.rapidapi.com/language/translate/v2",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $str_postfield,
        CURLOPT_HTTPHEADER => [
            "accept-encoding: application/gzip",
            "content-type: application/x-www-form-urlencoded",
            "x-rapidapi-host: ".$rapidapi_host,
            "x-rapidapi-key: ".$rapidapi_key
        ],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    $info_result = json_decode($response,true);

    curl_close($curl);

    if ($err) {
        //echo "cURL Error #:" . $err;
    } else {
        return $info_result;
    }
}
// DB 이력 체크
function chk_isdb_trans($stx,$cate_p,$cate1,$cate2="",$lang='en'){
    global $DB;

    if($stx){
        $sql = "select * from t_translate where cate_p='{$cate_p}' and cate1='{$cate1}' and cate2='{$cate2}' and lang='{$lang}'  ";
        $row = $DB->fetch_assoc($sql);
        if($row['idx']){
            return $row['stx'];
        }else{
            if($lang=="en"){
                $result_trans1 = translate_text($stx,"en","ko");
            }else{
                $result_trans1 = translate_text($stx,"ko","en");
            }

            $stx2 = $result_trans1["data"]["translations"][0]["translatedText"];

            $t_datetime = date("Y-m-d H:i:s");
            $sql = "insert into t_translate set cate_p='{$cate_p}', cate1='{$cate1}', cate2='{$cate2}', lang='{$lang}', stx='{$stx2}', t_datetime='{$t_datetime}' ";
            $DB->db_query($sql);
            return $stx2;
        }
    }else{
        return "";
    }
}

 

3. 위의 함수들을 이용하여 원하는 값을 얻는다.

// 실제 사용
$str_nation = strtolower(kisa_ipcheck_api());
if($str_nation=="kr"){
    $stx1 = "비밀번호를 재설정하세요.";
}else{
    $stx1 = chk_isdb_trans("비밀번호를 재설정하세요.",$cate_p,"txt1","","en");
}

댓글