PHP 구글 번역 API + PhpSpreadsheet 엑셀 파일 읽기 쓰기

2022. 4. 8. 17:09PHP

728x90


엑셀 파일을 읽어들이고 한줄 한줄 번역하는 프로그램

1. Composer 설치
PhpSpreadsheet 설치를 위해 필요
https://kor-karll.github.io/php/2019/08/12/PHP-CI-phpspreadsheet-install-copy/


2. curl  설치
https://kitae0522.tistory.com/entry/Windows-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-curl-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

3. 구글 API 키 발급
http://www.themango.co.kr/tmg/mall/admin/manual/manual.php?page=9_4_2


4. 프로그램 소스코드

<?

// Composer의 autoload.php를 사용
require_once('vendor/autoload.php');


/** 엑셀파일 읽기 */
$file = 'data1.xlsx';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load($file);
$worksheet = $spreadsheet->getActiveSheet();

$string_arr = array();

/** 엑셀파일 row들을 $string_arr에 때려넣음 */
foreach ($worksheet->getRowIterator() as $row) {
    $cell_iterator = $row->getCellIterator('B');
    $cell_iterator->setIterateOnlyExistingCells(FALSE);

    foreach ($cell_iterator as $cell) {
        $cell_value = $cell->getValue();

        array_push($string_arr, $cell_value);
    }
}

$json_string_arr = json_encode($string_arr);

/** 구글 번역API */
$api =  'https://translation.googleapis.com/language/translate/v2';

$q = '数据'; // The input text to translate. 최대 128개의 문장을 array 형식으로 넣을 수 있음.
$q2 = $json_string_arr;

$target = 'en'; // input text
$format = 'text'; // The format of the source text
$source = 'zh-CN'; // The language of the source text
$model = 'base';
$key = '구글API Key 문자열';

$param = array(
    // 'q' => $q,
    // 'q' => "array(
    //     '收藏',
    //     '系统',
    // )",
    'q' => $json_string_arr,
    'target' => $target,
    'format' => $format,
    'source' => $source,
    'model' => $model,
    'key' => $key,
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$res = curl_exec($ch);

$res_arr = json_decode($res);
$translated = $res_arr->data->translations[0]->translatedText; // 다수개의 문장일 경우 array('aa','bb','cc') 의 형태로 리턴됨

/** 엑셀파일 쓰기 */
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$writesheet = new Spreadsheet();
$sheet = $writesheet->getActiveSheet();

foreach ($translated as $k => $v) {
    $sheet->setCellValue('A'.((int)$k+1), $v);
    echo 'A'.((int)$k+1); 
}

$writer = new Xlsx($writesheet);
$writer->save('output1.xlsx');

?>
728x90
반응형