zoukankan      html  css  js  c++  java
  • 百度免费翻译接口

    程序需要的翻译工具,要自动分割单词,如:  SourceCodeExtension  或  Event_Subscriber_Interface,为此,只能自己写代码分割一下,然后调用翻译接口.

    先看效果吧.

    然后集成到我的工具包里的效果

    自己去注册,然后开通通用翻译接口,下载个 demo,就能使用了.

    <?php
    
    define("CURL_TIMEOUT", 10);
    define("URL", "http://api.fanyi.baidu.com/api/trans/vip/translate");
    define("APP_ID", "20212"); //APPID
    define("SEC_KEY", "LKYGG");//密钥
    
    
    print_r(translate(Data::string('__Event_SubscriberInterface__')->toWord(), 'en', 'zh'));
    
    
    class Data {
    
        protected static $string = '';
    
        public static function string($string){
    
            self::$string = $string;
            return new static();
    
        }
    
    
        public function toWord(string $delimiter=' ') :string {
    $string = self::$string;
            if(strpos($string, '_')  !== false ){
                $string = str_replace('_', ' ', $string);
            }
    
            return strtolower(trim(preg_replace(['/([A-Z])/', '/s+/'], [' ${1}', $delimiter], $string)));
    
        }
    }
    
    //翻译入口
    function translate($query, $from, $to) {
    
        $args = array(
            'q' => $query,
            'appid' => APP_ID,
            'salt' => rand(10000, 99999),
            'from' => $from,
            'to' => $to,
        );
        $args['sign'] = buildSign($query, APP_ID, $args['salt'], SEC_KEY);
        $ret = call(URL, $args);
        $ret = json_decode($ret, true);
        return $ret;
    }
    
    //加密
    function buildSign($query, $appID, $salt, $secKey) {
    
        $str = $appID . $query . $salt . $secKey;
        $ret = md5($str);
        return $ret;
    }
    
    //发起网络请求
    function call($url, $args = null, $method = "post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers = array()) {
    
        $ret = false;
        $i = 0;
        while($ret === false){
            if($i > 1)
                break;
            if($i > 0){
                sleep(1);
            }
            $ret = callOnce($url, $args, $method, false, $timeout, $headers);
            $i++;
        }
        return $ret;
    }
    
    function callOnce($url, $args = null, $method = "post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers = array()) {
    
        $ch = curl_init();
        if($method == "post"){
            $data = convert($args);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_POST, 1);
        }else{
            $data = convert($args);
            if($data){
                if(stripos($url, "?") > 0){
                    $url .= "&$data";
                }else{
                    $url .= "?$data";
                }
            }
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if(!empty($headers)){
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        if($withCookie){
            curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
        }
        $r = curl_exec($ch);
        curl_close($ch);
        return $r;
    }
    
    function convert(&$args) {
    
        $data = '';
        if(is_array($args)){
            foreach($args as $key => $val){
                if(is_array($val)){
                    foreach($val as $k => $v){
                        $data .= $key . '[' . $k . ']=' . rawurlencode($v) . '&';
                    }
                }else{
                    $data .= "$key=" . rawurlencode($val) . "&";
                }
            }
            return trim($data, "&");
        }
        return $args;
    }
  • 相关阅读:
    nsq main里面golang多个协程管理写法
    关于centos压测的问题
    Jaeger全链路go实现,包含http和消息队列的链式传递
    mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
    Axure9:一键复制Iconfont图标到Axure的插件安装
    Axure9:导入阿里云DataV.GeoAtlas矢量地图到Axure
    Axure:编辑技巧:拖动复制、编组、组内选中、穿透选中、选中模式
    Axure学习一:打开软件,预览和生成HTML原型、安装Chrome插件
    Axure RP授权码
    vm 安装rethat和centos
  • 原文地址:https://www.cnblogs.com/zbseoag/p/14338767.html
Copyright © 2011-2022 走看看