|
Responder
|
| Autor | |
OmniPresente
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Febrero/2009 Localización: España Estado: Sin conexión Puntos: 1888 |
Tema: Traduciendo con Google TranslateEnviado: 28/Octubre/2019 a las 11:07 |
|
Saludos, compañeros:
¿Alguno habéis logrado traducir textos con Google Translate? Estoy utilizando esta función: Public Function AutoTranslate(ByVal Text As String) As String 'Add references to [Microsoft HTML Controls] and [Microsoft XML 6.0] Dim IE As MSXML2.XMLHTTP60 Dim HTMLDoc As MSHTML.HTMLDocument Dim HTMLBody As MSHTML.HTMLBody Dim URL As String Set IE = New MSXML2.XMLHTTP60 URL = "https://translate.google.com/#es/en/" & Text IE.Open "GET", URL, True IE.send While IE.ReadyState <> 4 DoEvents Wend Set HTMLDoc = New MSHTML.HTMLDocument Set HTMLBody = HTMLDoc.body HTMLBody.innerHTML = IE.responseText AutoTranslate = HTMLBody.innerHTML Exit Function End Function ... pero me devuelve lo siguiente: ? AutoTranslate("solo sé que no sé nada") <A href="about://www.google.com/"><SPAN aria-label=Google id=logo></SPAN></A> <P><B>404.</B> <INS>That’s an error.</INS> <P>The requested URL <CODE>/%23es/en/solo%20s%E9%20que%20no%20s%E9%20nada</CODE> was not found on this server. <INS>That’s all we know.</INS> </P> ... supongo que porque lo que tengo que buscar no es la propiedad responseText sino alguna otra, pero no estoy muy puesto en estos controles XML... ¿se os ocurre algo? Gracias de antemano. |
|
![]() |
|
guarracuco
Moderador
Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
Enviado: 28/Octubre/2019 a las 12:41 |
|
Esa es una de las respuestas de Google cuando no consigue el recurso solicitado.
|
|
![]() |
|
OmniPresente
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Febrero/2009 Localización: España Estado: Sin conexión Puntos: 1888 |
Enviado: 28/Octubre/2019 a las 13:00 |
|
Sí, el caso es que si la URL la tecleas tal cual en cualquier explorador:
Sí que funciona y te devuelve la traducción; por lo tanto entiendo que lo que tengo que "buscar" el valor del cuadro que contiene el texto traducido, pero no sé cómo :-( Gracias.
|
|
![]() |
|
guarracuco
Moderador
Unido: 24/Abril/2004 Localización: EEUU Estado: Sin conexión Puntos: 3239 |
Enviado: 28/Octubre/2019 a las 13:33 |
|
Imagino que es por problemas con headers.
|
|
![]() |
|
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3878 |
Enviado: 29/Octubre/2019 a las 02:14 |
|
Mira a ver si a partir de aquí te resulta más fácil
Sub xx() AbreUrlB ("/#es/en/solo sé que no sé nada") End Sub Function AbreUrlB(Url) Dim web1 As Object On Error Resume Next Set web1 = CreateObject("InternetExplorer.Application") With web1 .navigate ("https://translate.google.com" & Url) Application.Wait Now + TimeValue("00:00:100") ' Just in case web1.Visible = True '.Quit End With Set web1 = Nothing End Function Luis
|
|
|
El Búho es un pajarraco
|
|
![]() |
|
OmniPresente
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Febrero/2009 Localización: España Estado: Sin conexión Puntos: 1888 |
Enviado: 29/Octubre/2019 a las 11:20 |
|
Sí, la posibilidad de automatizar Explorer y "cortar el cacho" del string devuelto que contenga el texto traducido ya la había barajado y al final es lo que he acabado haciendo, aunque buscaba una opción más "elegante".
Esta función es un poco lenta y tampoco sé si Google, a partir de cierto número de llamadas lo vaya a entender como una especie de "ataque" y bloquee la IP. Tampoco es 100% fiable porque en algunos casos me devuelve un blanco, aunque son pocos. He probado con unas 100 llamadas y ha funcionado bien Pego cómo ha quedado la función por si a alguno os sirve... Public Function TraduceTexto(TextoTraducir, DesdeIdi, HastaIdi) If IsNull(TextoTraducir) Then Exit Function TraduceTexto = Null On Error Resume Next Set ObjWeb = CreateObject("InternetExplorer.Application") ObjWeb.navigate "https://translate.google.com/#" & DesdeIdi & "/" & HastaIdi & "/" & TextoTraducir Do While ObjWeb.ReadyState <> 4 Loop TEXTO = Replace(ObjWeb.Document.documentElement.innerHTML, """", "'") ObjWeb.Quit Set ObjWeb = Nothing DESDE = InStr(1, TEXTO, "<span class='tlid-translation translation' lang='" & HastaIdi & "'><span title=''>") + 68 HASTA = InStr(DESDE, TEXTO, "</span></span><span class='tlid-translation-gender-indicator translation-gender-indicator'>") AUX = Mid(TEXTO, DESDE, HASTA - DESDE) TraduceTexto = Replace(AUX, "</span> <span title=''>", " ") On Error GoTo 0 End Function Y, la llamada sería: Traduccion = TraduceTexto("Todo lo ignora quien de nada duda","es","en") Gracias a todos por vuestra ayuda, se puede cerrar el hilo. Un abrazo. |
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |