............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Traductor - usando el motor Google

Ver el tema anterior Ver el tema siguiente Ir abajo

Traductor - usando el motor Google

Mensaje por P@li el Sáb Mar 15, 2008 3:14 pm

A partir del post publicado por Gali, "Traducir Nombres de Funciones Español - Ingles - Español", y sumando mi falta de adiestramiento de lenguas distintas al castellano, es que se me ocurrió hacer un pequeño traductor, usando el motor de Google.

Todos saben que entrando a la página [Tienes que estar registrado y conectado para ver este vínculo] pueden encontrar una gran herramienta, no sólo para traducir un texto, sino también para hacer una traducción a una página completa, y gracias a esto poder entender escritos en ruso por ejemplo!!(traduciendo de ruso a inglés, y después de inglés a español)

Bueno, la idea principal es dar un pantallazo de HTML, y cómo consultar una url como si lo hiciéramos desde la misma página, cuando en realidad lo hacemos desde un programa hecho por nosotros.

Usando el objeto XMLHTTP (de la librería Microsoft XML), conocido entre los programadores web como AJAX, con el cual podemos hacer una consulta web a cualquier página, obteniendo como resultado el código fuente que los navegadores saben interpretar para mostrarnos por ejemplo un foro, una casilla de mails, etc, etc.

Mediante funciones de VBA, orientadas a cadenas de texto, vamos a extraer de ese resultado, la parte que nos interesa, buscando una palabra que siempre aparece antes de lo que nosotros queremos extraer, y a su vez otra palabra que siempre aparece cuando finaliza.

Pero antes tenemos que entender algunas cosas de HTML.
Un formulario HTML, al igual que los de VBA, pueden contener objetos, llamados etiquetas o elementos:
INPUT type=text ; similares a los InputBox
INPUT type=submit ; similares a los CommandButton
TEXTAREA ; similares a los InputBox multilineales o RichTextBox
SELECT ; similares a los ComboBox
OPTION etiqueta dentro de la etiqueta SELECT; similar a AddItem del ComboBox
INPUT type=radio ; similares a los OptionButton
INPUT type=checkbox ; similares a los CheckBox
INPUT type=hidden ; es un TextBox con propiedad Visible=False (invisible)
INPUT type=password ; es un TextBox para contraseñas

Y así como en nuestro formularios VBA al precionar un botón se ejecuta una acción, en HTML, se envían los datos de sus elementos a una dirección determinada, definida en la propiedad ACTION del formulario. Para que puedan entenderme voy a escribir un código básico en el que nos encontramos con un pequeño formulario login.

Código:

<FORM action="login.asp">
<INPUT type="text" value="" name="usuario" />
<INPUT type="password" value="" name="contraseña" />
<INPUT type="submit" value="Iniciar Sesión" name="login">
</FORM>

FORM e INPUT, son ETIQUETAS
action, type, value y name son PROPIEDADES

Un INPUT de tipo password, es un campo en que los caracteres van a estar enmascarados por un *.
El INPUT submit es el botón que va a enviar la información a "login.asp" para que el servidor ejecute el código de programación que contiene este archivo (login.asp) y devuelva los resultados correspondientes.

A su vez, existen dos maneras de enviar la información por medio de los formularios a otra página, se definen en la propiedad method de la etiqueta FORM, y los valores pueden ser GET o POST.
El método GET envía la información en la misma cadena de la url, luego de la url coloca un signo de interrogación, y luego separando con un caracter &, nombre y valor de cada elemento unidos por un =.
Por ejemplo:
"http://www.google.com.ar/search?hl=es&q=traductor+google&meta="

Nos encontramos en esta cadena con tres elementos y sus valores:
hl=es
q=traductor+google
meta=

Se puede deducir que el formulario era parecido a esto:
Código:

<FORM method="GET" action="http://www.google.com.ar/search">
<INPUT type="hidden" name="hl" value="es">
<INPUT type="text" name="q" value="traductor google">
<INPUT type="hidden" name="meta" value="">
</FORM>

Si los datos son enviados por el método POST, los datos van a ser enviados en forma binaria, y nos vamos a poder descubrirlos a simple vista. Una de las maneras de conocer esos valores es analizando el formulario que llamó a esa página que obtenemos como resultado.
Prestando atención a todas las etiquetas o elementos que contiene ese formulario que completamos.

El formulario del traductor de Google
Código:

<form action="/translate_t" method=post id="text_form" onsubmit="this.action = '/translate_t?langpair=' + this.langpair.value;">
<input type=hidden name=hl value="es">
<input type=hidden name=ie value="UTF8">
<textarea name=text wrap=SOFT dir="ltr" id=source></textarea>
<select name=langpair>
<option value="de|fr">alemán a francés</option>
<option value="de|en">alemán a inglés</option>
<option value="ar|en" class="line-above">árabe a inglés</option>
<option value="zh|en" class="line-above">chino a inglés</option>
<option value="zh-CN|zh-TW">chino (simplificado a tradicional)</option>
<option value="zh-TW|zh-CN">chino (tradicional a simplificado)</option>
<option value="ko|en" class="line-above">coreano a inglés</option>
<option value="es|en">español a inglés</option>
<option value="fr|de" class="line-above">francés a alemán</option>
<option value="fr|en">francés a inglés</option>
<option value="el|en" class="line-above">griego a inglés</option>
<option value="nl|en">holandés a inglés</option>
<option value="en|de" class="line-above">inglés a alemán</option>
<option value="en|ar">inglés a árabe</option>
<option value="en|zh-CN">inglés a chino (simplificado)</option>
<option value="en|zh-TW">inglés a chino (tradicional)</option>
<option value="en|ko">inglés a coreano</option>
<option value="en|es" selected>inglés a español</option>
<option value="en|fr">inglés a francés</option>
<option value="en|el">inglés a griego</option>
<option value="en|nl">inglés a holandés</option>
<option value="en|it">inglés a italiano</option>
<option value="en|ja">inglés a japonés</option>
<option value="en|pt">inglés a portugués</option>
<option value="en|ru">inglés a ruso</option>
<option value="it|en" class="line-above">italiano a inglés</option>
<option value="ja|en">japonés a inglés</option>
<option value="pt|en">portugués a inglés</option>
<option value="ru|en">ruso a inglés</option>
</select>
<input type=submit value="Traduzca">
</form>

Observaciones
1.- El formulario tiene como método POST, envía la información en forma binaria.
2.- En el evento onsubmit (cuando se preciona el botón submit) cambia su propiedad ACTION, a "this.action = '/translate_t?langpair=' + this.langpair.value;", lo que es igual a un envío GET encubierto. this.langpair.value, es igual a la opción (etiqueta OPTION) que hayamos elegido en el SELECT langpair, y el valor va a ser igual a la propiedad value de ese OPTION elegido, independientemente del texto que contenga.
3.- Hay dos INPUT hidden ie y hl, hay un TEXTAREA llamado text.

Por lo tanto este formulario envía información por métodos GET y POST simultáneamente.
GET: langpair
POST: ie, hl y text

Objeto XMLHTTP
Lo podemos crear de esta manera:
'Si no agregamos ninguna referencia
Dim xml as Object
set xml=createObject("MSXML2.XMLHTTP")

'Si agregamos la referencia a Microsoft XML
Dim xml as MSXML2.XMLHTTP
set xml = New MSXML2.XMLHTTP

Para iniciar una consulta:
xml.open [metodo GET|POST], [url], [Async TRUE|FALSE]
Método es igual al del formulario que queremos imitar,
URL es el ACTION del formulario, pero con toda la dirección url a la que va dirigida,
Async, no lo usamos en VBA, siempre es FALSE

Cuando el mátodo es POST, tenemos que agregar una cabecera al objeto xml, para que pueda enviar el contenido binario.
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

Para enviar la información a la url:
xml.send [variables]
Variables es una cadena de texto, con los datos que se envían con el método POST

Para leer el resultado:
result=xml.responseText

Devuelve una cadena de texto con el código fuente de la respuesta.

Para eliminar el objeto xml:
set xml=nothing

Código final:
Código:

    Dim xml as MSXML2.XMLHTTP
    set xml = New MSXML2.XMLHTTP
    xml.Open "POST", "http://www.google.es/translate_t?langpair=es|en", False
    xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xml.send "hl=es&ie=UTF8&text=quiero traducir esta frase al idioma inglés"
    result = xml.responseText
    set xml=nothing

Espero haber dado una explicación correcta y que puedan comprender el funcionamiento de los formularios HTML.

Dejo el link de descarga de la pequeña aplicación.
[Tienes que estar registrado y conectado para ver este vínculo]

-------------------------------
Pablo Gabriel González
Buenos Aires, Argentina


Última edición por GalileoGali el Mar Abr 15, 2008 7:15 pm, editado 4 veces (Razón : Corrección del link de descarga)

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Sáb Mar 15, 2008 9:08 pm

Las explicaciones son bastante claras y creo que el paralelismo entre los FORM de XML con los de VB(A), va entendiendose.
Ahora bien quise probar el Traductor.xls.

Abriendo el Formulario ya sea por la Open o con F5, se detien y resalta la sigiente línea

xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'envío los datos
xml.send "hl=es&ie=UTF8&text=" & txtOriginal.Text 'tomo el resultado
result = xml.responseText
Error 424 se requiere un Objeto", supongo que se referira al txtOriginal??

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Sáb Mar 15, 2008 11:35 pm

Gali,
Puede que no tengas el control RichTextBox instalado en tu PC?
Porque bajé el archivo y me arrancó de primera. Tuve problemas usando controles TextBox multilineales, lo mejor que se me ocurre es usar dos controles WebBrowser, ese control lo tenemos todos los que trabajamos con Windows.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Sáb Mar 15, 2008 11:46 pm

P@li:
vos estas revisando el archivo que cargaste en esnips o el que tenes en tu maquina?
Tengo el OCX, y habilita la referencia correctamente.
No tengo ningun objeto txtOriginal
Lo defini
por otra parte cuestiona el keyup, por no estar definido con los parametros de VBA
mmmm???

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Sáb Mar 15, 2008 11:08 pm

Vuelvo a comenzar y te respondo...

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Sáb Mar 15, 2008 11:15 pm

Te aseguro que está ese objeto, voy a volver a subir el archivo con una modificación, porque me di cuenta que había dejado un WebBrowser que finalmente no use.
Corrijo el link del primer post.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Sáb Mar 15, 2008 11:56 pm

El problema sigue tal cual:
'envío los datos
xml.send "hl=es&ie=UTF8&text=" & txtOriginal.Text 'se detiene aqui e invita a Depurar atento error 424, se requiere un objeto.

Las referencias estan completas.
Supongo que txtOriginal es un control en el Formulario (TextBox o un RichTextBox, o no sé que). ¿Se crea en tiempo de ejecucion?, porque de no ser si, podrias explicarme donde esta?
realmente, me gustaria lograr que funciones, asi tenga que cargar ocx o dll que no tuviera, pero me da la impresión que deberia surgir un error en las referencias, apareciendo algun FALTA,

Tengo RICHTX32.ocx
MSXML2.DLL
SHDOCVW.DLL
MSHTML.TLB
Y el resto de las bibliotecas comunes a la mayoria de los proyectos.

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Dom Mar 16, 2008 12:03 am

La solución que se me ocurre en este momento, es que insertes dos controles al formulario, tienen que ser dos RichTextBox, uno a la izquierda llamado txtOriginal, y otro a la derecho llamado txtTraduccion.
De esa manera estaríamos solucionando momentáneamente el problema, pero es evidente que le puede pasar a otro de los participantes, así que me comprometo a adaptar un control WebBrowser, para evitar errores de librerías.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Dom Mar 16, 2008 12:12 am

Cargo el Control Adicional Microsoft Rich TextBox Control 6.0 (SP6), que corresponde al RICHTX32.ocx en system 32, cuando despliego el control sobre el formulario, al soltar el mouse, surge un Msg con la siguiente leyenda "No se confía en el asunto para la acción especificada" (primera vez que la veo)...
Mañana la seguimos....

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Dom Mar 16, 2008 12:21 am

Claro!!, el mío es la versión SP4...
Hoy es el día de las librerías y referencias!!
Ya veo que te paso la dll, y después vamos a tener problemas con las licencias!!! jajaja!!!
También podés poner TextBox con Multiline=true, funciona lo mismo, salvo que cuando precionás enter hace una especie de tab, y cambia el foco a otro objeto.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Dom Mar 16, 2008 12:25 am

y segun supongo tendre que cambiar el evento keyup, porque esta parametrizado para Rich

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por GalileoGali el Dom Mar 16, 2008 12:31 am

Met the translator work. Traducido de "Logramos que el traductor Trabaje"

Hallelujah!!!
y
Buenas Noches!!!

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Dom Mar 16, 2008 8:25 pm

Gali,
Dejo la adaptación con los WebBrowser, debo los comentarios por el momento.



[Tienes que estar registrado y conectado para ver este vínculo]

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por efasor el Mar Jul 15, 2008 1:47 am

Bueno pues yo cambié los richtb por simples TextBox y les puse el mismo nombre, luego añadí un botón para que traduzca todo el texto y listo.

[Tienes que estar registrado y conectado para ver este vínculo]

efasor

Cantidad de envíos : 4
Fecha de inscripción : 14/07/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por P@li el Mar Jul 15, 2008 6:42 pm

Te quedó genial efasor, pero prefiero seguir escribiendo en un text multilínea.

Saludos.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por federico ramirez marron el Miér Jul 16, 2008 8:48 pm

ME MARCA EERO DE COMPILACION , NO SE PUEDE ENCONTRARA EL PROYECTO O LA BIBLIOTECA
avatar
federico ramirez marron

Masculino Cantidad de envíos : 95
Edad : 43
Ciudad - Pais : acapulco, gro mexico
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por efasor el Miér Jul 16, 2008 10:21 pm

Hola mira el que modifique ese no requiere referencias, adicionales.

Fijate en el post imediatamente anterior al tuyo,,,

efasor

Cantidad de envíos : 4
Fecha de inscripción : 14/07/2008

Volver arriba Ir abajo

Re: Traductor - usando el motor Google

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.