微信大众,平台开辟(六) 翻译功能开辟   
               添加时间:2013-7-29 点击量: 
 
              一、简介
上一篇文章介绍了微信大众,平台天气预告功能的开辟,实现了微信大众,平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开辟,以供读者参考。
二、思路解析
和上一篇查询天气的思路差不久不多,起首要对用户发送过来的消息进行断定,断定消息里是否含有“翻译”关键字,若是含有,则提取待翻译内容,然后调用收集上开放的翻译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 和key,应用API 时会用到。

3.1.3 API 应用典范

3.1.4 数据格局
a. xml 格局
http://fanyi.youdao.com/openapi.do?key=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?key=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字符串。
{
    “”:”zh”,
    “to”:”en”,
    “trans_result”:[]
}
trans_result 为一个数组,此中每一个{}就是一个段落,布局如下所示:
trans_result: [
{},
{},
{}
]
段落成果即为trans_result 数组中的一项:
{
“src”:””,
“dst”:””
}
段落成果申明:

经json_decode 后的情势:
{
    : 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?key=<key>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本
将上方的key 和key换成上方申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。
有道翻译供给了三种数据格局,这里我们只讲解两种,即xml 和json。
5.1.1 xml 格局
关键代码如下:
public function youdaoDic(¥word){
        ¥key = orchid;    //申请APIKEY 时所填表的网站名称的内容
        ¥apikey = YourApiKey;  //从有道申请的APIKEY
        
        //有道翻译-xml格局
        ¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&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){
        ¥key = orchid;    //申请APIKEY时所填表的网站名称的内容
        ¥apikey = YourApiKey;  //从有道申请的APIKEY
        
        //有道翻译-json格局
        ¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&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,¥=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.&=.¥.&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 格局:

百度翻译:

重视:该翻译功能放在SAE上可以或许正常运行,但在BAE上运行不成功,各位有爱好自行测试一下。
七、完全代码获取
请到QQ群213260412共享里应用。
八、存眷
请存眷 卓锦姑苏 微信大众,帐号,卓锦姑苏 基于SAE 平台开辟,针对于主流的微信功能进行开辟测试。
您可以存眷 卓锦姑苏 大众,帐号进行功能测试,以及获取新的应用开辟。
1. 登录微信客户端,伴侣们 -> 添加伴侣 -> 搜号码 -> zhuojinsz,查找并存眷。
2. 扫描二维码:

卓锦姑苏 功能列表。

David Camp
- 技巧交换,请加QQ群:213260412
 
- 营业合作,请接洽作者QQ:562866602
 
- 给我写信:mchina_tang@qq.com
 
我们永远信赖,分享是一种美德 | We Believe, Great People Share Knowledge...
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
                     
                  
     
  
 
    
    
一、简介
上一篇文章介绍了微信大众,平台天气预告功能的开辟,实现了微信大众,平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开辟,以供读者参考。
二、思路解析
和上一篇查询天气的思路差不久不多,起首要对用户发送过来的消息进行断定,断定消息里是否含有“翻译”关键字,若是含有,则提取待翻译内容,然后调用收集上开放的翻译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 和key,应用API 时会用到。

3.1.3 API 应用典范

3.1.4 数据格局
a. xml 格局
http://fanyi.youdao.com/openapi.do?key=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?key=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字符串。
{
    “”:”zh”,
    “to”:”en”,
    “trans_result”:[]
}
trans_result 为一个数组,此中每一个{}就是一个段落,布局如下所示:
trans_result: [
{},
{},
{}
]
段落成果即为trans_result 数组中的一项:
{
“src”:””,
“dst”:””
}
段落成果申明:

经json_decode 后的情势:
{
    : 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?key=<key>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本
将上方的key 和key换成上方申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。
有道翻译供给了三种数据格局,这里我们只讲解两种,即xml 和json。
5.1.1 xml 格局
关键代码如下:
public function youdaoDic(¥word){
¥key = orchid; //申请APIKEY 时所填表的网站名称的内容
¥apikey = YourApiKey; //从有道申请的APIKEY
//有道翻译-xml格局
¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&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){
¥key = orchid; //申请APIKEY时所填表的网站名称的内容
¥apikey = YourApiKey; //从有道申请的APIKEY
//有道翻译-json格局
¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&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,¥=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.&=.¥.&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 格局:

百度翻译:

重视:该翻译功能放在SAE上可以或许正常运行,但在BAE上运行不成功,各位有爱好自行测试一下。
七、完全代码获取
请到QQ群213260412共享里应用。
八、存眷
请存眷 卓锦姑苏 微信大众,帐号,卓锦姑苏 基于SAE 平台开辟,针对于主流的微信功能进行开辟测试。
您可以存眷 卓锦姑苏 大众,帐号进行功能测试,以及获取新的应用开辟。
1. 登录微信客户端,伴侣们 -> 添加伴侣 -> 搜号码 -> zhuojinsz,查找并存眷。
2. 扫描二维码:

卓锦姑苏 功能列表。

David Camp
- 技巧交换,请加QQ群:213260412
 - 营业合作,请接洽作者QQ:562866602
 - 给我写信:mchina_tang@qq.com
 
我们永远信赖,分享是一种美德 | We Believe, Great People Share Knowledge...
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永



