守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 404|回复: 0

[入门资料] 微信公众平台开发(六) 翻译功能开发

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51717
    钢镚
    1422

    开源英雄守望者

    发表于 2016-8-18 15:30:03 | 显示全部楼层 |阅读模式
    来源:http://www.cnblogs.com/mchina/p/3170565.html


    一、简介

    上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考。

    二、思路分析

    和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译API 进行相关翻译。

    三、翻译API 分析

    网络上有很多翻译API,大家可以根据自己的需求进行选择。这里我们选择应用比较广泛的,翻译功能还比较不错的有道翻译API 和百度翻译API,下面对这两种API的相关信息进行分析。

    3.1 有道翻译API

    3.1.1 API 地址:http://fanyi.youdao.com/openapi

    注意:有道提供的API 接口,在下面的测试时,json 数据格式返回不正确,到网上查阅资料,可以正确翻译的地址为 http://fanyi.youdao.com/fanyiapi,这点注意。

    3.1.2 申请key

    按照要求填写相关信息,这些信息,下面会使用到,所以请认真如实填写。

    申请完之后,会在下方生成API key 和keyfrom,使用API 时会用到。

    3.1.3 API 使用范例

    3.1.4 数据格式

    a. xml 格式

    http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=xml&version=1.1&q=这里是有道翻译API

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <youdao-fanyi>
        <errorCode>0</errorCode>
        <!-- 有道翻译 -->
        <query><![CDATA[这里是有道翻译API]]></query>
        <translation>
            <paragraph><![CDATA[Here is the youdao translation API]]></paragraph>
        </translation>
    </youdao-fanyi>
    复制代码

    b. json 格式

    http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻译

    复制代码
    {
        "errorCode":0
        "query":"翻译",
        "translation":["translation"], // 有道翻译
        "basic":{ // 有道词典-基本词典
            "phonetic":"fān yì",
            "explains":[
                "translate",
                "interpret"
            ]
        },
        "web":[ // 有道词典-网络释义
            {
                "key":"翻译",
                "value":["translator","translation","translate","Interpreter"]
            },
            {...}
        ]
    }
    复制代码

    3.2 百度翻译API

    3.2.1 API 地址:http://openapi.baidu.com/public/2.0/bmt/translate

    3.2.2 获取api key

    开发者在百度连接平台上注册得到的授权API key,详细请参阅:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97

    3.2.3 API 使用范例

    3.2.4 数据格式

    百度翻译API 响应的数据格式为UTF-8编码的PHP数组对应的标准JSON字符串。

    {
        “from”:”zh”,
        “to”:”en”,
        “trans_result”:[]
    }

    trans_result 为一个数组,其中每一个{}就是一个段落,结构如下所示:

    trans_result: [
    {},
    {},
    {}
    ]

    段落结果即为trans_result 数组中的一项:

    {
    “src”:””,
    “dst”:””
    }

    段落结果说明:

    经json_decode 后的形式:

    复制代码
    {
        "from": "en",
        "to": "zh",
        "trans_result": [
            {
                "src": "today",
                "dst": "今天"
            }
        ]
    }
    复制代码

    四、关键字判断与待翻译内容读取

    翻译消息的格式是 “翻译+待翻译内容”,所以首先截取前两个字,判断是否为 “翻译” 关键字。

    使用php函数 mb_substr() 截取,关于该函数的用法上一篇已经讲过,这里不再赘述。

    $str_trans = mb_substr($keyword,0,2,"UTF-8");

    从消息的开头开始截取,截取两个字符,然后加以判断是否为 “翻译” 关键字。

    $str_valid = mb_substr($keyword,0,-2,"UTF-8");

    判断是否只输入“翻译”两字,这样输入,没有待翻译内容,则输入的消息也不正确。

    接下来进行待翻译内容提取:

    $word = mb_substr($keyword,2,220,"UTF-8");

    从消息的开头第3个字符开始截取,截取202个字符,截取出来的即为待翻译内容。

    接着调用函数进行翻译。

    //调用有道词典
    $contentStr = $this->youdaoDic($word);
    //调用百度词典
    $contentStr = $this->baiduDic($word);

    五、具体实现

    5.1 有道翻译API

    数据接口:

    http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本

    将上面的keyfrom 和key换成上面申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。

    有道翻译提供了三种数据格式,这里我们只讲解两种,即xml 和json。

    5.1.1 xml 格式

    关键代码如下:

    复制代码
    public function youdaoDic($word){
    
            $keyfrom = "orchid";    //申请APIKEY 时所填表的网站名称的内容
            $apikey = "YourApiKey";  //从有道申请的APIKEY
            
            //有道翻译-xml格式
            $url_youdao = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=xml&version=1.1&q='.$word;
            
            $xmlStyle = simplexml_load_file($url_youdao);
            
            $errorCode = $xmlStyle->errorCode;
    
            $paras = $xmlStyle->translation->paragraph;
    
            if($errorCode == 0){
                return $paras;
            }else{
                return "无法进行有效的翻译";
            }
    }
    复制代码

    说明:

    $xmlStyle = simplexml_load_file($url_youdao);  // PHP 函数,将XML 文档载入对象中。

    $errorCode = $xmlStyle->errorCode;  // 获取错误码

    $paras = $xmlStyle->translation->paragraph;  // 获取翻译内容

    5.1.2 json 格式

    关键代码如下:

    复制代码
        public function youdaoDic($word){
    
            $keyfrom = "orchid";    //申请APIKEY时所填表的网站名称的内容
            $apikey = "YourApiKey";  //从有道申请的APIKEY
            
            //有道翻译-json格式
            $url_youdao = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=json&version=1.1&q='.$word;
            
            $jsonStyle = file_get_contents($url_youdao);
    
            $result = json_decode($jsonStyle,true);
            
            $errorCode = $result['errorCode'];
            
            $trans = '';
    
            if(isset($errorCode)){
    
                switch ($errorCode){
                    case 0:
                        $trans = $result['translation']['0'];
                        break;
                    case 20:
                        $trans = '要翻译的文本过长';
                        break;
                    case 30:
                        $trans = '无法进行有效的翻译';
                        break;
                    case 40:
                        $trans = '不支持的语言类型';
                        break;
                    case 50:
                        $trans = '无效的key';
                        break;
                    default:
                        $trans = '出现异常';
                        break;
                }
            }
            return $trans;
            
        }
    复制代码

    说明:

    $jsonStyle = file_get_contents($url_youdao);  // 把整个文件读入一个字符串中

    $result = json_decode($jsonStyle,true);  // 对JSON 格式的字符串进行编码

    $errorCode = $result['errorCode'];  // 获取错误码

    $trans = $result['translation']['0'];  // 获取翻译结果

    5.2 百度翻译API

    百度翻译API提供UTF-8编码的PHP数组对应的标准JSON字符串,而且提供了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。

    关键代码如下:

    复制代码
        //百度翻译
        public function baiduDic($word,$from="auto",$to="auto"){
            
            //首先对要翻译的文字进行 urlencode 处理
            $word_code=urlencode($word);
            
            //注册的API Key
            $appid="YourApiKey";
            
            //生成翻译API的URL GET地址
            $baidu_url = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".$appid."&q=".$word_code."&from=".$from."&to=".$to;
            
            $text=json_decode($this->language_text($baidu_url));
    
            $text = $text->trans_result;
    
            return $text[0]->dst;
        }
            
        //百度翻译-获取目标URL所打印的内容
        public function language_text($url){
    
            if(!function_exists('file_get_contents')){
    
                $file_contents = file_get_contents($url);
    
            }else{
                    
                //初始化一个cURL对象
                $ch = curl_init();
    
                $timeout = 5;
    
                //设置需要抓取的URL
                curl_setopt ($ch, CURLOPT_URL, $url);
    
                //设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上
                curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    
                //在发起连接前等待的时间,如果设置为0,则无限等待
                curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    
                //运行cURL,请求网页
                $file_contents = curl_exec($ch);
    
                //关闭URL请求
                curl_close($ch);
            }
    
            return $file_contents;
        }
    复制代码

    说明:

    这里包含了两个函数,baiduDic() 和 language_text()。

    baiduDic() 函数:

    $word_code=urlencode($word);  // 首先对要翻译的文字进行 urlencode 处理

    $text=json_decode($this->language_text($baidu_url));  // 调用language_text() 函数获取目标URL所打印的内容,然后对JSON 格式的字符串进行编码

    $text = $text->trans_result;  //获取翻译结果数组

    return $text[0]->dst;  //取第一个数组的dst 结果。

    language_text() 函数:

    判断file_get_contents() 函数是否存在,如果存在,则使用该函数获取URL内容;如果不存在,则使用cURL 工具获取URL内容。具体参见代码。

    六、测试

    有道翻译-xml 格式:

    有道翻译-json 格式:

    百度翻译:

    七、完整代码获取

    请访问 乐思乐享 官方网盘

    URLhttp://pan.baidu.com/s/1c0s3Jby

    八、关注

    请关注 卓锦苏州 微信公众帐号,卓锦苏州 基于BAE 平台开发,针对于主流的微信功能进行开发测试。

    您可以关注 卓锦苏州 公众帐号进行功能测试,以及获取新的应用开发。

    1. 登录微信客户端,通讯录 -> 添加朋友 -> 查找公众号 -> zhuojinsz,查找并关注。

    2. 扫描二维码:

    卓锦苏州 功能列表。

     


    David Camp

    我们永远相信,分享是一种美德 | We Believe, Great People Share Knowledge...

    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-9-15 18:21 , Processed in 0.042636 second(s), 35 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表