Server : nginx/1.20.2 System : Linux VM-4-4-centos 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/greatapp.cn/application/common/model/ |
<?php namespace app\common\model; /** * Created by PhpStorm. * User: zzj * Date: 2018/1/30 * Time: 16:52 */ class Word extends Base { /** * 查询单词详细信息 * @param $word * @return array|bool|null|static */ public function getWordDetail($word){ $data = []; //查询数据库 try { $data = $this->get(['word'=>$word]); // halt($this->getLastSql()); if ($data){ //数量加一 $this->where(['en' => $word])->setInc("view_count"); $this->where(['en' => $word])->update(['update_time'=>time()]); } }catch (\Exception $e){ return null; } if (!$data) { //从扇贝取数据 $sb_data = $this->queryShanbay($word); //为空到词霸取 if (empty($sb_data) || empty(trim($sb_data['cn']))){ $sb_data = $this->queryIciba($word); } if (empty($sb_data) || !is_array($sb_data)){ return null; } //对翻译中特殊字符处理 $sb_data['cn'] = str_ireplace("<","<",$sb_data['cn']); $sb_data['cn'] = str_ireplace(">",">",$sb_data['cn']); try { $id = $this->add($sb_data); if (!$id){ return null; } }catch (\Exception $e){ return null; } $data = $sb_data; $data['id'] = $id; } //如果发音不存在,则也要去取发音和音频 if (!empty($data) && empty($data['audio_name'])){ //从扇贝取数据 $audio_name = $data['en'].".mp3"; $audio_url = "http://dict.youdao.com/dictvoice?audio=".$data['en']."&type=1"; $down_data = getFile($audio_url,"audio",$audio_name); if ($down_data && !empty($down_data['file_name'])){ //更新发音和音频文件名 $this->save([ 'audio_name' => $audio_name ],['en'=>$data['en']]); //更新data,不单独查了 $data['audio_name'] = $audio_name; } } return $data; } /** * 例句很全: * https://www.shanbay.com/bdc/mobile/preview/word?word=big * 有道的,没有音频 * http://fanyi.youdao.com/openapi.do?keyfrom=youdao111&key=60638690&type=data&doctype=xml&version=1.1&q=school */ private function queryShanbay($word){ $word = strtolower($word); //从扇贝取数据 $data = []; $url = "https://api.shanbay.com/bdc/search/?word=".urlencode($word); $str = http($url); $result = json_decode($str,true); //不转码 $json = json_encode($result,JSON_UNESCAPED_UNICODE); if ($result && $result['msg'] == "SUCCESS"){ $data['word'] = $word; $en = strtolower($result['data']['content']); //数据处理,使用美式发音,并存入数据库 $data['en'] = $en; $data['cn'] = $result['data']['definition']; $data['pron'] = $result['data']['pron']; $data['audio'] = $result['data']['audio']; $data['note'] = $json; //下载音频 $audio_name = $en.strrchr($data['audio'],"."); $down_data = getFile($data['audio'],"audio",$audio_name); if ($down_data && !empty($down_data['file_name'])){ $data['audio_name'] = $down_data['file_name']; } } return $data; } //爱词霸 private function queryIciba($word){ $word = strtolower($word); $result = file_get_contents("http://dict-co.iciba.com/api/dictionary.php?w={$word}&type=json&key=4ECE0B4F899D35A6BD5FD08A63508E6E"); $result = json_decode($result,true); //不转码 $json = json_encode($result,JSON_UNESCAPED_UNICODE); $data = []; //判断是否查到 if (empty($result['word_name'])){ return $data; } //处理翻译 $detailArr = $result['symbols'][0]; // halt($detailArr); $cn = ''; foreach ($detailArr['parts'] as $part){ $cn.=$part['part']." ".implode(',',$part['means']).'\n'; } $cn = trim($cn,'\n'); //数据处理,使用美式发音,并存入数据库 $en = strtolower($result['word_name']); $data['word'] = $word; $data['en'] = $en; $data['cn'] = $cn; $data['pron'] = $detailArr['ph_am']; $data['note'] = $json; //下载音频 //处理下载链接 $audio_url = $detailArr['ph_am_mp3']; if ($audio_url == ''){ $audio_url = "http://media.shanbay.com/audio/us/".strtolower($word).".mp3"; } // $explode = explode("/",$audio_url); // $audio_name = end($explode); $audio_name = $en.strrchr($audio_url,"."); $down_data = getFile($audio_url,"audio",$audio_name); if ($down_data && !empty($down_data['file_name'])){ $data['audio_name'] = $down_data['file_name']; } return $data; } /** * 目前思路: * 先查扇贝,再查爱词霸,如果爱词霸的MP3是空的(ph_en_mp3),就直接使用扇贝的MP3,地址是: * http://media.shanbay.com/audio/us/easy.mp3 * http://dict.youdao.com/dictvoice?audio=these&type=1 * 用的是美式发音 */ }