¿Cómo hacer una API de traducción de Google usando Python?

Google Translate es un servicio gratuito de traducción multilingüe, basado en traducción automática estadística y neuronal, desarrollado por Google. Es ampliamente utilizado para traducir sitios web completos o páginas web de un idioma a otro. 

Crearemos una aplicación de terminal Python que tomará el idioma de origen, el idioma de destino, una frase para traducir y devolverá el texto traducido. Implementaremos pruebas unitarias y técnicas de web scraping con selenium en python. Web scrapping es un concepto de captura de los datos requeridos de un sitio web. Selenium es una biblioteca de grado industrial que se utiliza para raspado web y pruebas unitarias de varios software. Como requisito previo, necesitaremos que se instalen las siguientes herramientas en nuestro sistema.

  • Python 3.x: se debe instalar una versión de Python 3.0 o superior.
  • Biblioteca de Selenium: una biblioteca de python necesaria para desechar los sitios web. Copie la siguiente declaración para instalar selenium en su sistema.
    Instalación: python3 -m pip install selenium
  • Webdriver: Una instancia de un navegador web requerido por Selenium para abrir páginas web. Descargue la última versión de Chrome Webdriver desde el siguiente enlace y guárdelo en la misma carpeta en la que se encuentra su programa principal. 
    Enlace: https://chromedriver.chromium.org/downloads

Dividiremos la sección de código en tres partes:

  • Configuración de la herramienta webdriver de Selenium y Chrome.
  • Toma de entrada y prueba de error en la entrada.
  • Traduciendo usando Google Translate.

Parte 1: Configuración de la herramienta de selenium y la configuración del controlador web.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import JavascriptException
  
# local variables
from selenium.webdriver.chrome.options import Options as ChromeOptions
chrome_op = ChromeOptions()
chrome_op.add_argument('--headless')
browser = webdriver.Chrome(executable_path ='chromedriver', options = chrome_op)
  • Importación del objeto webdriver para conectarse a la instancia del navegador Chrome.
  • Importación de la biblioteca de teclas para conectar los comandos básicos del teclado a la instancia del navegador.
  • Importación de controladores de excepción para la instancia del navegador.
  • Importe las opciones del navegador y configure la propiedad ‘–headless’ para ejecutar la instancia del navegador en segundo plano. Comente la instrucción ”chrome_op.add_argument(‘–headless’)” para llevar el controlador web a los procesos de primer plano.

Parte 2: Toma de entrada y prueba de entrada.

def takeInput():
    languages = {"English": 'en', "French": 'fr',
                 "Spanish": 'es', "German": 'de', "Italian": 'it'}
  
    print("Select a source and target language (enter codes)")
    print("Language", "   ", "Code")
  
    for x in languages:
        print(x, "   ", languages[x])
  
    print("\n\nSource: ", end ="")
    src = input()
    sflag = 0
  
    for x in languages:
        if(languages[x] == src and not sflag):
            sflag = 1
            break
    if(not sflag):
        print("Source code not from the list, Exiting....")
        exit()
  
    print("Target: ", end ="")
    trg = input()
    tflag = 0
  
    for x in languages:
        if(languages[x] == trg and not tflag):
            tflag = 1
            break
  
    if(not tflag):
        print("Target code not from the list, Exiting....")
        exit()
  
    if(src == trg):
        print("Source and Target cannot be same, Exiting...")
        exit()
  
    print("Enter the phrase: ", end ="")
    phrase = input()
  
    return src, trg, phrase

Este es un código de demostración, por lo que el código de idiomas se limita a {inglés, español, alemán, italiano, francés}. Puede agregar más idiomas y sus códigos más adelante.

  • Tomando entrada para el código del idioma de origen y del idioma de destino.
  • Comprobando si los códigos introducidos son compatibles o no.
  • El código del idioma de origen y del idioma de destino no debe ser el mismo. 

Parte 3: Traducir usando Google Translate:

def makeCall(url, script, default):
    response = default
    try:
        browser.get(url)
        while(response == default):
            response = browser.execute_script(script)
  
    except JavascriptException:
        print(JavascriptException.args)
  
    except NoSuchElementException:
        print(NoSuchElementException.args)
  
    if(response != default):
        return response
    else:
        return 'Not Available'
  
  
def googleTranslate(src, trg, phrase):
    url = 'https://translate.google.co.in/# view = home&op = translate&sl =' + \
        src + '&tl =' + trg+'&text ='+phrase
    script = 'return document.getElementsByClassName("tlid-translation")[0].textContent'
    return makeCall(url, script, None)
  • La función googleTranslate() recibe los tres parámetros, es decir, el código fuente, el código de destino y la frase. Genera la URL para que el navegador la solicite. 
  • script contiene una declaración de javascript que busca un elemento HTML con class = «tlid-translation» y devuelve su contenido de texto.
  • La función makeCall() realiza una solicitud con la URL creada, ejecuta el script cuando la página web está lista y devuelve el texto obtenido.

Combinando las tres partes anteriores.

if __name__ == "__main__":
    src, trg, phrase = takeInput()
    print("\nResult: ", googleTranslate(src, trg, phrase))

Pegue todas las partes que se muestran arriba en un solo archivo .py y ejecútelo usando Python3.

Ejecución: python3 <nombre de archivo.py>

Producción: 

Sección de entrada:

Si ha comentado la declaración de propiedad ‘–headless’, aparecerá una ventana del navegador como la siguiente:

El resultado aparecerá en la ventana del terminal como se muestra a continuación:

Nota: Este es un proyecto de demostración, por lo que los idiomas admitidos son limitados. Puede aumentar el soporte de idiomas agregando más códigos de idioma en la declaración.

Publicación traducida automáticamente

Artículo escrito por chitrankmishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *