标题: [转载代码] [转]perl使用LWP模块写的翻译小程序 [打印本页]
作者: PakTC 时间: 2014-1-11 10:37 标题: [转]perl使用LWP模块写的翻译小程序
原文链接:http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
作者:第2012位菜鸟
注:原文的脚本是在linux下运行的。在windows下执行需要把编码转为GBK再输出。- #! /usr/bin/perl
- #学习perl LWP时用post做的翻译小脚本
- #调用的是有道词典
- use strict;
- use warnings;
- use LWP::UserAgent;
- use JSON ;
- #use Data::Dumper;
-
- my $browser = LWP::UserAgent->new();
- print "Please input the word:";
- chomp (my $input = <STDIN>);
- my $response = $browser->post(
- # 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
- 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
- [
- 'type' => 'AUTO',
- 'i' => "$input",
- 'doctype' => 'json',
- ],
- );
-
- if($response->is_success){
- my $result = $response->content;
- my $json = new JSON;
- my $obj = $json->decode($result);
- #print Dumper $obj;
- my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
- $trans = "翻译结果:$trans" if $trans;
- my $string;
- eval{
- $string = join " ", @{$obj->{'smartResult'}->{"entries"}};
- };
- $trans = "$trans\n其他结果:$string" if $string;
- print $trans."\n" // "Not found\n";
- }
复制代码
脚本的详细解释请参考原文。
作者: PakTC 时间: 2014-1-11 10:42
修改了下,
不管保存为ANSI、还是UTF-8、UTF-16LE UTF-16BE 都可以正确显示为CP936规范的文本。
就是不知道有没有更简单的辨别方法?- #! /usr/bin/perl
- # 学习perl LWP时用post做的翻译小脚本
- # 调用的是有道词典
- # 作者:第2012位菜鸟
- # 原文链接 http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
- # 2014-01-10 增加编码判断+按CP936规范输出,适合在windows命令行显示 - paktc
-
- use strict;
- use warnings;
- use LWP::UserAgent;
- use JSON ;
- use Encode;
- #use Data::Dumper;
-
- my $mode=recogn();
- binmode(STDOUT,':encoding(CP936)');
-
- my $browser = LWP::UserAgent->new();
- print "Please input the word:";
- chomp (my $input = <STDIN>);
- my $response = $browser->post(
- # 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
- 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
- [
- 'type' => 'AUTO',
- 'i' => "$input",
- 'doctype' => 'json',
- ],
- );
-
- if($response->is_success){
- my $result = $response->content;
- my $json = new JSON;
- my $obj = $json->decode($result);
- #print Dumper $obj;
- my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
- my $string;
- eval{
- $string = join " ", @{$obj->{'smartResult'}->{"entries"}};
- };
-
- my $say1=decode($mode,"翻译结果:");
- my $say2=decode($mode,"\n其他结果: ");
- $trans=decode('UTF-8',$trans) if $trans;
- $string=decode('UTF-8',$string) if $string;
-
- print $say1, $trans, $say2, $string, "\n";
- }
- <STDIN>;
-
- # 判断当前脚本编码格式 仅在WIN32中文系统测试过
- sub recogn {
- my $cn="中";
- my $code;
- my @arr=split("",$cn);
- if ($#arr == 0) { # 'Unicode' 4e2d
- $code='Unicode';
- } elsif ($#arr == 1) { # 'GBK' d6 d0
- $code='GBK';
- } elsif ($#arr == 2) { # 'UTF-8' e4 b8 ad
- $code='UTF-8';
- } else {
- $code='WHAT?';
- }
- }
复制代码
作者: PowerShell 时间: 2014-1-11 12:16
1 看了半天 不知道干嘛使的,有何用处?! ----根本不说
2 和powershell语法至少有40%相似
作者: PakTC 时间: 2014-1-11 12:49
1 看了半天 不知道干嘛使的,有何用处?! ----根本不说
2 和powershell语法至少有40%相似
PowerShell 发表于 2014-1-11 12:16
标题都不会看跑到论坛耍?
作者: PakTC 时间: 2014-1-11 13:05
有一个更直接的办法是:
将下面两个明文字符
my $say1=decode($mode,"翻译结果:");
my $say2=decode($mode,"\n其他结果:");
改为unicode码的形式表达,这样就不需要判断脚本本身是什么编码- #! /usr/bin/perl
- # 学习perl LWP时用post做的翻译小脚本
- # 调用的是有道词典
- # 作者:第2012位菜鸟
- # 原文链接 http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
- # 2014-01-10 增加编码判断+按CP936规范输出,适合在windows命令行显示 - paktc
-
- use strict;
- use warnings;
- use LWP::UserAgent;
- use JSON ;
- use Encode;
- #use Data::Dumper;
-
- binmode(STDOUT,':encoding(CP936)');
-
- my $browser = LWP::UserAgent->new();
- print "Please input the word:";
- chomp (my $input = <STDIN>);
- my $response = $browser->post(
- # 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
- 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
- [
- 'type' => 'AUTO',
- 'i' => "$input",
- 'doctype' => 'json',
- ],
- );
-
- if($response->is_success){
- my $result = $response->content;
- my $json = new JSON;
- my $obj = $json->decode($result);
- #print Dumper $obj;
- my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
- my $string;
- eval{
- $string = join " ", @{$obj->{'smartResult'}->{"entries"}};
- };
-
- my $say1="\x{7ffb}\x{8bd1}\x{7ed3}\x{679c}\x{ff1a}";
- my $say2="\x{5176}\x{4ed6}\x{7ed3}\x{679c}\x{ff1a}";
- $trans=decode('UTF-8',$trans) if $trans;
- $string=decode('UTF-8',$string) if $string;
-
- print $say1, $trans, "\n", $say2, $string, "\n";
- }
- <STDIN>;
复制代码
作者: PowerShell 时间: 2014-1-11 13:28
-------[转]perl使用LWP模块写的翻译小程序------------
从标题
1 我看不出能翻译单词还是句子,还是翻译网页,还是文档翻译。
2 我看不出此脚本可以 从哪种语言到那种语言的翻译。
3 只要是翻译,必然涉及上述2问题,所以我把此贴标题鉴定为差,建议此版版主勒令其更改标题,或者要求其在脚本头增加注释,以说明上述2问题。
作者: PowerShell 时间: 2014-1-11 13:29
-------[转]perl使用LWP模块写的翻译小程序------------
从上述标题中:
1 我看不出能翻译单词还是句子,还是翻译网页,还是文档翻译。
2 我看不出此脚本可以 从哪种语言到那种语言的翻译。
3 只要是翻译,必然涉及上述2问题,所以我把此贴标题鉴定为差,建议此版版主勒令其更改标题,或者要求其在脚本头增加注释,以说明上述2问题。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |