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常用代码
Nov 23 PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
分享PHP守护进程类
Dec 30 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
学前教育学生自荐信范文
2013/12/31 职场文书
活动总结报告格式
2014/05/09 职场文书
物业工程部岗位职责
2015/02/11 职场文书
通知的写法
2015/04/23 职场文书
担保贷款承诺书
2015/04/30 职场文书
企业宣传语大全
2015/07/13 职场文书