Из результатов предыдущего поста, возникла следующая задача: есть набор txt-файлов, каждый из готовых надо перевести. У Google Translate есть собственный API, которым и можно воспользоваться для автоматизации процесса.
В первую очередь необходимо пойти на Google Cloud , создать новый проект, включить Google Translate API, и получить ключ для доступа приложения к облаку. Подробный мануал по этим действиям я описал в статье про перевод с помощью NodeJS. Полученный API стоит вставить в переменную developerKey (см. код ниже)
Кроме того, понадобиться модуль apiclient.discovery, который я установил через pip.
Алгоритм программы прост: она залезает в папку /texts, загружает имена всех txt файлов в директории. После этого в цикле начинаются настоящие чудеса.
Стоит обратить внимание на то, что в минуту можно обрабатывать не более 100 000 знаков, в противном случае программа выпадает с ошибкой (обусловлено особенностями API и ограничениями на серверах Google Cloud), поэтому в коде указана задержка в десять секунд. Если у вас тексты небольшие, то задержку можно сделать меньше.
Полный код:
import json from apiclient.discovery import build import os import time
directory = 'texts/'
files = os.listdir(directory)
print("Найдено ", len(files), " файлов")
i=0
while i < len(files):
try:
f = open(directory+files[i], encoding='utf-8')
query=f.read()
f.close
target_language = 'ru'
service = build('translate','v2',developerKey='YOUR_DEVELOPER_KEY')
collection = service.translations()
request = collection.list(q=query, target=target_language)
response = request.execute()
response_json = json.dumps(response)
ascii_translation = ((response['translations'][0])['translatedText']).encode('utf-8').decode('utf-8', 'ignore')
l = open(files[i], 'w', encoding='utf-8')
l.write(ascii_translation)
l.close
l.flush()
print("Записан", i+1 , " файл " , directory, 'ru/', files[i])
i = i+1
time.sleep(10)
except:
print("Ошибка при ", files[i])
i=i+1
Для ознакомления с похожим функционалом на JS, смотрите эту статью.