PHP微信开发之有道翻译


Posted in PHP onJune 23, 2016

首先,你需要去有道翻译API官网去申请key:http://fanyi.youdao.com/openapi?path=data-mode
得到key之后,就可以开始从该API获得查询的数据了(返回json还是XML,看个人喜好,这里我用的是json) 
下面我直接把responseMsg方法里,实现翻译的代码给出。如果你第一次接触微信API,不懂这个方法是干什么的,请去点击PHP微信开发之文本自动回复

</pre><a target=_blank href="http://blog.csdn.net/misakaqunianxiatian/article/details/49401759" target="_blank"></a></p><p><pre name="code" class="php"> public function responseMsg(){
  
 //get post data, May be due to the different environments
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据

  //extract post data
 if(!empty($postStr)){
    
   //解析post来的XML为一个对象$postObj
   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  
   $fromUsername = $postObj->FromUserName; //请求消息的用户
   $toUsername = $postObj->ToUserName; //"我"(订阅号)的公众号id
   $keyword = trim($postObj->Content); //用户发给订阅号的消息内容
   $time = time(); //时间戳
   $msgtype = 'text'; //消息类型:文本
   $textTpl = "<xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[%s]]></MsgType>
  <Content><![CDATA[%s]]></Content>
  </xml>";

   if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event
    if($postObj->Event == 'subscribe'){ //如果是订阅事件
     $contentStr = "欢迎订阅misaka去年夏天!\n更多精彩内容:http://blog.csdn.net/misakaqunianxiatian";
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
     echo $resultStr;
     exit();
    }
   }

   $which = mb_substr($keyword, 0, 2, 'UTF-8');//获取要返回什么样的信息

   if($which== "翻译"){ //如果要进行翻译
    $fanyi = $which;
    $search = str_replace($fanyi, '', $keyword); //要翻译的关键字

    $key = ""; //在有道API申请的key
    $keyfrom = ""; //与key对应
    $url = 'http://fanyi.youdao.com/openapi.do?keyfrom=' . $keyfrom . '&key=' . $key . '&type=data&doctype=json&version=1.1&q=' . urlencode($search);//调用有道翻译API
    
    $json = file_get_contents($url);//也可以用curl来获取
    $res = json_decode($json, true);

    /**
     * 以下从返回的数据中提取翻译结果
     */
    $contentStr = '【查询】' . $res['query'] . "\n";
    $contentStr .= "【翻译】\n" . $res['translation'][0] . "\n";

    $str = '';
    foreach($res['basic']['explains'] as $v){
     $str .= $v . "\n";
    }
    $contentStr .= "【基本释义】\n" . $str;


    if(isset($res['web'])){

     foreach($res['web'] as $kk=>$vv){
      sort($vv);
      $res['web'][$kk] = $vv; //调节字段顺序
     }

     $str = '';
     foreach($res['web'] as $v){
      foreach($v as $k2=>$v2){
       if($k2 == 0){
        $str .= "【". $v2 ."】\n";
       }else{
        foreach($v2 as $v3){
         $str .= $v3 ."\n";
        }
       }
      }
     }
     $contentStr .= "【网络释义】\n" . $str;     
    }

    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
    echo $resultStr;
    exit(); 

   }

注:关注的订阅号返回的信息里要换行,要使用“\n”。在你的网站空间里,将你的代码修改一下,就可以给订阅号发送比如“翻译汉堡包”,订阅号会调用有道的API来返回翻译结果,可以中英文互译,也可以是句子。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
symfony表单与页面实现技巧
Jan 26 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
PHP微信开发之文本自动回复
Jun 23 #PHP
php微信高级接口群发 多客服
Jun 23 #PHP
php英文单词统计器
Jun 23 #PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 #PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 #PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 #PHP
PHP生成静态HTML文档实现代码
Jun 23 #PHP
You might like
Zerg基本策略
2020/03/14 星际争霸
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python搜索指定目录的方法
2015/04/29 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python实现计算器功能
2019/10/31 Python
方法名是否可以与构造器的名字相同
2012/06/04 面试题
yy生日主持词
2014/03/20 职场文书
天地会口号
2014/06/17 职场文书
高中班主任评语
2014/12/30 职场文书
停课通知书
2015/04/24 职场文书
经济纠纷起诉状
2015/05/20 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
Python连续赋值需要注意的一些问题
2021/06/03 Python
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript