首页 > php教程 > php手册 > PHP微信公众平台开发

PHP微信公众平台开发

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-13 09:41:15
原创
986 人浏览过

【PHP微信公众平台开发系列】

01.配置微信接口
02.公众平台示例代码分析
03.订阅事件(subscribe)处理
04.简单回复功能开发
05.天气预报功能开发
06.翻译功能开发


一、简介

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

二、思路分析

和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译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

1

2

3

4

5

6

7

8

9

<?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?keyfrom=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻译

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

{

    "errorCode":0

    "query":"翻译",

    "translation":["translation"], // 有道翻译

    "basic":{ // 有道词典-基本词典

        "phonetic":"fān y&igrave;",

        "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字符串。

1

2

3

4

5

{

    &ldquo;from&rdquo;:&rdquo;zh&rdquo;,

    &ldquo;to&rdquo;:&rdquo;en&rdquo;,

    &ldquo;trans_result&rdquo;:[]

}

登录后复制

trans_result 为一个数组,其中每一个{}就是一个段落,结构如下所示:

1

2

3

4

5

trans_result: [

{},

{},

{}

]

登录后复制

段落结果即为trans_result 数组中的一项:

1

2

3

4

{

&ldquo;src&rdquo;:&rdquo;&rdquo;,

&ldquo;dst&rdquo;:&rdquo;&rdquo;

}

登录后复制

段落结果说明:

经json_decode 后的形式:

1

2

3

4

5

6

7

8

9

10

{

    "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个字符,截取出来的即为待翻译内容。

接着调用函数进行翻译。

1

2

3

4

//调用有道词典

$contentStr = $this->youdaoDic($word);

//调用百度词典

$contentStr = $this->baiduDic($word);

登录后复制

五、具体实现

5.1 有道翻译API

数据接口:

1

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 格式

关键代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public function youdaoDic($word){

 

        $keyfrom = "orchid";    //申请APIKEY 时所填表的网站名称的内容

        $apikey = "YourApiKey"//从有道申请的APIKEY

         

        //有道翻译-xml格式

        $url_youdao = &#39;http://fanyi.youdao.com/fanyiapi.do?keyfrom=&#39;.$keyfrom.&#39;&key=&#39;.$apikey.&#39;&type=data&doctype=xml&version=1.1&q=&#39;.$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 格式

关键代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

public function youdaoDic($word){

 

    $keyfrom = "orchid";    //申请APIKEY时所填表的网站名称的内容

    $apikey = "YourApiKey"//从有道申请的APIKEY

     

    //有道翻译-json格式

    $url_youdao = &#39;http://fanyi.youdao.com/fanyiapi.do?keyfrom=&#39;.$keyfrom.&#39;&key=&#39;.$apikey.&#39;&type=data&doctype=json&version=1.1&q=&#39;.$word;

     

    $jsonStyle = file_get_contents($url_youdao);

 

    $result = json_decode($jsonStyle,true);

     

    $errorCode = $result[&#39;errorCode&#39;];

     

    $trans = &#39;&#39;;

 

    if(isset($errorCode)){

 

        switch ($errorCode){

            case 0:

                $trans = $result[&#39;translation&#39;][&#39;0&#39;];

                break;

            case 20:

                $trans = &#39;要翻译的文本过长&#39;;

                break;

            case 30:

                $trans = &#39;无法进行有效的翻译&#39;;

                break;

            case 40:

                $trans = &#39;不支持的语言类型&#39;;

                break;

            case 50:

                $trans = &#39;无效的key&#39;;

                break;

            default:

                $trans = &#39;出现异常&#39;;

                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字符串,而且提供了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。

关键代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

//百度翻译

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(&#39;file_get_contents&#39;)){

 

        $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 格式:

百度翻译:

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板