• Domingo 8 de Diciembre de 2024, 22:30

Autor Tema:  Problema con Perl utilizando API de google translate  (Leído 3934 veces)

zeit009

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema con Perl utilizando API de google translate
« en: Jueves 31 de Marzo de 2011, 13:58 »
0
Buenas!

Recientemente he empezado a trabajar con Perl, CGI, etc.... y ando un  poco perdido.

Mi problema es el siguiente: he creado un pequeño formulario para que la gente introduzca un texto, y dicho texto lo quiero traducir llamando a un programa de Perl que lo tengo guardado en /lib/cgi-bin/ que se conecta a Google y utilizando las API de Google Translate me devuelva el resultado.

El formulario es el siguiente (sencillito) y lo he guardado en / var / ww:


1.
Method = post <FORM action="cgi-bin/ApiPerl">
2.
Web Translator
3.
BORDER=0> <TABLE
4.
<TR>
5.
<TD> Introduzca el texto a traducir </ TD>
6.
<TD>
7.
Filas = "3" <TEXTAREA name="textointroducido"> entrada
8.
</ TEXTAREA>
9.

10.
</ TD>
11.
</ TR>
12.

13.
<TR>
14.
<td COLSPAN=2>
15.
Name = "Traducir" <INPUT type="submit" value="traducir">
16.
</ TD>
17.
</ TR>
18.
</ TABLE>
19.
</ FORM>

Comencé a crear el script en Perl que toma la variable "textointroducido" (que es el texto que queremos traducir) y usando las APIs de google translate quiero que me lo devuleva en una variable para mostrarla en una pagina html.

   1.
      use strict;
   2.
      use CGI;
   3.
       
   4.
      my $form = new CGI;
   5.
      my $txt = $form ->param('textointroducido');



En este punto, consigo guardar el texto introducido por el usuario ("textointroducido") en $txt. Ahora mi problema es a la hora de hacer las llamadas Google.


He encontrado un programa escrito en perl que traduce del Inglés al francés (en mi caso yo quiero que traduzca de ingles a español..pero bueno sirve de ejemplo) el problema de este programa es que el texto que queremos traducir es introducido a través de la entrada estándar . Aqui os muestro el codigo

   1.
      #!/usr/bin/perl
   2.
       
   3.
      use REST::Client;
   4.
      use JSON;
   5.
      use HTML::Entities qw(decode_entities);
   6.
       
   7.
       
   8.
      while (1)
   9.
      {
  10.
          print "Please enter English word: ";
  11.
          chop ( $_ = <STDIN>);
  12.
         
  13.
          my $client = REST::Client->new();
  14.
          $client->GET("@de la API de google"); --Lo pongo asi porque no me deja poner la url en el foro
  15.
          $response = $client->responseContent();
  16.
       
  17.
          $json_text = from_json( $response );
  18.
       
  19.
          foreach my $french(@{$json_text->{data}->{translations}})
  20.
          {
  21.
              my %ep_hash = ();
  22.
              $ep_hash{translatedText} = "Translated to French: $french->{translatedText}";
  23.
       
  24.
              # print french
  25.
              while (my($key, $value) = each (%ep_hash))
  26.
              {
  27.
                  print decode_entities($value);
  28.
              }
  29.
          }
  30.
          print "n";
  31.
      }



Bueno, he tratado de integrar el código escrito por mí en este programa de perl y nada. He leído que a lo mejor hay que codificar la variable $txt URI:: Encode para integrarlo en la URL...no sé...he estado leyendo y tampoco se  cómo se haria ..
Bueno, a ver si alguien me puede ayudar o si alguien sabe de alguna manera más fácil de hacer lo que quiero que me lo comente...cualquier comentario o sugerencia es bienvenida.
Gracias!
Un Saludo!

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Problema con Perl utilizando API de google translate
« Respuesta #1 en: Domingo 10 de Abril de 2011, 03:55 »
0
Yo nunca he hecho algo asi, pero buscando en CPAN encontre un modulo que hace justamente lo que quieres, de una forma mas facil:
Lingua::Translate::Google

Tambien puedes usar Lingua::Translate::Babelfish que es un poquito mas simple.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

zeit009

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema con Perl utilizando API de google translate
« Respuesta #2 en: Jueves 14 de Abril de 2011, 12:57 »
0
Muchas gracias su, ya le voy a echar un vistazo porque me puede interesar que me de la traduccion utilizando dos traductores distintos.

Por lo de mas ya he conseguido que funcione el codigo, lo dejo aqui por si a alguien le interesa (si no os funciona bajaros el paqute URI y los que os requiera...)

#!/usr/bin/perl
use strict;
use CGI ':standard';
use REST::Client;
use JSON;
use HTML::Entities qw(decode_entities);
use URI::Encode;
 
my $form = new CGI;
my $uri = URI::Encode->new();
my $txt = $form->param('textointroducido');
$txt    = $uri->encode( $txt, 1);
 
my $client = REST::Client->new();
$client->GET("@APIgoogle");
$response = $client->responseContent();
$json_text = from_json( $response );
 
print $form->header;
print $form->start_html;
 
for my $french(@{$json_text->{data}->{translations}}) {
    my %ep_hash = ();
    $ep_hash{translatedText} = "Translated to French: $french->{translatedText}";
 
    # print french
    while (my($key, $value) = each (%ep_hash)) {
        print $form->p(decode_entities($value));
    }
}
 
print $form->end_html;