Skip to content
Extraits de code Groupes Projets
Valider 58673211 rédigé par TC's avatar TC
Parcourir les fichiers

Mise à jour suite à la modification de Google (mieux qu'avant au final, même...

Mise à jour suite à la modification de Google (mieux qu'avant au final, même si c'était relou à mettre en place)
parent a18ab005
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
package Translation; # command = trad,translation package Translation; # command = trad,translation
use HTML::TokeParser::Simple; # use HTML::TokeParser::Simple;
use JSON qw( decode_json );
use URI::Escape; use URI::Escape;
use Common; use Common;
...@@ -78,6 +79,14 @@ sub trad_main ...@@ -78,6 +79,14 @@ sub trad_main
return 0 unless(defined($ref_params->[2])); return 0 unless(defined($ref_params->[2]));
my $prec = '';
if($ref_params->[0] =~ /^-(.*)$/)
{
$prec = $1;
shift @{$ref_params};
return 0 unless(defined($ref_params->[2]));
}
my $init_lang = shift @{$ref_params}; my $init_lang = shift @{$ref_params};
my $end_lang = shift @{$ref_params}; my $end_lang = shift @{$ref_params};
my $to_translate = join('+', @{$ref_params}); my $to_translate = join('+', @{$ref_params});
...@@ -98,8 +107,8 @@ sub trad_main ...@@ -98,8 +107,8 @@ sub trad_main
# Échappement des caractères spéciaux # Échappement des caractères spéciaux
my $to_translate = uri_escape($to_translate); my $to_translate = uri_escape($to_translate);
my $url = "http://translate.google.fr/translate_a/t?client=t&text=$to_translate&sl=$init_lang&tl=$end_lang&ie=UTF-8&oe=UTF-8&multires=1&ssel=0&tsel=0&sc=1";
my $url = "http://translate.google.fr/translate_t?hl=fr&ie=UTF-8&text=$to_translate&sl=$init_lang&tl=$end_lang"; # my $url = "http://translate.google.fr/translate_t?hl=fr&ie=UTF-8&text=$to_translate&sl=$init_lang&tl=$end_lang";
my $method = "POST"; my $method = "POST";
my %req_params = ( my %req_params = (
"text" => join(' ', @{$ref_params}), "text" => join(' ', @{$ref_params}),
...@@ -112,7 +121,8 @@ sub trad_main ...@@ -112,7 +121,8 @@ sub trad_main
my %params = ( my %params = (
"event" => $event, "event" => $event,
"reply_to" => $reply_to, "reply_to" => $reply_to,
"params" => $ref_params, "text" => $ref_params,
"prec" => $prec,
"init" => $init_lang, "init" => $init_lang,
"end" => $end_lang "end" => $end_lang
); );
...@@ -131,108 +141,65 @@ sub send_result ...@@ -131,108 +141,65 @@ sub send_result
if($status) if($status)
{ {
$::logger->debug("Status ok\n"); $::logger->debug("Status ok\n");
my $parser = HTML::TokeParser::Simple->new("string" => $buffer);
my ($tag, $tag_id);
# Récupération des langues sélectionnées pour la traduction my $trad = [];
while($tag = $parser->get_tag("h3")) # FIXME Quand la lib JSON (ou JSON::XS, je sais pas trop) arrivera à
{ # parser du JSON, on pourra corriger ça...
next if(!($tag_id = $tag->get_attr("id")) || $tag_id ne "headingtext"); # (notez que c'est pas bien de fair un eval de trucs reçus d'internet !)
last; eval "\$trad = $buffer;";
}
my $trad_lang = $parser->get_text(); my $main_trad = $trad->[0]->[0]->[0];
$trad_lang =~ s/>/>/;
my %precise = ();
# Récupération du résultat de la traduction if($#{$params->{'text'}} == 0 && defined($trad->[1]))
while($tag = $parser->get_tag("span"))
{ {
next if(!($tag_id = $tag->get_attr("id")) || $tag_id ne "result_box"); foreach my $more (@{$trad->[1]})
last;
}
#/<span id=result_box[^>]*><span[^>]*>([^<]*)<\/span>/
if($parser->get_tag("span"))
{ {
my $trad = $parser->get_text(); if($more->[0])
if($params->{"init"} =~ /^auto$/i || $params->{"end"} =~ /^auto$/i)
{ {
$trad = "\x0312" . $trad_lang . "\x03 " . $trad; $precise{$more->[0]} = $more->[1];
} if(defined($more->[2]))
# S'il n'y a qu'un seul mot, Google translate nous donne un peu plus que la simple traduction
if($#{$params->{"params"}} == 0)
{ {
while($tag = $parser->get_tag("div")) my $plus = '--'.$more->[0].'-plus--';
$precise{$plus} = {};
foreach(2..$#{$more->[2]})
{ {
next if(!($tag_id = $tag->get_attr("id")) || $tag_id ne "gt-res-dict"); $precise{$plus}->{$more->[2]->[$_]->[0]} = $more->[2]->[$_]->[1];
last; }
} }
$parser->get_tag("h3");
my $dict = $parser->get_text();
my %trad_dico = ();
while($tag = $parser->get_tag('ol'))
{
last if($tag->is_end_tag('ol'));
while($tag = $parser->get_tag('li'))
{
next if($tag->is_end_tag);
# On récupère ensuite le type de mot
my $type = $parser->get_text();
$type =~ s/\n//g;
next if($type =~ /^\s*$/);
$trad_dico{$type} = [];
$::logger->debug("Type found: '$type'\n");
# On récupère ensuite les autres traductions proposées
$tag = $parser->get_tag(); # Le premier <div>
while($tag = $parser->get_tag())
{
last if($tag->is_end_tag("li"));
next if($tag->is_end_tag());
my $trad_token = $parser->get_text();
$trad_token =~ s/\n//g;
next if($trad_token =~ /^\s*$/);
$::logger->debug(" Trad found: '$trad_token'\n");
push @{$trad_dico{$type}}, $trad_token;
} }
} }
} }
if(%trad_dico) my $trads = $main_trad;
{
$dict = " \x034[\x033$dict\x034]\x03";
my @trads = ();
foreach my $type (keys %trad_dico) if(keys %precise)
{ {
if(@{$trad_dico{$type}}) if($params->{'prec'} && defined($precise{'--'.$params->{'prec'}.'-plus--'}))
{ {
push @trads, "($type) ".join(" \x0307-\x03 ", @{$trad_dico{$type}}); my $plus = '--'.$params->{'prec'}.'-plus--';
$trads .= ' ('.$params->{'prec'}.')';
foreach my $prec (keys %{$precise{$plus}})
{
$trads .= " \x037|\x0312 $prec\x03: ".join(', ', @{$precise{$plus}->{$prec}});
} }
} }
else
if(@trads)
{ {
$trad .= $dict." ".join(" \x0307||\x03 ", @trads); foreach my $prec (keys %precise)
{
next if($prec =~ /-plus--$/);
$trads .= " \x037|\x0312 $prec\x03: ".join(', ', @{$precise{$prec}});
} }
} }
} }
$::displayer->sendto($params->{"reply_to"}, $trad); $::displayer->sendto($params->{"reply_to"}, $trads);
$::logger->debug("Buffer sent ('".Common::strip_colors($trad)."')\n"); $::logger->debug("Buffer sent ('".Common::strip_colors($trads)."')\n");
return; return;
} }
}
$::logger->debug("Status not ok\n'''"); $::logger->debug("Status not ok\n'''");
$::logger->debug($buffer); $::logger->debug($buffer);
...@@ -261,7 +228,7 @@ sub trad_help ...@@ -261,7 +228,7 @@ sub trad_help
{ {
my ($conn, $event, $reply_to, $ref_params) = @_; my ($conn, $event, $reply_to, $ref_params) = @_;
$conn->privmsg($reply_to, "`".$Config::command_sign."trad <init_lang> <end_lang> <text>` => will translate <text>"); $conn->privmsg($reply_to, "`".$Config::command_sign."trad [-<prec>] <init_lang> <end_lang> <text>` => will translate <text>, <prec> is used to be more accurate following what's returned (e.g.: name, nom, verb, ...)");
$conn->privmsg($reply_to, "There are these languages: français (fr), albanais (sq), allemand (de), anglais (en), arabe (ar), bulgare (bg), catalan (ca), Chinois (zh-CN), coréen (ko), croate (hr), danois (da), espagnol (es), estonien (et), finnois (fi), galicien (gl), grec (el), hébreu (iw), hindi (hi), hongrois (hu), indonésien (id), italien (it), japonais (ja), letton (lv), lituanien (lt), maltais (mt), néerlandais (nl), norvégien (no), polonais (pl), portugais (pt), roumain (ro), russe (ru), serbe (sr), slovaque (sk), slovène (sl), suédois (sv), tagalog (tl), tchèque (cs), thaï (th), turc (tr), ukrainien (uk), vietnamien (vi)"); $conn->privmsg($reply_to, "There are these languages: français (fr), albanais (sq), allemand (de), anglais (en), arabe (ar), bulgare (bg), catalan (ca), Chinois (zh-CN), coréen (ko), croate (hr), danois (da), espagnol (es), estonien (et), finnois (fi), galicien (gl), grec (el), hébreu (iw), hindi (hi), hongrois (hu), indonésien (id), italien (it), japonais (ja), letton (lv), lituanien (lt), maltais (mt), néerlandais (nl), norvégien (no), polonais (pl), portugais (pt), roumain (ro), russe (ru), serbe (sr), slovaque (sk), slovène (sl), suédois (sv), tagalog (tl), tchèque (cs), thaï (th), turc (tr), ukrainien (uk), vietnamien (vi)");
} # Fin trad_help } # Fin trad_help
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter