728x90
반응형
Cloud Translation API 개발 시작!
기존에 테스트 했을 때는 터미널에서 cURL 이나 Powershell 을 통해서 요청을 보냈는데
자바스크립트에서 같은 내용으로 요청을 보내면 Oath2 인증오류가 발생했다.
api key 나 oath2 사용자 계정을 만들어서 같이 요청을 보내도
자바스크립트 딴에서 요청을 처리하는게 보안상 문제가 있는지 계속 거절당했다.
그래서 하루종일 고민했다 어떻게 이 인증 문제를 해결할 수 있을까..?
고민 끝에 방법을 바꿔서 요청 보내는 작업을 처리하는 서버를 만들자! 라는 결정을 내렸다.
예전에 Flask 를 써본 경험이 있어, Flask 로 만들기로 했고
요청을 보내는 것은 Powershell 로 보내는 것을 응용하기로 했다.
바로 파워쉘 스크립트를 활용하는 것이다. 로컬에 저장된 인증키를 사용할 수 있으니 Oath2 인증 문제는 해결된다.
아래의 파워쉘 스크립트가 바로 결과물이다.
param(
[string]$newInputUri # 사용자로부터 받은 입력 URI
)
# JSON 데이터 정의
$jsonData = '{
"source_language_code": "출발 언어 코드",
"target_language_code": "도착 언어 코드",
"document_input_config": {
"gcsSource": {
"inputUri": ""
}
},
"document_output_config": {
"gcsDestination": {
"outputUriPrefix": "gs://버킷명/"
}
},
"isTranslateNativePdfOnly": false
}'
# JSON 데이터를 파싱하여 객체로 변환
$jsonObject = ConvertFrom-Json $jsonData
# 입력 URI를 JSON 데이터에 적용
$jsonObject.document_input_config.gcsSource.inputUri = $newInputUri
# gcloud 명령을 사용하여 액세스 토큰 가져오기
$cred = gcloud auth print-access-token
# 요청 헤더 설정
$headers = @{
"Authorization" = "Bearer $cred"
"x-goog-user-project" = "프로젝트 ID"
}
# 요청 보내기
try {
$response = Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType "application/json; charset=utf-8" `
-Body ($jsonObject | ConvertTo-Json -Depth 10) `
-Uri "https://translation.googleapis.com/v3/projects/프로젝트 ID/locations/us-central1:translateDocument"
# 성공적인 응답인 경우
if ($response.StatusCode -eq 200) {
Write-Output "success\n"
} else {
Write-Output "오류 발생: $response.StatusCode\n"
}
} catch {
# 오류 발생 시 오류 메시지 출력
Write-Output "error : $_"
}
그리고 위와 같은 파워쉘 스크립트를 호출하는 코드를 Flask 상에서 구현해야 한다.
아래의 코드가 Flask 코드이다.
from flask import Flask, request, jsonify
import subprocess
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/update_input_uri', methods=['POST'])
def update_input_uri():
try:
# 요청에서 수정될 값을 받기
new_input_uri = request.json.get('new_input_uri')
# 수정될 값이 없는 경우 에러 반환
if not new_input_uri:
return jsonify({'error': '수정될 값이 요청에 없습니다.'}), 400
# 파워쉘 스크립트 실행
subprocess.run(['powershell', './파워쉘스크립트명.ps1', new_input_uri], check=True)
return jsonify({'message': new_input_uri + '번역이 성공적으로 완료되었습니다.'})
except subprocess.CalledProcessError as e:
return jsonify({'error': f'파워쉘 스크립트 실행 중 오류가 발생했습니다: {e.stderr}'}), 500
if __name__ == '__main__':
app.run(debug=True)
번역 요청을 처리하는 서버를 만들어 연결하니 확실히 Oath2 문제가 해결되었다.
나중을 생각하면 PDF 파일 분할이나 합치는 작업도 서버에서 처리하는 것이 낫지 않을까 고민중이다.
728x90
반응형
'개발 일지 > PDF 파일 번역 프로그램' 카테고리의 다른 글
PDF 파일 번역 프로그램 - PDF 파일 번역 (대량) (1) | 2024.04.19 |
---|---|
PDF 파일 번역 프로그램 - PDF파일 병합 및 다운로드 (0) | 2024.04.19 |
PDF 파일 번역 프로그램 - Firebase 파일 업로드 (1) | 2024.04.18 |
PDF 파일 번역 프로그램 - PDF 파일 분할(javascript) (0) | 2024.04.18 |
PDF 파일 번역 프로그램 - 브라우저 파일 업로드 (0) | 2024.04.18 |
댓글