PHP ruft die Programmklasse Google Translate auf

不言
Freigeben: 2023-03-24 13:24:01
Original
2949 Leute haben es durchsucht

这篇文章介绍的内容是关于PHP调用Google翻译的程序类,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

<br/>
Nach dem Login kopieren
/*
 *Google翻译PHP接口
 */

$Google = new Google();
echo $Google->translate(&#39;中国&#39;, &#39;en&#39;);

class Google{

    public $out = "";
    public $google_translator_url = &#39;http://translate.google.com/translate_a/t&#39;;
    public $text = &#39;&#39;;
    public $from = &#39;&#39;;
    public $to = &#39;&#39;;
    
    function setText($text){ $this->text = $text;}
    function translate($text, $to = &#39;ru&#39;){
        $this->out  = "";
        $this->text = $text;
        $this->from = &#39;zh_CN&#39;;
        $this->to   = $to;        
        $gphtml = $this->postPage();	
        $arr = $this->decode($gphtml, 1);
        if(is_array($arr[&#39;sentences&#39;])){
            foreach ($arr[&#39;sentences&#39;] as $val){
                $this->out .= $val[&#39;trans&#39;];
            }
        }
        return $this->out;
    }
    
    function postPage(){
        $sockfd=socket_create(AF_INET,SOCK_STREAM,getprotobyname("tcp"));
        $enctext=urlencode($this->text);
        $post_fields="sl={$this->from}&tl={$this->to}&client=json&ie=UTF-8&oe=UTF-8&text={$enctext}";
        $post_content_length=strlen($post_fields); 
        $post_org="POST /translate_a/t HTTP/1.1rnHost: translate.google.comrnConnection: ClosernAccept-Encoding: gzip,deflate,sdchrnContent-Length: ".$post_content_length."rnrn".$post_fields;
        $ip=gethostbyname("translate.google.com");
        socket_connect($sockfd,$ip,80);
        socket_send($sockfd,$post_org,strlen($post_org),0);
        $buffer="";
        $html="";
        while(!strstr($buffer,"rnrn")){
            $buf="";
            $n=socket_recv($sockfd,$buf,2048,0);
            if($n!=0 && $n!=-1)
            {
                $buffer.=$buf;
            }           
        }
        $header=substr($buffer,0,strpos($buffer,"rnrn"));
        //echo $post_org."rn".$buffer;exit;
        if(!strstr($header,"chunked")){
            $html=substr($buffer,strpos($buffer,"rnrn")+4);
            while(1){
                $nrecv=socket_recv($sockfd,$buf,1024,0);
                if($nrecv!=0 && $nrecv!=-1){
                    $html.=$buf;
                }else{
                    socket_close($sockfd);
                    return  $this->decodeUnicode($html);
                }
            }
        }
        $html="";
        $body=substr($buffer,strpos($buffer,"rnrn")+4);
        $buf="";
        $lastlen=0;
        $recvloop=TRUE;
        $bufferloop=TRUE;
        $nRemainLen=0;
        while($recvloop){
            while($bufferloop){
                if($lastlen!=0){
                    $body=substr($body,$lastlen);
                }
                $pos=strpos($body,"rn");
                $len=hexdec(substr($body,0,$pos));
                if($len!=0){
                    $body=substr($body,$pos+2);
                    if(strlen($body)>$len+2){
                        $html.=substr($body,0,$len);
                        $body=substr($body,$len+$pos+4);
                        $lastlen=0;
                    }else{
                        $lastlen=$len+2-strlen($body);
                        if($len<strlen($body))
                            $html.=substr($body,0,(strlen($body)-$len)-2);
                        else $html.=$body;
                        $bufferloop=FALSE;
                    }
                }else{
                    return  $this->decodeUnicode($html);
                }
            }
            $buf="";
            $nrecv=socket_recv($sockfd,$buf,1024,0);
            if($nrecv!=0 && $nrecv!=-1){
                $nRemainLen+=$nrecv;
            }
            if($nRemainLen>$lastlen) {
                $bufferloop=TRUE;
                $lastlen=$nrecv-($nRemainLen-$lastlen);
                $html.=substr($buf,0,$lastlen-2);
                $nRemainLen=0;
            }
            else $html.=$buf;
        }
    }
    function decode($json,$assoc = false){
        $match = &#39;/".*?(?<!\\)"/&#39;;
        $string = preg_replace($match, &#39;&#39;, $json);
        $string = preg_replace(&#39;/[,:{}[]0-9.-+Eaeflnr-u nrt]/&#39;, &#39;&#39;, $string);
        if ($string != &#39;&#39;) { return null;}
        $s2m = array();
        $m2s = array();
        preg_match_all($match, $json, $m);
        foreach ($m[0] as $s) {
            $hash = &#39;"&#39; . md5($s) . &#39;"&#39;;
            $s2m[$s] = $hash;
            $m2s[$hash] = str_replace(&#39;$&#39;, &#39;$&#39;, $s);
        }
        $json = strtr($json, $s2m);
        $a = ($assoc) ? &#39;&#39; : &#39;(object) &#39;;
        $data = array(
            &#39;:&#39; => &#39;=>&#39;, 
            &#39;[&#39; => &#39;array(&#39;, 
            &#39;{&#39; => "{$a}array(", 
            &#39;]&#39; => &#39;)&#39;, 
            &#39;}&#39; => &#39;)&#39;
        );
        $json = strtr($json, $data);
        $json = preg_replace(&#39;~([s(,>])(-?)0~&#39;, &#39;$1$2&#39;, $json);
        $json = strtr($json, $m2s);
        $function = @create_function(&#39;&#39;, "return {$json};");
        $return = ($function) ? $function() : null;
        unset($s2m); 
        unset($m2s); 
        unset($function);
        return $return;
    }
    function decodeUnicode($str) {
        return preg_replace_callback(&#39;/\\u([0-9a-f]{4})/i&#39;,
                create_function(
                    &#39;$matches&#39;,
                    &#39;return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");&#39;
                ),
                $str);
    }
}
Nach dem Login kopieren

相关推荐:

PHP调用其他文件中的类    

PHP调用科大讯飞语音服务           


Das obige ist der detaillierte Inhalt vonPHP ruft die Programmklasse Google Translate auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage