微信大众,平台开辟(六) 翻译功能开辟

    添加时间: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(¥jsonStyletrue);

    ¥errorCode = ¥result[errorCode];

    ¥trans = ;

    ifisset¥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...

    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: