微信公眾平台消息接口開發(3)中英翻譯


要做一個翻譯賬號,有以下幾步:

一. 有翻譯接口:

目前有道詞典提供了翻譯接口,申請地址 http://fanyi.youdao.com/openapi?path=data-mode

下面是申請介紹:

申請完成后,會收到郵件,郵件中有api key:

數據接口

http://fanyi.youdao.com/openapi.do? keyfrom=<keyfrom>&key=<key> &type=data&doctype=<doctype>&version=1.1 &q=要翻譯的文本

版本:1.1,請求方式:get,編碼方式:utf-8

主要功能:中英互譯,同時獲得有道翻譯結果和有道詞典結果(可能沒有)

參數說明:

 type - 返回結果的類型,固定為data
 doctype - 返回結果的數據格式,xml或json或jsonp
 version - 版本,當前最新版本為1.1
 q - 要翻譯的文本,必須是UTF-8編碼,字符長度不能超過200個字符,需要進行urlencode編碼
errorCode:
 0 - 正常
 20 - 要翻譯的文本過長
 30 - 無法進行有效的翻譯
 40 - 不支持的語言類型
 50 - 無效的key

 

json數據格式舉例

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=good

{
    "errorCode":0
    "query":"good",
    "translation":["好"], // 有道翻譯
    "basic":{ // 有道詞典-基本詞典
        "phonetic":"gʊd"
        "uk-phonetic":"gʊd" //英式發音
        "us-phonetic":"ɡʊd" //美式發音
        "explains":[
            "好處",
            "好的"
            "好"
        ]
    },
    "web":[ // 有道詞典-網絡釋義
        {
            "key":"good",
            "value":["良好","善","美好"]
        },
        {...}
    ]
}

 

 

二 程序實現:

有道翻譯的源碼:需要自己申請key,然后填入

 

 

微信調用

define("TOKEN", "qq612312312312");

            
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        logger("R ".$postStr);
        //extract post data
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "text":
                    $resultStr = $this->receiveText($postObj);
                    break;
                case "event":
                    $resultStr = $this->receiveEvent($postObj);
                    break;
                default:
                    $resultStr = "unknow msg type: ".$RX_TYPE;
                    break;
            }
            logger("T ".$resultStr);
            echo $resultStr;
        }else {
            echo "";
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

    private function receiveText($object)
    {
        $funcFlag = 0;
        $keyword = trim($object->Content);
        $resultStr = "";
        $cityArray = array();
        $contentStr = "";
        $needArray = false;
        $illegal = false;
        $saytome = false;
        
        if (1 == 1){
            $contentStr = translate($keyword);
            $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
            return $resultStr;
        }
        //Content 消息內容,大小限制在2048字節,字段為空為不合法請求
        return $resultStr;
    }
    
    private function receiveEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "請直說,我將為你自動翻譯";
                break;
            case "unsubscribe":
                $contentStr = "";
                break;
            case "CLICK":
                switch ($object->EventKey)
                {
                    default:
                        $contentStr = "receive a eventkey: ".$object->EventKey;
                        break;
                }
                break;
            default:
                $contentStr = "receive a new event: ".$object->Event;
                break;
        }
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    private function transmitText($object, $content, $flag = 0)
    {
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
}

 

四,效果演示

 

中文翻譯成英語

 

 

 

==================================

歡迎關注方倍工作室微信,了解我們及行業的最新動態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM