菜鸟笔记
提升您的技术认知

微信公众平台开发 翻译功能开发-ag真人游戏

阅读 : 472

一、简介

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

二、思路分析

和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译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>0errorcode>
    
    <query>这里是有道翻译api]]>query>
    <translation>
        <paragraph>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=帮助文档ag真人游戏首页/网站接入/入门指南

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内容。具体参见代码。

网站地图